From a2f976d595b51fc06f0f882b7145c3b617b610e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Fazekas?= Date: Fri, 21 Aug 2026 10:03:53 +0200 Subject: [PATCH 1/2] test(ios): failing harness test for view recreated by Fabric Fabric deletes a component view when its subtree stops being mounted (display: 'none', or a screen frozen by enableFreeze) and recreates it from the same, unchanged ShadowNode. On iOS the recreated view is never configured: nitro's isDirty prop flags live on the shared Props object and the first view instance already consumed them, so the second one never gets its file, stays blank, and the ref JS holds points at a dead view. Fails on iOS until the nitro bump; passes on Android, which recreates nothing. --- example/__tests__/view-recreate.harness.tsx | 145 ++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 example/__tests__/view-recreate.harness.tsx diff --git a/example/__tests__/view-recreate.harness.tsx b/example/__tests__/view-recreate.harness.tsx new file mode 100644 index 00000000..2fa36d14 --- /dev/null +++ b/example/__tests__/view-recreate.harness.tsx @@ -0,0 +1,145 @@ +import { + describe, + it, + expect, + render, + waitFor, + cleanup, +} from 'react-native-harness'; +import { useState } from 'react'; +import { View } from 'react-native'; +import { + RiveView, + RiveFileFactory, + Fit, + type RiveFile, + type RiveViewRef, +} from '@rive-app/react-native'; +import type { ViewModelInstance } from '@rive-app/react-native'; + +/** + * Fabric deletes a component view when its subtree stops being mounted + * (`display: 'none'`, or a react-native-screens screen frozen by + * `enableFreeze(true)`) and recreates it from the same, unchanged ShadowNode + * when the subtree comes back. The recreated view has to be configured from + * those props. + * + * On iOS it was not: nitro tracks props with `isDirty` flags stored on the + * shared Props object and clears them once applied, so the second view + * instance was handed a props object whose flags the first instance had + * already consumed. It never received its file, stayed blank forever, and the + * ref JS holds kept pointing at the dead view. See PR #365. + */ + +const QUICK_START = require('../assets/rive/quick_start.riv'); + +function expectDefined(value: T): asserts value is NonNullable { + expect(value).toBeDefined(); +} + +type TestContext = { + ref: RiveViewRef | null; + error: string | null; + setHidden: ((hidden: boolean) => void) | null; +}; + +// The visibility state lives here so that flipping it re-renders this +// component only, leaving the RiveView's own ShadowNode untouched — the +// situation a frozen screen creates. +function HideableRive({ + context, + file, + instance, +}: { + context: TestContext; + file: RiveFile; + instance: ViewModelInstance; +}) { + const [hidden, setHidden] = useState(false); + context.setHidden = setHidden; + + return ( + + ); +} + +// A trigger only reaches its listener while a live view advances the state +// machine the instance is bound to, which is what makes this a usable answer +// to "is the view still driving this data binding?". +async function triggerReachesListener( + instance: ViewModelInstance +): Promise { + const trigger = instance.triggerProperty('gameOver'); + expectDefined(trigger); + let fired = false; + const removeListener = trigger.addListener(() => { + fired = true; + }); + trigger.trigger(); + await waitFor( + () => { + expect(fired).toBe(true); + }, + { timeout: 1000 } + ).catch(() => {}); + removeListener(); + trigger.dispose(); + return fired; +} + +describe('view recreated by Fabric (PR #365)', () => { + it('keeps driving its data binding after hide/show', async () => { + const file = await RiveFileFactory.fromSource(QUICK_START, undefined); + const vm = file.defaultArtboardViewModel(); + expectDefined(vm); + const instance = vm.createDefaultInstance(); + expectDefined(instance); + + const context: TestContext = { ref: null, error: null, setHidden: null }; + + await render( + + ); + + await waitFor( + () => { + expect(context.ref).not.toBeNull(); + }, + { timeout: 5000 } + ); + await context.ref!.awaitViewReady(); + + // Control: the trigger reaches its listener while the view is alive, so a + // failure below means the view stopped working, not that the probe never did. + expect(await triggerReachesListener(instance)).toBe(true); + + context.setHidden!(true); + await new Promise((r) => setTimeout(r, 400)); + context.setHidden!(false); + await new Promise((r) => setTimeout(r, 600)); + + expect(context.error).toBeNull(); + expect(await triggerReachesListener(instance)).toBe(true); + + cleanup(); + }); +}); From 8a919cac912b2ad3040149479f8d8f3f3b306990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Fazekas?= Date: Sun, 23 Aug 2026 23:46:59 +0200 Subject: [PATCH 2/2] fix: bump nitro to 0.37.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated updateProps now diffs the new Props snapshot against the old one instead of consuming isDirty flags that live on the shared Props object (mrousavy/nitro#1503, #1506, #1510), so a component view Fabric recreates from an unchanged ShadowNode gets every provided prop applied again rather than nothing. That is what view-recreate.harness.tsx was written for. The peer range moves with it, so consumers have to bump too. Prop parsing also moved into Nitro core, which takes the old post-process shim's parse site away — but mrousavy/nitro#1184 is still live there, so clearing an optional prop throws mid-commit ("RiveView.layoutScaleFactor: Value is null, expected a number"). Reinstate the shim one level up: the post-process now injects a parseNullAsCleared wrapper into the generated Props constructor that reads the raw value through the public RawPropsCompat::at and parses a null-valued optional prop as a cleared one. The fix keeps shipping inside the package and works on stock nitro 0.37.0, so consumers are covered without patching nitro themselves. Covered by a harness test for both the optional and the variant shape. The generated EventPropertiesOutput variant is now ordered `boolean | number | string`, so the two hand-written helpers swap .second and .third. Both example apps make glog non-modular in post_install: 0.37.0 exposes React's renderer headers in the NitroModules modulemap and they reach , whose headers include from inside `namespace google` — illegal once glog is a module, so every target that builds the NitroModules module fails to compile. Nothing in React Native imports glog as a module. --- .../rive/EventPropertiesOutputExtensions.kt | 4 +- .../__tests__/optional-prop-clear.harness.tsx | 140 ++++++++++++ example/ios/Podfile | 15 ++ example/package.json | 2 +- expo-example/package.json | 2 +- expo55-example/package.json | 2 +- expo57-example/app.config.js | 1 + expo57-example/package.json | 2 +- expo57-example/plugins/with-textual-glog.js | 41 ++++ ios/EventPropertiesOutputExtensions.swift | 4 +- nitrogen/generated/android/c++/JAlignment.hpp | 4 +- .../android/c++/JAndroidRenderBackend.hpp | 4 +- .../generated/android/c++/JArtboardBy.hpp | 4 +- .../android/c++/JArtboardByTypes.hpp | 4 +- .../generated/android/c++/JDataBindByName.hpp | 4 +- .../generated/android/c++/JDataBindMode.hpp | 4 +- .../android/c++/JEventPropertiesOutput.cpp | 12 +- .../android/c++/JEventPropertiesOutput.hpp | 32 +-- nitrogen/generated/android/c++/JFit.hpp | 4 +- .../generated/android/c++/JFrameRateRange.hpp | 4 +- nitrogen/generated/android/c++/JFunc_void.hpp | 4 +- .../android/c++/JFunc_void_RiveError.hpp | 4 +- .../c++/JFunc_void_UnifiedRiveEvent.hpp | 4 +- .../generated/android/c++/JFunc_void_bool.hpp | 4 +- .../android/c++/JFunc_void_double.hpp | 4 +- .../android/c++/JFunc_void_std__string.hpp | 4 +- ...id_std__string_std__string_std__string.hpp | 4 +- .../c++/JHybridBindableArtboardSpec.hpp | 4 +- .../android/c++/JHybridFallbackFontSpec.hpp | 4 +- .../c++/JHybridRiveFileFactorySpec.hpp | 4 +- .../android/c++/JHybridRiveFileSpec.cpp | 32 +-- .../android/c++/JHybridRiveFileSpec.hpp | 4 +- .../android/c++/JHybridRiveFontConfigSpec.cpp | 8 +- .../android/c++/JHybridRiveFontConfigSpec.hpp | 4 +- .../c++/JHybridRiveImageFactorySpec.hpp | 4 +- .../android/c++/JHybridRiveImageSpec.hpp | 4 +- .../android/c++/JHybridRiveLoggerSpec.hpp | 4 +- .../android/c++/JHybridRiveRuntimeSpec.hpp | 4 +- .../android/c++/JHybridRiveViewSpec.hpp | 4 +- .../JHybridViewModelArtboardPropertySpec.hpp | 4 +- .../JHybridViewModelBooleanPropertySpec.hpp | 4 +- .../c++/JHybridViewModelColorPropertySpec.hpp | 4 +- .../c++/JHybridViewModelEnumPropertySpec.hpp | 4 +- .../c++/JHybridViewModelImagePropertySpec.hpp | 4 +- .../c++/JHybridViewModelInstanceSpec.cpp | 8 +- .../c++/JHybridViewModelInstanceSpec.hpp | 4 +- .../c++/JHybridViewModelListPropertySpec.hpp | 4 +- .../JHybridViewModelNumberPropertySpec.hpp | 4 +- .../c++/JHybridViewModelPropertySpec.hpp | 4 +- .../android/c++/JHybridViewModelSpec.cpp | 8 +- .../android/c++/JHybridViewModelSpec.hpp | 4 +- .../JHybridViewModelStringPropertySpec.hpp | 4 +- .../JHybridViewModelTriggerPropertySpec.hpp | 4 +- .../android/c++/JReferencedAssetsType.hpp | 4 +- .../android/c++/JResolvedReferencedAsset.hpp | 4 +- .../generated/android/c++/JRiveAssetType.hpp | 4 +- .../android/c++/JRiveEnumDefinition.hpp | 20 +- nitrogen/generated/android/c++/JRiveError.hpp | 4 +- .../generated/android/c++/JRiveErrorType.hpp | 4 +- .../generated/android/c++/JRiveEventType.hpp | 4 +- nitrogen/generated/android/c++/JSemantics.hpp | 4 +- .../android/c++/JUnifiedRiveEvent.hpp | 6 +- .../c++/JVariant_Double_FrameRateRange.hpp | 6 +- ...stanceSpec_DataBindMode_DataBindByName.hpp | 8 +- .../android/c++/JViewModelPropertyInfo.hpp | 4 +- .../android/c++/JViewModelPropertyType.hpp | 4 +- .../c++/views/JHybridRiveViewStateUpdater.cpp | 135 ++++++----- .../c++/views/JHybridRiveViewStateUpdater.hpp | 7 +- .../com/margelo/nitro/rive/ArtboardBy.kt | 17 ++ .../com/margelo/nitro/rive/DataBindByName.kt | 13 ++ .../nitro/rive/EventPropertiesOutput.kt | 40 ++-- .../com/margelo/nitro/rive/FrameRateRange.kt | 17 ++ .../com/margelo/nitro/rive/Func_void.kt | 2 - .../margelo/nitro/rive/Func_void_RiveError.kt | 2 - .../nitro/rive/Func_void_UnifiedRiveEvent.kt | 2 - .../com/margelo/nitro/rive/Func_void_bool.kt | 2 - .../margelo/nitro/rive/Func_void_double.kt | 2 - .../nitro/rive/Func_void_std__string.kt | 2 - ...oid_std__string_std__string_std__string.kt | 2 - .../nitro/rive/HybridBindableArtboardSpec.kt | 2 + .../nitro/rive/HybridFallbackFontSpec.kt | 2 + .../nitro/rive/HybridRiveFileFactorySpec.kt | 2 + .../margelo/nitro/rive/HybridRiveFileSpec.kt | 2 + .../nitro/rive/HybridRiveFontConfigSpec.kt | 2 + .../nitro/rive/HybridRiveImageFactorySpec.kt | 2 + .../margelo/nitro/rive/HybridRiveImageSpec.kt | 2 + .../nitro/rive/HybridRiveLoggerSpec.kt | 2 + .../nitro/rive/HybridRiveRuntimeSpec.kt | 2 + .../margelo/nitro/rive/HybridRiveViewSpec.kt | 2 + .../HybridViewModelArtboardPropertySpec.kt | 2 + .../HybridViewModelBooleanPropertySpec.kt | 2 + .../rive/HybridViewModelColorPropertySpec.kt | 2 + .../rive/HybridViewModelEnumPropertySpec.kt | 2 + .../rive/HybridViewModelImagePropertySpec.kt | 2 + .../nitro/rive/HybridViewModelInstanceSpec.kt | 2 + .../rive/HybridViewModelListPropertySpec.kt | 2 + .../rive/HybridViewModelNumberPropertySpec.kt | 2 + .../nitro/rive/HybridViewModelPropertySpec.kt | 2 + .../margelo/nitro/rive/HybridViewModelSpec.kt | 2 + .../rive/HybridViewModelStringPropertySpec.kt | 2 + .../HybridViewModelTriggerPropertySpec.kt | 2 + .../nitro/rive/ReferencedAssetsType.kt | 13 ++ .../nitro/rive/ResolvedReferencedAsset.kt | 23 ++ .../margelo/nitro/rive/RiveEnumDefinition.kt | 15 ++ .../com/margelo/nitro/rive/RiveError.kt | 15 ++ .../margelo/nitro/rive/UnifiedRiveEvent.kt | 23 ++ .../rive/Variant_Double_FrameRateRange.kt | 23 +- ...nstanceSpec_DataBindMode_DataBindByName.kt | 26 ++- .../nitro/rive/ViewModelPropertyInfo.kt | 15 ++ .../nitro/rive/views/HybridRiveViewManager.kt | 38 +++- .../rive/views/HybridRiveViewStateUpdater.kt | 4 +- nitrogen/generated/android/riveOnLoad.cpp | 28 +-- nitrogen/generated/ios/RNRive+autolinking.rb | 2 + .../generated/ios/RNRive-Swift-Cxx-Bridge.hpp | 58 ++--- .../ios/c++/views/HybridRiveViewComponent.mm | 198 ++++++++++------ .../ios/swift/EventPropertiesOutput.swift | 19 +- .../ios/swift/HybridRiveViewSpec_cxx.swift | 4 + .../ios/swift/UnifiedRiveEvent.swift | 28 +-- .../swift/Variant_Double_FrameRateRange.swift | 12 + ...nceSpec__DataBindMode_DataBindByName.swift | 13 ++ .../generated/shared/c++/UnifiedRiveEvent.hpp | 10 +- .../c++/views/HybridRiveViewComponent.cpp | 214 ++++-------------- .../c++/views/HybridRiveViewComponent.hpp | 116 +++++----- package.json | 6 +- scripts/nitrogen-postprocess.ts | 62 +++-- yarn.lock | 73 +++--- 126 files changed, 1147 insertions(+), 715 deletions(-) create mode 100644 example/__tests__/optional-prop-clear.harness.tsx create mode 100644 expo57-example/plugins/with-textual-glog.js diff --git a/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt b/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt index a1f671c6..ba22794e 100644 --- a/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt +++ b/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt @@ -5,8 +5,8 @@ object EventPropertiesOutputExtensions { EventPropertiesOutput.First(value) fun string(value: String): EventPropertiesOutput = - EventPropertiesOutput.Second(value) + EventPropertiesOutput.Third(value) fun number(value: Double): EventPropertiesOutput = - EventPropertiesOutput.Third(value) + EventPropertiesOutput.Second(value) } diff --git a/example/__tests__/optional-prop-clear.harness.tsx b/example/__tests__/optional-prop-clear.harness.tsx new file mode 100644 index 00000000..4895082c --- /dev/null +++ b/example/__tests__/optional-prop-clear.harness.tsx @@ -0,0 +1,140 @@ +/** + * Fabric sends `null` (not `undefined`) when a prop is removed. Nitro's + * JSIConverter> only maps `undefined` to nullopt, so clearing + * an optional RiveView prop throws during commit — e.g. + * "RiveView.layoutScaleFactor: Value is null, expected a number" — + * https://github.com/mrousavy/nitro/issues/1184. + * + * The throw surfaces as a React error, not through onError, and an error + * boundary above the view would swallow it — hence the boundary here, which + * turns it into an assertable value. + */ +import { + describe, + it, + expect, + render, + waitFor, + cleanup, +} from 'react-native-harness'; +import { Component, type ReactNode } from 'react'; +import { View } from 'react-native'; +import { + RiveView, + RiveFileFactory, + DataBindMode, + Fit, + type RiveFile, + type RiveViewRef, +} from '@rive-app/react-native'; + +const QUICK_START = require('../assets/rive/quick_start.riv'); + +type Ctx = { + ref: RiveViewRef | null; + error: string | null; + thrown: string | null; +}; + +function createCtx(): Ctx { + return { ref: null, error: null, thrown: null }; +} + +class CatchCommitError extends Component< + { ctx: Ctx; children: ReactNode }, + { failed: boolean } +> { + state = { failed: false }; + + static getDerivedStateFromError() { + return { failed: true }; + } + + componentDidCatch(error: Error) { + this.props.ctx.thrown = error.message; + } + + render() { + return this.state.failed ? null : this.props.children; + } +} + +function Probe({ + file, + ctx, + dataBind, + layoutScaleFactor, +}: { + file: RiveFile; + ctx: Ctx; + dataBind?: DataBindMode; + layoutScaleFactor?: number; +}) { + return ( + + + (ctx.ref = r) }} + style={{ flex: 1 }} + file={file} + fit={Fit.Contain} + dataBind={dataBind} + layoutScaleFactor={layoutScaleFactor} + onError={(e) => (ctx.error = e.message)} + /> + + + ); +} + +async function renderAndWait(element: React.ReactElement, ctx: Ctx) { + const result = await render(element); + await waitFor(() => expect(ctx.ref).not.toBeNull(), { timeout: 5000 }); + await ctx.ref!.awaitViewReady(); + return result; +} + +describe('optional prop clear', () => { + it('clearing dataBind back to undefined restores the default mode', async () => { + const file = await RiveFileFactory.fromSource(QUICK_START, undefined); + const ctx = createCtx(); + + const { rerender } = await renderAndWait( + , + ctx + ); + expect(ctx.ref!.getViewModelInstance()).toBeUndefined(); + + // Removing the prop makes Fabric send null for it + await rerender(); + await new Promise((r) => setTimeout(r, 800)); + + expect(ctx.thrown).toBeNull(); + expect(ctx.error).toBeNull(); + // Back to the default Auto mode, which binds the default instance + expect(ctx.ref!.getViewModelInstance()).toBeDefined(); + + cleanup(); + }); + + it('clearing layoutScaleFactor back to undefined does not throw', async () => { + const file = await RiveFileFactory.fromSource(QUICK_START, undefined); + const ctx = createCtx(); + + const { rerender } = await renderAndWait( + , + ctx + ); + + // optional rejects the null sentinel outright + await rerender( + + ); + await new Promise((r) => setTimeout(r, 800)); + + expect(ctx.thrown).toBeNull(); + expect(ctx.error).toBeNull(); + + cleanup(); + }); +}); diff --git a/example/ios/Podfile b/example/ios/Podfile index fe285a35..97480889 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -58,5 +58,20 @@ target 'RiveExample' do # :ccache_enabled => true ) + # NitroModules 0.37.0 exposes `ReactProp.hpp` in its modulemap, which reaches + # `` through React's `RawValue.h`. glog 0.3.5 includes headers from + # inside `namespace google`, which is illegal once glog is imported as a module, so + # every target that builds the NitroModules module fails to compile. Same class of + # breakage as mrousavy/nitro#1520, which fixed only the `cxxreact` half of it in 0.37.0. + # Nothing in React Native `@import`s glog, so drop its modulemap and let every target + # include it textually. Remove once Nitro keeps React's renderer headers out of its + # public modulemap. + Dir.glob(File.join(__dir__, 'Pods', 'Target Support Files', '*', '*.xcconfig')).each do |xcconfig| + contents = File.read(xcconfig) + patched = contents.gsub( + /\s*(-Xcc\s+)?-fmodule-map-file="\$\{PODS_ROOT\}\/Headers\/Public\/glog\/glog\.modulemap"/, '' + ) + File.write(xcconfig, patched) if patched != contents + end end end diff --git a/example/package.json b/example/package.json index 0e3c0050..f3316de4 100644 --- a/example/package.json +++ b/example/package.json @@ -21,7 +21,7 @@ "react": "19.1.0", "react-native": "0.80.3", "react-native-gesture-handler": "2.29.1", - "react-native-nitro-modules": "0.35.10", + "react-native-nitro-modules": "0.37.0", "react-native-reanimated": "4.1.5", "react-native-safe-area-context": "^5.4.0", "react-native-screens": "~4.18.0", diff --git a/expo-example/package.json b/expo-example/package.json index be6b0353..5c0a5a1d 100644 --- a/expo-example/package.json +++ b/expo-example/package.json @@ -35,7 +35,7 @@ "react-dom": "19.1.0", "react-native": "0.81.5", "react-native-gesture-handler": "2.29.1", - "react-native-nitro-modules": "0.35.10", + "react-native-nitro-modules": "0.37.0", "react-native-reanimated": "4.1.5", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", diff --git a/expo55-example/package.json b/expo55-example/package.json index 9c2b79ba..3ffa85f1 100644 --- a/expo55-example/package.json +++ b/expo55-example/package.json @@ -35,7 +35,7 @@ "react-dom": "19.2.0", "react-native": "0.83.4", "react-native-gesture-handler": "~2.29.0", - "react-native-nitro-modules": "0.35.10", + "react-native-nitro-modules": "0.37.0", "react-native-reanimated": "4.2.1", "react-native-safe-area-context": "~5.6.2", "react-native-screens": "~4.23.0", diff --git a/expo57-example/app.config.js b/expo57-example/app.config.js index 8dc23d0a..0c00789e 100644 --- a/expo57-example/app.config.js +++ b/expo57-example/app.config.js @@ -57,6 +57,7 @@ module.exports = { fonts: ['./assets/kanit_regular.ttf'], }, ], + './plugins/with-textual-glog', ], experiments: { typedRoutes: true, diff --git a/expo57-example/package.json b/expo57-example/package.json index 04bb4631..6cdd6b28 100644 --- a/expo57-example/package.json +++ b/expo57-example/package.json @@ -34,7 +34,7 @@ "react-dom": "19.2.3", "react-native": "0.86.0", "react-native-gesture-handler": "~2.32.0", - "react-native-nitro-modules": "0.35.10", + "react-native-nitro-modules": "0.37.0", "react-native-reanimated": "4.5.0", "react-native-safe-area-context": "~5.7.0", "react-native-screens": "4.25.2", diff --git a/expo57-example/plugins/with-textual-glog.js b/expo57-example/plugins/with-textual-glog.js new file mode 100644 index 00000000..17178260 --- /dev/null +++ b/expo57-example/plugins/with-textual-glog.js @@ -0,0 +1,41 @@ +const { withDangerousMod } = require('expo/config-plugins'); +const fs = require('fs'); +const path = require('path'); + +// NitroModules 0.37.0 exposes React's renderer headers in its modulemap, and they +// reach `` through `RawValue.h`. glog 0.3.5 includes headers from +// inside `namespace google`, which is illegal once glog is imported as a module, so +// every target that builds the NitroModules module fails to compile. Same class of +// breakage as mrousavy/nitro#1520, which fixed only the `cxxreact` half of it in +// 0.37.0. Nothing in React Native `@import`s glog, so drop its modulemap and let +// every target include it textually. Remove once Nitro keeps React's renderer +// headers out of its public modulemap. +const HOOK = ` + Dir.glob(File.join(__dir__, 'Pods', 'Target Support Files', '*', '*.xcconfig')).each do |xcconfig| + contents = File.read(xcconfig) + patched = contents.gsub( + /\\s*(-Xcc\\s+)?-fmodule-map-file="\\$\\{PODS_ROOT\\}\\/Headers\\/Public\\/glog\\/glog\\.modulemap"/, '' + ) + File.write(xcconfig, patched) if patched != contents + end +`; + +module.exports = function withTextualGlog(config) { + return withDangerousMod(config, [ + 'ios', + (cfg) => { + const podfile = path.join(cfg.modRequest.platformProjectRoot, 'Podfile'); + const contents = fs.readFileSync(podfile, 'utf8'); + if (contents.includes('glog.modulemap')) return cfg; + + const anchor = 'post_install do |installer|'; + if (!contents.includes(anchor)) { + throw new Error( + 'with-textual-glog: no post_install hook in the Podfile' + ); + } + fs.writeFileSync(podfile, contents.replace(anchor, anchor + '\n' + HOOK)); + return cfg; + }, + ]); +}; diff --git a/ios/EventPropertiesOutputExtensions.swift b/ios/EventPropertiesOutputExtensions.swift index d8250e09..a08df09c 100644 --- a/ios/EventPropertiesOutputExtensions.swift +++ b/ios/EventPropertiesOutputExtensions.swift @@ -6,10 +6,10 @@ extension EventPropertiesOutput { } static func string(_ value: String) -> EventPropertiesOutput { - return .second(value) + return .third(value) } static func number(_ value: Double) -> EventPropertiesOutput { - return .third(value) + return .second(value) } } diff --git a/nitrogen/generated/android/c++/JAlignment.hpp b/nitrogen/generated/android/c++/JAlignment.hpp index b2202d90..05706fd1 100644 --- a/nitrogen/generated/android/c++/JAlignment.hpp +++ b/nitrogen/generated/android/c++/JAlignment.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "Alignment" and the the Kotlin enum "Alignment". + * The C++ JNI bridge between the C++ enum "Alignment" and the Kotlin enum "Alignment". */ struct JAlignment final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Alignment;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Alignment;"; public: /** diff --git a/nitrogen/generated/android/c++/JAndroidRenderBackend.hpp b/nitrogen/generated/android/c++/JAndroidRenderBackend.hpp index 762c6190..c2412b60 100644 --- a/nitrogen/generated/android/c++/JAndroidRenderBackend.hpp +++ b/nitrogen/generated/android/c++/JAndroidRenderBackend.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "AndroidRenderBackend" and the the Kotlin enum "AndroidRenderBackend". + * The C++ JNI bridge between the C++ enum "AndroidRenderBackend" and the Kotlin enum "AndroidRenderBackend". */ struct JAndroidRenderBackend final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/AndroidRenderBackend;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/AndroidRenderBackend;"; public: /** diff --git a/nitrogen/generated/android/c++/JArtboardBy.hpp b/nitrogen/generated/android/c++/JArtboardBy.hpp index 3b8eab87..23e2a74e 100644 --- a/nitrogen/generated/android/c++/JArtboardBy.hpp +++ b/nitrogen/generated/android/c++/JArtboardBy.hpp @@ -20,11 +20,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "ArtboardBy" and the the Kotlin data class "ArtboardBy". + * The C++ JNI bridge between the C++ struct "ArtboardBy" and the Kotlin data class "ArtboardBy". */ struct JArtboardBy final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ArtboardBy;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ArtboardBy;"; public: /** diff --git a/nitrogen/generated/android/c++/JArtboardByTypes.hpp b/nitrogen/generated/android/c++/JArtboardByTypes.hpp index 1332b18d..ec913dfc 100644 --- a/nitrogen/generated/android/c++/JArtboardByTypes.hpp +++ b/nitrogen/generated/android/c++/JArtboardByTypes.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "ArtboardByTypes" and the the Kotlin enum "ArtboardByTypes". + * The C++ JNI bridge between the C++ enum "ArtboardByTypes" and the Kotlin enum "ArtboardByTypes". */ struct JArtboardByTypes final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ArtboardByTypes;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ArtboardByTypes;"; public: /** diff --git a/nitrogen/generated/android/c++/JDataBindByName.hpp b/nitrogen/generated/android/c++/JDataBindByName.hpp index 11c85e79..0c31262c 100644 --- a/nitrogen/generated/android/c++/JDataBindByName.hpp +++ b/nitrogen/generated/android/c++/JDataBindByName.hpp @@ -17,11 +17,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "DataBindByName" and the the Kotlin data class "DataBindByName". + * The C++ JNI bridge between the C++ struct "DataBindByName" and the Kotlin data class "DataBindByName". */ struct JDataBindByName final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/DataBindByName;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/DataBindByName;"; public: /** diff --git a/nitrogen/generated/android/c++/JDataBindMode.hpp b/nitrogen/generated/android/c++/JDataBindMode.hpp index 3c1480e7..347c9efa 100644 --- a/nitrogen/generated/android/c++/JDataBindMode.hpp +++ b/nitrogen/generated/android/c++/JDataBindMode.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "DataBindMode" and the the Kotlin enum "DataBindMode". + * The C++ JNI bridge between the C++ enum "DataBindMode" and the Kotlin enum "DataBindMode". */ struct JDataBindMode final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/DataBindMode;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/DataBindMode;"; public: /** diff --git a/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp b/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp index b628e155..b06c20b5 100644 --- a/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp +++ b/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp @@ -9,21 +9,21 @@ namespace margelo::nitro::rive { /** - * Converts JEventPropertiesOutput to std::variant + * Converts JEventPropertiesOutput to std::variant */ - std::variant JEventPropertiesOutput::toCpp() const { + std::variant JEventPropertiesOutput::toCpp() const { if (isInstanceOf(JEventPropertiesOutput_impl::First::javaClassStatic())) { // It's a `bool` auto jniValue = static_cast(this)->getValue(); return static_cast(jniValue); } else if (isInstanceOf(JEventPropertiesOutput_impl::Second::javaClassStatic())) { - // It's a `std::string` + // It's a `double` auto jniValue = static_cast(this)->getValue(); - return jniValue->toStdString(); + return jniValue; } else if (isInstanceOf(JEventPropertiesOutput_impl::Third::javaClassStatic())) { - // It's a `double` + // It's a `std::string` auto jniValue = static_cast(this)->getValue(); - return jniValue; + return jniValue->toStdString(); } throw std::invalid_argument("Variant is unknown Kotlin instance!"); } diff --git a/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp b/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp index 707ff32d..5f1a7916 100644 --- a/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp +++ b/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp @@ -22,37 +22,37 @@ namespace margelo::nitro::rive { */ class JEventPropertiesOutput: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput;"; static jni::local_ref create_0(jboolean value) { static const auto method = javaClassStatic()->getStaticMethod("create"); return method(javaClassStatic(), value); } - static jni::local_ref create_1(jni::alias_ref value) { - static const auto method = javaClassStatic()->getStaticMethod)>("create"); + static jni::local_ref create_1(double value) { + static const auto method = javaClassStatic()->getStaticMethod("create"); return method(javaClassStatic(), value); } - static jni::local_ref create_2(double value) { - static const auto method = javaClassStatic()->getStaticMethod("create"); + static jni::local_ref create_2(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); return method(javaClassStatic(), value); } - static jni::local_ref fromCpp(const std::variant& variant) { + static jni::local_ref fromCpp(const std::variant& variant) { switch (variant.index()) { case 0: return create_0(std::get<0>(variant)); - case 1: return create_1(jni::make_jstring(std::get<1>(variant))); - case 2: return create_2(std::get<2>(variant)); + case 1: return create_1(std::get<1>(variant)); + case 2: return create_2(jni::make_jstring(std::get<2>(variant))); default: throw std::invalid_argument("Variant holds unknown index! (" + std::to_string(variant.index()) + ")"); } } - [[nodiscard]] std::variant toCpp() const; + [[nodiscard]] std::variant toCpp() const; }; namespace JEventPropertiesOutput_impl { class First final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$First;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$First;"; [[nodiscard]] jboolean getValue() const { static const auto field = javaClassStatic()->getField("value"); @@ -62,20 +62,20 @@ namespace margelo::nitro::rive { class Second final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$Second;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$Second;"; - [[nodiscard]] jni::local_ref getValue() const { - static const auto field = javaClassStatic()->getField("value"); + [[nodiscard]] double getValue() const { + static const auto field = javaClassStatic()->getField("value"); return getFieldValue(field); } }; class Third final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$Third;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/EventPropertiesOutput$Third;"; - [[nodiscard]] double getValue() const { - static const auto field = javaClassStatic()->getField("value"); + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); return getFieldValue(field); } }; diff --git a/nitrogen/generated/android/c++/JFit.hpp b/nitrogen/generated/android/c++/JFit.hpp index 4e936801..46f7273a 100644 --- a/nitrogen/generated/android/c++/JFit.hpp +++ b/nitrogen/generated/android/c++/JFit.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "Fit" and the the Kotlin enum "Fit". + * The C++ JNI bridge between the C++ enum "Fit" and the Kotlin enum "Fit". */ struct JFit final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Fit;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Fit;"; public: /** diff --git a/nitrogen/generated/android/c++/JFrameRateRange.hpp b/nitrogen/generated/android/c++/JFrameRateRange.hpp index ca5ecaf4..9faee858 100644 --- a/nitrogen/generated/android/c++/JFrameRateRange.hpp +++ b/nitrogen/generated/android/c++/JFrameRateRange.hpp @@ -17,11 +17,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "FrameRateRange" and the the Kotlin data class "FrameRateRange". + * The C++ JNI bridge between the C++ struct "FrameRateRange" and the Kotlin data class "FrameRateRange". */ struct JFrameRateRange final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/FrameRateRange;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/FrameRateRange;"; public: /** diff --git a/nitrogen/generated/android/c++/JFunc_void.hpp b/nitrogen/generated/android/c++/JFunc_void.hpp index 083013ff..3ab0d266 100644 --- a/nitrogen/generated/android/c++/JFunc_void.hpp +++ b/nitrogen/generated/android/c++/JFunc_void.hpp @@ -23,7 +23,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void;"; public: /** @@ -59,7 +59,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp b/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp index 7a850bdf..c4b1c2f9 100644 --- a/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp @@ -28,7 +28,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_RiveError: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_RiveError;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_RiveError;"; public: /** @@ -64,7 +64,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_RiveError_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_RiveError_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_RiveError_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp b/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp index 5649b9c0..e02c99fc 100644 --- a/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp @@ -32,7 +32,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_UnifiedRiveEvent: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_UnifiedRiveEvent;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_UnifiedRiveEvent;"; public: /** @@ -68,7 +68,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_UnifiedRiveEvent_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_UnifiedRiveEvent_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_UnifiedRiveEvent_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_bool.hpp b/nitrogen/generated/android/c++/JFunc_void_bool.hpp index bf659485..0ee32eb5 100644 --- a/nitrogen/generated/android/c++/JFunc_void_bool.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_bool.hpp @@ -23,7 +23,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_bool: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_bool;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_bool;"; public: /** @@ -59,7 +59,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_bool_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_bool_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_bool_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_double.hpp b/nitrogen/generated/android/c++/JFunc_void_double.hpp index 28cacc93..4f5de2d2 100644 --- a/nitrogen/generated/android/c++/JFunc_void_double.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_double.hpp @@ -23,7 +23,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_double: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_double;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_double;"; public: /** @@ -59,7 +59,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_double_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_double_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_std__string.hpp b/nitrogen/generated/android/c++/JFunc_void_std__string.hpp index 7374b41a..e81695f7 100644 --- a/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_std__string.hpp @@ -24,7 +24,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_std__string: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string;"; public: /** @@ -60,7 +60,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_std__string.hpp b/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_std__string.hpp index deb2cab1..34fc7549 100644 --- a/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_std__string.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_std__string.hpp @@ -24,7 +24,7 @@ namespace margelo::nitro::rive { */ struct JFunc_void_std__string_std__string_std__string: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_std__string_std__string;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_std__string_std__string;"; public: /** @@ -60,7 +60,7 @@ namespace margelo::nitro::rive { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_std__string_std__string_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Func_void_std__string_std__string_std__string_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_std__string_std__string_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp index 4364ad82..7773edee 100644 --- a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridBindableArtboardSpec: public virtual HybridBindableArtboardSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec;"; std::shared_ptr getJHybridBindableArtboardSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridFallbackFontSpec.hpp b/nitrogen/generated/android/c++/JHybridFallbackFontSpec.hpp index ecf7219f..96c71c76 100644 --- a/nitrogen/generated/android/c++/JHybridFallbackFontSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridFallbackFontSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridFallbackFontSpec: public virtual HybridFallbackFontSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridFallbackFontSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridFallbackFontSpec;"; std::shared_ptr getJHybridFallbackFontSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridFallbackFontSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridFallbackFontSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp index 31784a9c..38f1a779 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveFileFactorySpec: public virtual HybridRiveFileFactorySpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec;"; std::shared_ptr getJHybridRiveFileFactorySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp index 70ec6ebb..6d73d9c4 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp @@ -95,16 +95,16 @@ namespace margelo::nitro::rive { std::vector JHybridRiveFileSpec::getArtboardNames() { static const auto method = _javaPart->javaClassStatic()->getMethod>()>("getArtboardNames"); auto __result = method(_javaPart); - return [&]() { - size_t __size = __result->size(); + return [&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toStdString()); } return __vector; - }(); + }(__result); } // Methods @@ -134,16 +134,16 @@ namespace margelo::nitro::rive { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { auto __result = jni::static_ref_cast>(__boxedResult); - __promise->resolve([&]() { - size_t __size = __result->size(); + __promise->resolve([&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toStdString()); } return __vector; - }()); + }(__result)); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -207,16 +207,16 @@ namespace margelo::nitro::rive { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { auto __result = jni::static_ref_cast>(__boxedResult); - __promise->resolve([&]() { - size_t __size = __result->size(); + __promise->resolve([&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toStdString()); } return __vector; - }()); + }(__result)); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -237,16 +237,16 @@ namespace margelo::nitro::rive { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { auto __result = jni::static_ref_cast>(__boxedResult); - __promise->resolve([&]() { - size_t __size = __result->size(); + __promise->resolve([&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toCpp()); } return __vector; - }()); + }(__result)); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); diff --git a/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp index 7d3106d1..a4a379c7 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveFileSpec: public virtual HybridRiveFileSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec;"; std::shared_ptr getJHybridRiveFileSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.cpp index 0f641031..e0da616a 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.cpp @@ -92,16 +92,16 @@ namespace margelo::nitro::rive { } void JHybridRiveFontConfigSpec::setFontsForWeight(double weight, const std::vector>& fonts) { static const auto method = _javaPart->javaClassStatic()->getMethod> /* fonts */)>("setFontsForWeight"); - method(_javaPart, weight, [&]() { - size_t __size = fonts.size(); + method(_javaPart, weight, [&](auto&& __input) { + size_t __size = __input.size(); jni::local_ref> __array = jni::JArrayClass::newArray(__size); for (size_t __i = 0; __i < __size; __i++) { - const auto& __element = fonts[__i]; + const auto& __element = __input[__i]; auto __elementJni = std::dynamic_pointer_cast(__element)->getJavaPart(); __array->setElement(__i, *__elementJni); } return __array; - }()); + }(fonts)); } std::shared_ptr> JHybridRiveFontConfigSpec::applyFallbackFonts() { static const auto method = _javaPart->javaClassStatic()->getMethod()>("applyFallbackFonts"); diff --git a/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.hpp index d314d5c1..275490d0 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveFontConfigSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveFontConfigSpec: public virtual HybridRiveFontConfigSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfigSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfigSpec;"; std::shared_ptr getJHybridRiveFontConfigSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfigSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfigSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp index 80d33403..da88c3dd 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveImageFactorySpec: public virtual HybridRiveImageFactorySpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec;"; std::shared_ptr getJHybridRiveImageFactorySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp index 4b544088..93c1899a 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveImageSpec: public virtual HybridRiveImageSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec;"; std::shared_ptr getJHybridRiveImageSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveLoggerSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveLoggerSpec.hpp index 98890e0e..9ffe008a 100644 --- a/nitrogen/generated/android/c++/JHybridRiveLoggerSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveLoggerSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveLoggerSpec: public virtual HybridRiveLoggerSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLoggerSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLoggerSpec;"; std::shared_ptr getJHybridRiveLoggerSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLoggerSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLoggerSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp index 5e5694cf..e4e96379 100644 --- a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveRuntimeSpec: public virtual HybridRiveRuntimeSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec;"; std::shared_ptr getJHybridRiveRuntimeSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp index 91ea8d5c..9bbc3c34 100644 --- a/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridRiveViewSpec: public virtual HybridRiveViewSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec;"; std::shared_ptr getJHybridRiveViewSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp index 7ce38ff4..127c79a9 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelArtboardPropertySpec: public virtual HybridViewModelArtboardPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelArtboardPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelArtboardPropertySpec;"; std::shared_ptr getJHybridViewModelArtboardPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelArtboardPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelArtboardPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp index 2feeacf0..3d8efc88 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelBooleanPropertySpec: public virtual HybridViewModelBooleanPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelBooleanPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelBooleanPropertySpec;"; std::shared_ptr getJHybridViewModelBooleanPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelBooleanPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelBooleanPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp index 1af876b9..f0393320 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelColorPropertySpec: public virtual HybridViewModelColorPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelColorPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelColorPropertySpec;"; std::shared_ptr getJHybridViewModelColorPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelColorPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelColorPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp index 5522625f..4f0e2da6 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelEnumPropertySpec: public virtual HybridViewModelEnumPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelEnumPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelEnumPropertySpec;"; std::shared_ptr getJHybridViewModelEnumPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelEnumPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelEnumPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp index e5f8df1e..3056fa73 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelImagePropertySpec: public virtual HybridViewModelImagePropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelImagePropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelImagePropertySpec;"; std::shared_ptr getJHybridViewModelImagePropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelImagePropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelImagePropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp index 29dbc83c..98b960b6 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp @@ -107,16 +107,16 @@ namespace margelo::nitro::rive { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { auto __result = jni::static_ref_cast>(__boxedResult); - __promise->resolve([&]() { - size_t __size = __result->size(); + __promise->resolve([&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toCpp()); } return __vector; - }()); + }(__result)); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); diff --git a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp index 1fc897f3..78ce3e76 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridViewModelInstanceSpec: public virtual HybridViewModelInstanceSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec;"; std::shared_ptr getJHybridViewModelInstanceSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp index be099179..3b8caac0 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelListPropertySpec: public virtual HybridViewModelListPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelListPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelListPropertySpec;"; std::shared_ptr getJHybridViewModelListPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelListPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelListPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp index 96b0117e..0ebed682 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelNumberPropertySpec: public virtual HybridViewModelNumberPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelNumberPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelNumberPropertySpec;"; std::shared_ptr getJHybridViewModelNumberPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelNumberPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelNumberPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp index f7d7ffd0..65a5a167 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridViewModelPropertySpec: public virtual HybridViewModelPropertySpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec;"; std::shared_ptr getJHybridViewModelPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp index 0946422b..ce723156 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp @@ -81,16 +81,16 @@ namespace margelo::nitro::rive { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { auto __result = jni::static_ref_cast>(__boxedResult); - __promise->resolve([&]() { - size_t __size = __result->size(); + __promise->resolve([&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = __result->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toCpp()); } return __vector; - }()); + }(__result)); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); diff --git a/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp index 340ebcc2..1bb04b72 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp @@ -21,11 +21,11 @@ namespace margelo::nitro::rive { class JHybridViewModelSpec: public virtual HybridViewModelSpec, public virtual JHybridObject { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec;"; std::shared_ptr getJHybridViewModelSpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp index a6c5546d..13dd6c24 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelStringPropertySpec: public virtual HybridViewModelStringPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelStringPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelStringPropertySpec;"; std::shared_ptr getJHybridViewModelStringPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelStringPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelStringPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp index f5ca2492..3a8fc95c 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp @@ -22,11 +22,11 @@ namespace margelo::nitro::rive { class JHybridViewModelTriggerPropertySpec: public virtual HybridViewModelTriggerPropertySpec, public virtual JHybridViewModelPropertySpec { public: struct JavaPart: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelTriggerPropertySpec;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelTriggerPropertySpec;"; std::shared_ptr getJHybridViewModelTriggerPropertySpec(); }; struct CxxPart: public jni::HybridClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelTriggerPropertySpec$CxxPart;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelTriggerPropertySpec$CxxPart;"; static jni::local_ref initHybrid(jni::alias_ref jThis); static void registerNatives(); using HybridBase::HybridBase; diff --git a/nitrogen/generated/android/c++/JReferencedAssetsType.hpp b/nitrogen/generated/android/c++/JReferencedAssetsType.hpp index ec149ec7..b29d8f5c 100644 --- a/nitrogen/generated/android/c++/JReferencedAssetsType.hpp +++ b/nitrogen/generated/android/c++/JReferencedAssetsType.hpp @@ -26,11 +26,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "ReferencedAssetsType" and the the Kotlin data class "ReferencedAssetsType". + * The C++ JNI bridge between the C++ struct "ReferencedAssetsType" and the Kotlin data class "ReferencedAssetsType". */ struct JReferencedAssetsType final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ReferencedAssetsType;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ReferencedAssetsType;"; public: /** diff --git a/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp b/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp index c9050602..591a356f 100644 --- a/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp +++ b/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp @@ -23,11 +23,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "ResolvedReferencedAsset" and the the Kotlin data class "ResolvedReferencedAsset". + * The C++ JNI bridge between the C++ struct "ResolvedReferencedAsset" and the Kotlin data class "ResolvedReferencedAsset". */ struct JResolvedReferencedAsset final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ResolvedReferencedAsset;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ResolvedReferencedAsset;"; public: /** diff --git a/nitrogen/generated/android/c++/JRiveAssetType.hpp b/nitrogen/generated/android/c++/JRiveAssetType.hpp index eaa18e84..9cca618c 100644 --- a/nitrogen/generated/android/c++/JRiveAssetType.hpp +++ b/nitrogen/generated/android/c++/JRiveAssetType.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "RiveAssetType" and the the Kotlin enum "RiveAssetType". + * The C++ JNI bridge between the C++ enum "RiveAssetType" and the Kotlin enum "RiveAssetType". */ struct JRiveAssetType final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveAssetType;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveAssetType;"; public: /** diff --git a/nitrogen/generated/android/c++/JRiveEnumDefinition.hpp b/nitrogen/generated/android/c++/JRiveEnumDefinition.hpp index 1c772dc6..da89fd49 100644 --- a/nitrogen/generated/android/c++/JRiveEnumDefinition.hpp +++ b/nitrogen/generated/android/c++/JRiveEnumDefinition.hpp @@ -18,11 +18,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "RiveEnumDefinition" and the the Kotlin data class "RiveEnumDefinition". + * The C++ JNI bridge between the C++ struct "RiveEnumDefinition" and the Kotlin data class "RiveEnumDefinition". */ struct JRiveEnumDefinition final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveEnumDefinition;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveEnumDefinition;"; public: /** @@ -38,16 +38,16 @@ namespace margelo::nitro::rive { jni::local_ref> values = this->getFieldValue(fieldValues); return RiveEnumDefinition( name->toStdString(), - [&]() { - size_t __size = values->size(); + [&](auto&& __input) { + size_t __size = __input->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = values->getElement(__i); + auto __element = __input->getElement(__i); __vector.push_back(__element->toStdString()); } return __vector; - }() + }(values) ); } @@ -63,16 +63,16 @@ namespace margelo::nitro::rive { return create( clazz, jni::make_jstring(value.name), - [&]() { - size_t __size = value.values.size(); + [&](auto&& __input) { + size_t __size = __input.size(); jni::local_ref> __array = jni::JArrayClass::newArray(__size); for (size_t __i = 0; __i < __size; __i++) { - const auto& __element = value.values[__i]; + const auto& __element = __input[__i]; auto __elementJni = jni::make_jstring(__element); __array->setElement(__i, *__elementJni); } return __array; - }() + }(value.values) ); } }; diff --git a/nitrogen/generated/android/c++/JRiveError.hpp b/nitrogen/generated/android/c++/JRiveError.hpp index 6d52d3e8..9e1642e1 100644 --- a/nitrogen/generated/android/c++/JRiveError.hpp +++ b/nitrogen/generated/android/c++/JRiveError.hpp @@ -19,11 +19,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "RiveError" and the the Kotlin data class "RiveError". + * The C++ JNI bridge between the C++ struct "RiveError" and the Kotlin data class "RiveError". */ struct JRiveError final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveError;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveError;"; public: /** diff --git a/nitrogen/generated/android/c++/JRiveErrorType.hpp b/nitrogen/generated/android/c++/JRiveErrorType.hpp index a41e8e7b..28e39a3f 100644 --- a/nitrogen/generated/android/c++/JRiveErrorType.hpp +++ b/nitrogen/generated/android/c++/JRiveErrorType.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "RiveErrorType" and the the Kotlin enum "RiveErrorType". + * The C++ JNI bridge between the C++ enum "RiveErrorType" and the Kotlin enum "RiveErrorType". */ struct JRiveErrorType final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveErrorType;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveErrorType;"; public: /** diff --git a/nitrogen/generated/android/c++/JRiveEventType.hpp b/nitrogen/generated/android/c++/JRiveEventType.hpp index 98a4ff4d..59ab4648 100644 --- a/nitrogen/generated/android/c++/JRiveEventType.hpp +++ b/nitrogen/generated/android/c++/JRiveEventType.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "RiveEventType" and the the Kotlin enum "RiveEventType". + * The C++ JNI bridge between the C++ enum "RiveEventType" and the Kotlin enum "RiveEventType". */ struct JRiveEventType final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveEventType;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/RiveEventType;"; public: /** diff --git a/nitrogen/generated/android/c++/JSemantics.hpp b/nitrogen/generated/android/c++/JSemantics.hpp index 6ea66093..f0ae1366 100644 --- a/nitrogen/generated/android/c++/JSemantics.hpp +++ b/nitrogen/generated/android/c++/JSemantics.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "Semantics" and the the Kotlin enum "Semantics". + * The C++ JNI bridge between the C++ enum "Semantics" and the Kotlin enum "Semantics". */ struct JSemantics final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Semantics;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Semantics;"; public: /** diff --git a/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp b/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp index 7e77fedf..79226bd1 100644 --- a/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp +++ b/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp @@ -23,11 +23,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "UnifiedRiveEvent" and the the Kotlin data class "UnifiedRiveEvent". + * The C++ JNI bridge between the C++ struct "UnifiedRiveEvent" and the Kotlin data class "UnifiedRiveEvent". */ struct JUnifiedRiveEvent final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/UnifiedRiveEvent;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/UnifiedRiveEvent;"; public: /** @@ -54,7 +54,7 @@ namespace margelo::nitro::rive { type->toCpp(), delay != nullptr ? std::make_optional(delay->value()) : std::nullopt, properties != nullptr ? std::make_optional([&]() { - std::unordered_map> __map; + std::unordered_map> __map; __map.reserve(properties->size()); for (const auto& __entry : *properties) { __map.emplace(__entry.first->toStdString(), __entry.second->toCpp()); diff --git a/nitrogen/generated/android/c++/JVariant_Double_FrameRateRange.hpp b/nitrogen/generated/android/c++/JVariant_Double_FrameRateRange.hpp index df82fbd9..66c293f4 100644 --- a/nitrogen/generated/android/c++/JVariant_Double_FrameRateRange.hpp +++ b/nitrogen/generated/android/c++/JVariant_Double_FrameRateRange.hpp @@ -24,7 +24,7 @@ namespace margelo::nitro::rive { */ class JVariant_Double_FrameRateRange: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange;"; static jni::local_ref create_0(double value) { static const auto method = javaClassStatic()->getStaticMethod("create"); @@ -49,7 +49,7 @@ namespace margelo::nitro::rive { namespace JVariant_Double_FrameRateRange_impl { class First final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange$First;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange$First;"; [[nodiscard]] double getValue() const { static const auto field = javaClassStatic()->getField("value"); @@ -59,7 +59,7 @@ namespace margelo::nitro::rive { class Second final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange$Second;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_Double_FrameRateRange$Second;"; [[nodiscard]] jni::local_ref getValue() const { static const auto field = javaClassStatic()->getField("value"); diff --git a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp index d2370928..ff8eb98d 100644 --- a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp +++ b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp @@ -29,7 +29,7 @@ namespace margelo::nitro::rive { */ class JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName;"; static jni::local_ref create_0(jni::alias_ref value) { static const auto method = javaClassStatic()->getStaticMethod)>("create"); @@ -59,7 +59,7 @@ namespace margelo::nitro::rive { namespace JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl { class First final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$First;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$First;"; [[nodiscard]] jni::local_ref getValue() const { static const auto field = javaClassStatic()->getField("value"); @@ -69,7 +69,7 @@ namespace margelo::nitro::rive { class Second final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$Second;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$Second;"; [[nodiscard]] jni::local_ref getValue() const { static const auto field = javaClassStatic()->getField("value"); @@ -79,7 +79,7 @@ namespace margelo::nitro::rive { class Third final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$Third;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$Third;"; [[nodiscard]] jni::local_ref getValue() const { static const auto field = javaClassStatic()->getField("value"); diff --git a/nitrogen/generated/android/c++/JViewModelPropertyInfo.hpp b/nitrogen/generated/android/c++/JViewModelPropertyInfo.hpp index f791ae80..dffaa4ed 100644 --- a/nitrogen/generated/android/c++/JViewModelPropertyInfo.hpp +++ b/nitrogen/generated/android/c++/JViewModelPropertyInfo.hpp @@ -19,11 +19,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ struct "ViewModelPropertyInfo" and the the Kotlin data class "ViewModelPropertyInfo". + * The C++ JNI bridge between the C++ struct "ViewModelPropertyInfo" and the Kotlin data class "ViewModelPropertyInfo". */ struct JViewModelPropertyInfo final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ViewModelPropertyInfo;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ViewModelPropertyInfo;"; public: /** diff --git a/nitrogen/generated/android/c++/JViewModelPropertyType.hpp b/nitrogen/generated/android/c++/JViewModelPropertyType.hpp index 9ef32283..2530ada3 100644 --- a/nitrogen/generated/android/c++/JViewModelPropertyType.hpp +++ b/nitrogen/generated/android/c++/JViewModelPropertyType.hpp @@ -15,11 +15,11 @@ namespace margelo::nitro::rive { using namespace facebook; /** - * The C++ JNI bridge between the C++ enum "ViewModelPropertyType" and the the Kotlin enum "ViewModelPropertyType". + * The C++ JNI bridge between the C++ enum "ViewModelPropertyType" and the Kotlin enum "ViewModelPropertyType". */ struct JViewModelPropertyType final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/ViewModelPropertyType;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/ViewModelPropertyType;"; public: /** diff --git a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp index ecfe8860..5d6af4f8 100644 --- a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp +++ b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp @@ -15,85 +15,114 @@ namespace margelo::nitro::rive::views { using namespace facebook; using ConcreteStateData = react::ConcreteState; -void JHybridRiveViewStateUpdater::updateViewProps(jni::alias_ref /* class */, - jni::alias_ref javaView, - jni::alias_ref stateWrapperInterface) { - std::shared_ptr hybridView = javaView->getJHybridRiveViewSpec(); - +std::shared_ptr JHybridRiveViewStateUpdater::getPropsFromStateWrapper( + jni::alias_ref stateWrapper) { + if (stateWrapper.get() == nullptr) { + return nullptr; + } // Get concrete StateWrapperImpl from passed StateWrapper interface object - jobject rawStateWrapper = stateWrapperInterface.get(); - if (!stateWrapperInterface->isInstanceOf(react::StateWrapperImpl::javaClassStatic())) [[unlikely]] { - throw std::runtime_error("StateWrapper is not a StateWrapperImpl"); + jobject rawStateWrapper = stateWrapper.get(); + if (!stateWrapper->isInstanceOf(react::StateWrapperImpl::javaClassStatic())) [[unlikely]] { + throw std::runtime_error("StateWrapper is not a StateWrapperImpl"); + } + auto stateWrapperImpl = jni::alias_ref{ + static_cast(rawStateWrapper) + }; + std::shared_ptr state = stateWrapperImpl->cthis()->getState(); + if (state == nullptr) { + return nullptr; } - auto stateWrapper = jni::alias_ref{ - static_cast(rawStateWrapper)}; - std::shared_ptr state = stateWrapper->cthis()->getState(); auto concreteState = std::static_pointer_cast(state); const HybridRiveViewState& data = concreteState->getData(); - const std::shared_ptr& props = data.getProps(); + const std::shared_ptr& props = data.getProps(); if (props == nullptr) [[unlikely]] { - // Props aren't set yet! throw std::runtime_error("HybridRiveViewState's data doesn't contain any props!"); } + return props; +} + +void JHybridRiveViewStateUpdater::updateViewProps(jni::alias_ref /* class */, + jni::alias_ref javaView, + jni::alias_ref newState, + jni::alias_ref oldState) { + std::shared_ptr hybridView = javaView->getJHybridRiveViewSpec(); + std::shared_ptr newProps = getPropsFromStateWrapper(newState); + std::shared_ptr oldProps = getPropsFromStateWrapper(oldState); + if (newProps == nullptr) [[unlikely]] { + throw std::runtime_error("Current StateWrapper doesn't contain any props!"); + } - // Update all props if they are dirty - if (props->artboardName.isDirty) { - hybridView->setArtboardName(props->artboardName.value); - props->artboardName.isDirty = false; + // Update only props that differ from the previous State snapshot. + if (oldProps == nullptr + ? newProps->artboardName.isProvided() + : !newProps->artboardName.hasSameValue(oldProps->artboardName)) { + hybridView->setArtboardName(newProps->artboardName.get()); } - if (props->stateMachineName.isDirty) { - hybridView->setStateMachineName(props->stateMachineName.value); - props->stateMachineName.isDirty = false; + if (oldProps == nullptr + ? newProps->stateMachineName.isProvided() + : !newProps->stateMachineName.hasSameValue(oldProps->stateMachineName)) { + hybridView->setStateMachineName(newProps->stateMachineName.get()); } - if (props->autoPlay.isDirty) { - hybridView->setAutoPlay(props->autoPlay.value); - props->autoPlay.isDirty = false; + if (oldProps == nullptr + ? newProps->autoPlay.isProvided() + : !newProps->autoPlay.hasSameValue(oldProps->autoPlay)) { + hybridView->setAutoPlay(newProps->autoPlay.get()); } - if (props->file.isDirty) { - hybridView->setFile(props->file.value); - props->file.isDirty = false; + if (oldProps == nullptr + ? newProps->file.isProvided() + : !newProps->file.hasSameValue(oldProps->file)) { + hybridView->setFile(newProps->file.get()); } - if (props->alignment.isDirty) { - hybridView->setAlignment(props->alignment.value); - props->alignment.isDirty = false; + if (oldProps == nullptr + ? newProps->alignment.isProvided() + : !newProps->alignment.hasSameValue(oldProps->alignment)) { + hybridView->setAlignment(newProps->alignment.get()); } - if (props->fit.isDirty) { - hybridView->setFit(props->fit.value); - props->fit.isDirty = false; + if (oldProps == nullptr + ? newProps->fit.isProvided() + : !newProps->fit.hasSameValue(oldProps->fit)) { + hybridView->setFit(newProps->fit.get()); } - if (props->layoutScaleFactor.isDirty) { - hybridView->setLayoutScaleFactor(props->layoutScaleFactor.value); - props->layoutScaleFactor.isDirty = false; + if (oldProps == nullptr + ? newProps->layoutScaleFactor.isProvided() + : !newProps->layoutScaleFactor.hasSameValue(oldProps->layoutScaleFactor)) { + hybridView->setLayoutScaleFactor(newProps->layoutScaleFactor.get()); } - if (props->frameRate.isDirty) { - hybridView->setFrameRate(props->frameRate.value); - props->frameRate.isDirty = false; + if (oldProps == nullptr + ? newProps->frameRate.isProvided() + : !newProps->frameRate.hasSameValue(oldProps->frameRate)) { + hybridView->setFrameRate(newProps->frameRate.get()); } - if (props->semantics.isDirty) { - hybridView->setSemantics(props->semantics.value); - props->semantics.isDirty = false; + if (oldProps == nullptr + ? newProps->semantics.isProvided() + : !newProps->semantics.hasSameValue(oldProps->semantics)) { + hybridView->setSemantics(newProps->semantics.get()); } - if (props->dataBind.isDirty) { - hybridView->setDataBind(props->dataBind.value); - props->dataBind.isDirty = false; + if (oldProps == nullptr + ? newProps->dataBind.isProvided() + : !newProps->dataBind.hasSameValue(oldProps->dataBind)) { + hybridView->setDataBind(newProps->dataBind.get()); } - if (props->onError.isDirty) { - hybridView->setOnError(props->onError.value); - props->onError.isDirty = false; + if (oldProps == nullptr + ? newProps->onError.isProvided() + : !newProps->onError.hasSameValue(oldProps->onError)) { + hybridView->setOnError(newProps->onError.get()); } - if (props->onStop.isDirty) { - hybridView->setOnStop(props->onStop.value); - props->onStop.isDirty = false; + if (oldProps == nullptr + ? newProps->onStop.isProvided() + : !newProps->onStop.hasSameValue(oldProps->onStop)) { + hybridView->setOnStop(newProps->onStop.get()); } // Update hybridRef if it changed - if (props->hybridRef.isDirty) { + if (oldProps == nullptr + ? newProps->hybridRef.isProvided() + : !newProps->hybridRef.hasSameValue(oldProps->hybridRef)) { // hybridRef changed - call it with new this - const auto& maybeFunc = props->hybridRef.value; + const auto& maybeFunc = newProps->hybridRef.get(); if (maybeFunc.has_value()) { maybeFunc.value()(hybridView); } - props->hybridRef.isDirty = false; } } diff --git a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp index 03b58dac..7c978528 100644 --- a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp +++ b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp @@ -31,7 +31,12 @@ class JHybridRiveViewStateUpdater final: public jni::JavaClass /* class */, jni::alias_ref view, - jni::alias_ref stateWrapperInterface); + jni::alias_ref newState, + jni::alias_ref oldState); + +private: + static std::shared_ptr getPropsFromStateWrapper( + jni::alias_ref stateWrapper); public: static void registerNatives() { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt index 94f2b65f..a8e32fea 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -29,6 +30,22 @@ data class ArtboardBy( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ArtboardBy) return false + return Objects.deepEquals(this.type, other.type) + && Objects.deepEquals(this.index, other.index) + && Objects.deepEquals(this.name, other.name) + } + + override fun hashCode(): Int { + return arrayOf( + type, + index, + name + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt index 0c86521b..32450fd2 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -23,6 +24,18 @@ data class DataBindByName( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is DataBindByName) return false + return Objects.deepEquals(this.byName, other.byName) + } + + override fun hashCode(): Int { + return arrayOf( + byName + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt index 11b8e926..9928b33d 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt @@ -11,7 +11,7 @@ import com.facebook.proguard.annotations.DoNotStrip /** - * Represents the TypeScript variant "Boolean | String | Double". + * Represents the TypeScript variant "Boolean | Double | String". */ @Suppress("ClassName") @DoNotStrip @@ -19,9 +19,27 @@ sealed class EventPropertiesOutput { @DoNotStrip data class First(@DoNotStrip val value: Boolean): EventPropertiesOutput() @DoNotStrip - data class Second(@DoNotStrip val value: String): EventPropertiesOutput() + data class Second(@DoNotStrip val value: Double): EventPropertiesOutput() @DoNotStrip - data class Third(@DoNotStrip val value: Double): EventPropertiesOutput() + data class Third(@DoNotStrip val value: String): EventPropertiesOutput() + + inline fun asType(): T? { + return when (this) { + is First -> (value) as? T + is Second -> (value) as? T + is Third -> (value) as? T + } + } + inline fun isType(): Boolean { + return asType() != null + } + inline fun match(first: (Boolean) -> R, second: (Double) -> R, third: (String) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + is Third -> third(value) + } + } val isFirst: Boolean get() = this is First @@ -34,32 +52,24 @@ sealed class EventPropertiesOutput { val value = (this as? First)?.value ?: return null return value } - fun asSecondOrNull(): String? { + fun asSecondOrNull(): Double? { val value = (this as? Second)?.value ?: return null return value } - fun asThirdOrNull(): Double? { + fun asThirdOrNull(): String? { val value = (this as? Third)?.value ?: return null return value } - inline fun match(first: (Boolean) -> R, second: (String) -> R, third: (Double) -> R): R { - return when (this) { - is First -> first(value) - is Second -> second(value) - is Third -> third(value) - } - } - companion object { @JvmStatic @DoNotStrip fun create(value: Boolean): EventPropertiesOutput = First(value) @JvmStatic @DoNotStrip - fun create(value: String): EventPropertiesOutput = Second(value) + fun create(value: Double): EventPropertiesOutput = Second(value) @JvmStatic @DoNotStrip - fun create(value: Double): EventPropertiesOutput = Third(value) + fun create(value: String): EventPropertiesOutput = Third(value) } } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/FrameRateRange.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/FrameRateRange.kt index 2c821807..3add72fb 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/FrameRateRange.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/FrameRateRange.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -29,6 +30,22 @@ data class FrameRateRange( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is FrameRateRange) return false + return Objects.deepEquals(this.minimum, other.minimum) + && Objects.deepEquals(this.maximum, other.maximum) + && Objects.deepEquals(this.preferred, other.preferred) + } + + override fun hashCode(): Int { + return arrayOf( + minimum, + maximum, + preferred + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt index d59786dc..7a57fe63 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_cxx: Func_void { override fun invoke(): Unit = invoke_cxx() - @FastNative private external fun invoke_cxx(): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt index 4e24e28a..7f79e402 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_RiveError_cxx: Func_void_RiveError { override fun invoke(error: RiveError): Unit = invoke_cxx(error) - @FastNative private external fun invoke_cxx(error: RiveError): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt index a401713d..4e7077c6 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_UnifiedRiveEvent_cxx: Func_void_UnifiedRiveEvent { override fun invoke(event: UnifiedRiveEvent): Unit = invoke_cxx(event) - @FastNative private external fun invoke_cxx(event: UnifiedRiveEvent): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt index 27925484..03f2d7f6 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_bool_cxx: Func_void_bool { override fun invoke(value: Boolean): Unit = invoke_cxx(value) - @FastNative private external fun invoke_cxx(value: Boolean): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt index 5f885183..7e1e5824 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_double_cxx: Func_void_double { override fun invoke(value: Double): Unit = invoke_cxx(value) - @FastNative private external fun invoke_cxx(value: Double): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt index 65e2b6ef..1e5b5a16 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_std__string_cxx: Func_void_std__string { override fun invoke(value: String): Unit = invoke_cxx(value) - @FastNative private external fun invoke_cxx(value: String): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string_std__string_std__string.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string_std__string_std__string.kt index 20a3dd14..47cd3add 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string_std__string_std__string.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string_std__string_std__string.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import dalvik.annotation.optimization.FastNative /** @@ -59,7 +58,6 @@ class Func_void_std__string_std__string_std__string_cxx: Func_void_std__string_s override fun invoke(level: String, tag: String, message: String): Unit = invoke_cxx(level,tag,message) - @FastNative private external fun invoke_cxx(level: String, tag: String, message: String): Unit } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt index e0fea0c5..58ca9303 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -42,6 +43,7 @@ abstract class HybridBindableArtboardSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridBindableArtboardSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridBindableArtboardSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridFallbackFontSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridFallbackFontSpec.kt index d4326609..21f46f21 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridFallbackFontSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridFallbackFontSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -40,6 +41,7 @@ abstract class HybridFallbackFontSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridFallbackFontSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridFallbackFontSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt index 21fe7625..1278baf1 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.ArrayBuffer import com.margelo.nitro.core.HybridObject @@ -58,6 +59,7 @@ abstract class HybridRiveFileFactorySpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveFileFactorySpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveFileFactorySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt index ebdd4e7d..5dc583a2 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -93,6 +94,7 @@ abstract class HybridRiveFileSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveFileSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveFileSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFontConfigSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFontConfigSpec.kt index 63e660a2..8b48bfb4 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFontConfigSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFontConfigSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.ArrayBuffer import com.margelo.nitro.core.HybridObject @@ -72,6 +73,7 @@ abstract class HybridRiveFontConfigSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveFontConfigSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveFontConfigSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt index d1cc5005..085683d9 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.ArrayBuffer import com.margelo.nitro.core.HybridObject @@ -52,6 +53,7 @@ abstract class HybridRiveImageFactorySpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveImageFactorySpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveImageFactorySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt index 3c5152a6..fc395e53 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -42,6 +43,7 @@ abstract class HybridRiveImageSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveImageSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveImageSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveLoggerSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveLoggerSpec.kt index ec4aee5b..28badf99 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveLoggerSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveLoggerSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -55,6 +56,7 @@ abstract class HybridRiveLoggerSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveLoggerSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveLoggerSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt index b3c4ab56..84e0a254 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -53,6 +54,7 @@ abstract class HybridRiveRuntimeSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridRiveRuntimeSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveRuntimeSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt index a3e782de..020fb97b 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject import com.margelo.nitro.views.HybridView @@ -195,6 +196,7 @@ abstract class HybridRiveViewSpec: HybridView() { @Keep protected open class CxxPart(javaPart: HybridRiveViewSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridRiveViewSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt index f5e94172..57be7f93 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -42,6 +43,7 @@ abstract class HybridViewModelArtboardPropertySpec: HybridViewModelPropertySpec( @Keep protected open class CxxPart(javaPart: HybridViewModelArtboardPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelArtboardPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt index 67f06504..b8f94833 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -68,6 +69,7 @@ abstract class HybridViewModelBooleanPropertySpec: HybridViewModelPropertySpec() @Keep protected open class CxxPart(javaPart: HybridViewModelBooleanPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelBooleanPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt index 52bc7aa5..dc4f5cbf 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -68,6 +69,7 @@ abstract class HybridViewModelColorPropertySpec: HybridViewModelPropertySpec() { @Keep protected open class CxxPart(javaPart: HybridViewModelColorPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelColorPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt index baf26935..1289efaa 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -68,6 +69,7 @@ abstract class HybridViewModelEnumPropertySpec: HybridViewModelPropertySpec() { @Keep protected open class CxxPart(javaPart: HybridViewModelEnumPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelEnumPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt index de423447..7bf67057 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -55,6 +56,7 @@ abstract class HybridViewModelImagePropertySpec: HybridViewModelPropertySpec() { @Keep protected open class CxxPart(javaPart: HybridViewModelImagePropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelImagePropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt index 3907b537..370dc566 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -93,6 +94,7 @@ abstract class HybridViewModelInstanceSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridViewModelInstanceSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridViewModelInstanceSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt index 0247468c..d0b9e7ea 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -106,6 +107,7 @@ abstract class HybridViewModelListPropertySpec: HybridViewModelPropertySpec() { @Keep protected open class CxxPart(javaPart: HybridViewModelListPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelListPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt index c52be64a..3c1efcf0 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -68,6 +69,7 @@ abstract class HybridViewModelNumberPropertySpec: HybridViewModelPropertySpec() @Keep protected open class CxxPart(javaPart: HybridViewModelNumberPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelNumberPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt index 22a65748..ca61e770 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -40,6 +41,7 @@ abstract class HybridViewModelPropertySpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridViewModelPropertySpec): HybridObject.CxxPart(javaPart) { // C++ JHybridViewModelPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt index 1e8f63ac..c68434fe 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -89,6 +90,7 @@ abstract class HybridViewModelSpec: HybridObject() { @Keep protected open class CxxPart(javaPart: HybridViewModelSpec): HybridObject.CxxPart(javaPart) { // C++ JHybridViewModelSpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt index 9dc21f6d..9c537a6e 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.Promise import com.margelo.nitro.core.HybridObject @@ -68,6 +69,7 @@ abstract class HybridViewModelStringPropertySpec: HybridViewModelPropertySpec() @Keep protected open class CxxPart(javaPart: HybridViewModelStringPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelStringPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt index 8b8fe192..8debcb01 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt @@ -10,6 +10,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip +import dalvik.annotation.optimization.FastNative import com.margelo.nitro.core.HybridObject /** @@ -55,6 +56,7 @@ abstract class HybridViewModelTriggerPropertySpec: HybridViewModelPropertySpec() @Keep protected open class CxxPart(javaPart: HybridViewModelTriggerPropertySpec): HybridViewModelPropertySpec.CxxPart(javaPart) { // C++ JHybridViewModelTriggerPropertySpec::CxxPart::initHybrid(...) + @FastNative external override fun initHybrid(): HybridData } override fun createCxxPart(): CxxPart { diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt index 3742280b..11928bb0 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -23,6 +24,18 @@ data class ReferencedAssetsType( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ReferencedAssetsType) return false + return Objects.deepEquals(this.data, other.data) + } + + override fun hashCode(): Int { + return arrayOf( + data + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt index a996359c..b38b5164 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -38,6 +39,28 @@ data class ResolvedReferencedAsset( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ResolvedReferencedAsset) return false + return Objects.deepEquals(this.sourceUrl, other.sourceUrl) + && Objects.deepEquals(this.sourceAsset, other.sourceAsset) + && Objects.deepEquals(this.sourceAssetId, other.sourceAssetId) + && Objects.deepEquals(this.path, other.path) + && Objects.deepEquals(this.image, other.image) + && Objects.deepEquals(this.type, other.type) + } + + override fun hashCode(): Int { + return arrayOf( + sourceUrl, + sourceAsset, + sourceAssetId, + path, + image, + type + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEnumDefinition.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEnumDefinition.kt index a463258a..542621ba 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEnumDefinition.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEnumDefinition.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -26,6 +27,20 @@ data class RiveEnumDefinition( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is RiveEnumDefinition) return false + return Objects.deepEquals(this.name, other.name) + && Objects.deepEquals(this.values, other.values) + } + + override fun hashCode(): Int { + return arrayOf( + name, + values + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt index d24ce4ff..3e42e535 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -26,6 +27,20 @@ data class RiveError( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is RiveError) return false + return Objects.deepEquals(this.message, other.message) + && Objects.deepEquals(this.type, other.type) + } + + override fun hashCode(): Int { + return arrayOf( + message, + type + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt index 3a6aa89d..efcac38a 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -38,6 +39,28 @@ data class UnifiedRiveEvent( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is UnifiedRiveEvent) return false + return Objects.deepEquals(this.name, other.name) + && Objects.deepEquals(this.type, other.type) + && Objects.deepEquals(this.delay, other.delay) + && Objects.deepEquals(this.properties, other.properties) + && Objects.deepEquals(this.url, other.url) + && Objects.deepEquals(this.target, other.target) + } + + override fun hashCode(): Int { + return arrayOf( + name, + type, + delay, + properties, + url, + target + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_Double_FrameRateRange.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_Double_FrameRateRange.kt index 3884b6f6..7e70c150 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_Double_FrameRateRange.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_Double_FrameRateRange.kt @@ -21,6 +21,22 @@ sealed class Variant_Double_FrameRateRange { @DoNotStrip data class Second(@DoNotStrip val value: FrameRateRange): Variant_Double_FrameRateRange() + inline fun asType(): T? { + return when (this) { + is First -> (value) as? T + is Second -> (value) as? T + } + } + inline fun isType(): Boolean { + return asType() != null + } + inline fun match(first: (Double) -> R, second: (FrameRateRange) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + } + } + val isFirst: Boolean get() = this is First val isSecond: Boolean @@ -35,13 +51,6 @@ sealed class Variant_Double_FrameRateRange { return value } - inline fun match(first: (Double) -> R, second: (FrameRateRange) -> R): R { - return when (this) { - is First -> first(value) - is Second -> second(value) - } - } - companion object { @JvmStatic @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt index 3aa5fb15..6f0857f0 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt @@ -23,6 +23,24 @@ sealed class Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName { @DoNotStrip data class Third(@DoNotStrip val value: DataBindByName): Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName() + inline fun asType(): T? { + return when (this) { + is First -> (value) as? T + is Second -> (value) as? T + is Third -> (value) as? T + } + } + inline fun isType(): Boolean { + return asType() != null + } + inline fun match(first: (HybridViewModelInstanceSpec) -> R, second: (DataBindMode) -> R, third: (DataBindByName) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + is Third -> third(value) + } + } + val isFirst: Boolean get() = this is First val isSecond: Boolean @@ -43,14 +61,6 @@ sealed class Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName { return value } - inline fun match(first: (HybridViewModelInstanceSpec) -> R, second: (DataBindMode) -> R, third: (DataBindByName) -> R): R { - return when (this) { - is First -> first(value) - is Second -> second(value) - is Third -> third(value) - } - } - companion object { @JvmStatic @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ViewModelPropertyInfo.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ViewModelPropertyInfo.kt index 506a8e2f..8e40285c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ViewModelPropertyInfo.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ViewModelPropertyInfo.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.rive import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -26,6 +27,20 @@ data class ViewModelPropertyInfo( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ViewModelPropertyInfo) return false + return Objects.deepEquals(this.name, other.name) + && Objects.deepEquals(this.type, other.type) + } + + override fun hashCode(): Int { + return arrayOf( + name, + type + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt index 46fc7230..585f192c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt @@ -20,6 +20,14 @@ import com.margelo.nitro.rive.* * Represents the React Native `ViewManager` for the "RiveView" Nitro HybridView. */ public open class HybridRiveViewManager: SimpleViewManager() { + /** + * Represents the View and its last state snapshot (mutable) + */ + private class HybridViewHolder( + val hybridView: HybridRiveView, + var lastState: StateWrapper? = null, + ) + init { if (RecyclableView::class.java.isAssignableFrom(HybridRiveView::class.java)) { // Enable view recycling @@ -34,27 +42,41 @@ public open class HybridRiveViewManager: SimpleViewManager() { override fun createViewInstance(reactContext: ThemedReactContext): View { val hybridView = HybridRiveView(reactContext) val view = hybridView.view - view.setTag(associated_hybrid_view_tag, hybridView) + view.setTag(associated_hybrid_view_tag, HybridViewHolder(hybridView)) return view } override fun updateState(view: View, props: ReactStylesDiffMap, stateWrapper: StateWrapper): Any? { - val hybridView = view.getTag(associated_hybrid_view_tag) as? HybridRiveView + val holder = getHybridViewHolder(view) ?: throw Error("Couldn't find view $view in local views table!") + val hybridView = holder.hybridView + val oldState = holder.lastState + val newState = stateWrapper // 1. Update each prop individually hybridView.beforeUpdate() - HybridRiveViewStateUpdater.updateViewProps(hybridView, stateWrapper) + HybridRiveViewStateUpdater.updateViewProps(hybridView, newState, oldState) hybridView.afterUpdate() + holder.lastState = newState // 2. Continue in base View props - return super.updateState(view, props, stateWrapper) + return super.updateState(view, props, newState) + } + + override fun onDropViewInstance(view: View) { + val holder = getHybridViewHolder(view) + holder?.lastState = null + holder?.hybridView?.onDropView() + return super.onDropViewInstance(view) } protected override fun prepareToRecycleView(reactContext: ThemedReactContext, view: View): View? { - super.prepareToRecycleView(reactContext, view) - val hybridView = view.getTag(associated_hybrid_view_tag) as? HybridRiveView + val preparedView = super.prepareToRecycleView(reactContext, view) ?: return null + val holder = getHybridViewHolder(preparedView) + ?: return null + val hybridView = holder.hybridView + holder.lastState = null @Suppress("USELESS_IS_CHECK") if (hybridView is RecyclableView) { @@ -67,4 +89,8 @@ public open class HybridRiveViewManager: SimpleViewManager() { return null } } + + private fun getHybridViewHolder(view: View): HybridViewHolder? { + return view.getTag(associated_hybrid_view_tag) as? HybridViewHolder + } } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt index 0caac58a..b9a15e2f 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt @@ -14,10 +14,10 @@ internal class HybridRiveViewStateUpdater { companion object { /** * Updates the props for [view] through C++. - * The [state] prop is expected to contain [view]'s props as wrapped Fabric state. + * The [newState] prop is expected to contain [view]'s props as wrapped Fabric state. */ @Suppress("KotlinJniMissingFunction") @JvmStatic - external fun updateViewProps(view: HybridRiveViewSpec, state: StateWrapper) + external fun updateViewProps(view: HybridRiveViewSpec, newState: StateWrapper, oldState: StateWrapper?) } } diff --git a/nitrogen/generated/android/riveOnLoad.cpp b/nitrogen/generated/android/riveOnLoad.cpp index f8166a32..22948026 100644 --- a/nitrogen/generated/android/riveOnLoad.cpp +++ b/nitrogen/generated/android/riveOnLoad.cpp @@ -56,57 +56,57 @@ int initialize(JavaVM* vm) { } struct JHybridRiveFontConfigSpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfig;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFontConfig;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveFontConfigSpec(); } }; struct JHybridRiveFileFactorySpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactory;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactory;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveFileFactorySpec(); } }; struct JHybridRiveFileSpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFile;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFile;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveFileSpec(); } }; struct JHybridRiveViewSpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveView;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveView;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveViewSpec(); } }; struct JHybridRiveImageFactorySpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactory;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactory;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveImageFactorySpec(); } }; struct JHybridRiveRuntimeSpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntime;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntime;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveRuntimeSpec(); } }; struct JHybridRiveLoggerSpecImpl: public jni::JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLogger;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveLogger;"; static std::shared_ptr create() { - static auto constructorFn = javaClassStatic()->getConstructor(); + static const auto constructorFn = javaClassStatic()->getConstructor(); jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); return javaPart->getJHybridRiveLoggerSpec(); } diff --git a/nitrogen/generated/ios/RNRive+autolinking.rb b/nitrogen/generated/ios/RNRive+autolinking.rb index cb5dd7dc..7df76fc6 100644 --- a/nitrogen/generated/ios/RNRive+autolinking.rb +++ b/nitrogen/generated/ios/RNRive+autolinking.rb @@ -56,5 +56,7 @@ def add_nitrogen_files(spec) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", + # Disable auto-generated ObjC header for Swift (Static linkage on Xcode 26.4 breaks here) + "SWIFT_INSTALL_OBJC_HEADER" => "NO", }) end diff --git a/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp b/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp index f44c2c59..c54dd18b 100644 --- a/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +++ b/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp @@ -1153,16 +1153,16 @@ namespace margelo::nitro::rive::bridge::swift { return optional.value(); } - // pragma MARK: std::variant + // pragma MARK: std::variant /** - * Wrapper struct for `std::variant`. + * Wrapper struct for `std::variant`. * std::variant cannot be used in Swift because of a Swift bug. * Not even specializing it works. So we create a wrapper struct. */ - struct std__variant_bool__std__string__double_ final { - std::variant variant; - std__variant_bool__std__string__double_(std::variant variant): variant(variant) { } - operator std::variant() const noexcept { + struct std__variant_bool__double__std__string_ final { + std::variant variant; + std__variant_bool__double__std__string_(std::variant variant): variant(variant) { } + operator std::variant() const noexcept { return variant; } inline size_t index() const noexcept { @@ -1171,34 +1171,34 @@ namespace margelo::nitro::rive::bridge::swift { inline bool get_0() const noexcept { return std::get<0>(variant); } - inline std::string get_1() const noexcept { + inline double get_1() const noexcept { return std::get<1>(variant); } - inline double get_2() const noexcept { + inline std::string get_2() const noexcept { return std::get<2>(variant); } }; - inline std__variant_bool__std__string__double_ create_std__variant_bool__std__string__double_(bool value) noexcept { - return std__variant_bool__std__string__double_(value); + inline std__variant_bool__double__std__string_ create_std__variant_bool__double__std__string_(bool value) noexcept { + return std__variant_bool__double__std__string_(value); } - inline std__variant_bool__std__string__double_ create_std__variant_bool__std__string__double_(const std::string& value) noexcept { - return std__variant_bool__std__string__double_(value); + inline std__variant_bool__double__std__string_ create_std__variant_bool__double__std__string_(double value) noexcept { + return std__variant_bool__double__std__string_(value); } - inline std__variant_bool__std__string__double_ create_std__variant_bool__std__string__double_(double value) noexcept { - return std__variant_bool__std__string__double_(value); + inline std__variant_bool__double__std__string_ create_std__variant_bool__double__std__string_(const std::string& value) noexcept { + return std__variant_bool__double__std__string_(value); } - // pragma MARK: std::unordered_map> + // pragma MARK: std::unordered_map> /** - * Specialized version of `std::unordered_map>`. + * Specialized version of `std::unordered_map>`. */ - using std__unordered_map_std__string__std__variant_bool__std__string__double__ = std::unordered_map>; - inline std::unordered_map> create_std__unordered_map_std__string__std__variant_bool__std__string__double__(size_t size) noexcept { - std::unordered_map> map; + using std__unordered_map_std__string__std__variant_bool__double__std__string__ = std::unordered_map>; + inline std::unordered_map> create_std__unordered_map_std__string__std__variant_bool__double__std__string__(size_t size) noexcept { + std::unordered_map> map; map.reserve(size); return map; } - inline std::vector get_std__unordered_map_std__string__std__variant_bool__std__string__double___keys(const std__unordered_map_std__string__std__variant_bool__std__string__double__& map) noexcept { + inline std::vector get_std__unordered_map_std__string__std__variant_bool__double__std__string___keys(const std__unordered_map_std__string__std__variant_bool__double__std__string__& map) noexcept { std::vector keys; keys.reserve(map.size()); for (const auto& entry : map) { @@ -1206,25 +1206,25 @@ namespace margelo::nitro::rive::bridge::swift { } return keys; } - inline std::variant get_std__unordered_map_std__string__std__variant_bool__std__string__double___value(const std__unordered_map_std__string__std__variant_bool__std__string__double__& map, const std::string& key) noexcept { + inline std::variant get_std__unordered_map_std__string__std__variant_bool__double__std__string___value(const std__unordered_map_std__string__std__variant_bool__double__std__string__& map, const std::string& key) noexcept { return map.find(key)->second; } - inline void emplace_std__unordered_map_std__string__std__variant_bool__std__string__double__(std__unordered_map_std__string__std__variant_bool__std__string__double__& map, const std::string& key, const std::variant& value) noexcept { + inline void emplace_std__unordered_map_std__string__std__variant_bool__double__std__string__(std__unordered_map_std__string__std__variant_bool__double__std__string__& map, const std::string& key, const std::variant& value) noexcept { map.emplace(key, value); } - // pragma MARK: std::optional>> + // pragma MARK: std::optional>> /** - * Specialized version of `std::optional>>`. + * Specialized version of `std::optional>>`. */ - using std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___ = std::optional>>; - inline std::optional>> create_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___(const std::unordered_map>& value) noexcept { - return std::optional>>(value); + using std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___ = std::optional>>; + inline std::optional>> create_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___(const std::unordered_map>& value) noexcept { + return std::optional>>(value); } - inline bool has_value_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___(const std::optional>>& optional) noexcept { + inline bool has_value_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___(const std::optional>>& optional) noexcept { return optional.has_value(); } - inline std::unordered_map> get_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___(const std::optional>>& optional) noexcept { + inline std::unordered_map> get_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___(const std::optional>>& optional) noexcept { return optional.value(); } diff --git a/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm b/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm index 03fdc83e..430c4626 100644 --- a/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm +++ b/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm @@ -17,6 +17,13 @@ #import "HybridRiveViewSpecSwift.hpp" #import "RNRive-Swift-Cxx-Umbrella.hpp" +#if __has_include() +#include +#if REACT_NATIVE_VERSION_MINOR >= 82 +#define ENABLE_RCT_COMPONENT_VIEW_INVALIDATE +#endif +#endif + using namespace facebook; using namespace margelo::nitro::rive; using namespace margelo::nitro::rive::views; @@ -30,6 +37,7 @@ + (BOOL)shouldBeRecycled; @implementation HybridRiveViewComponent { std::shared_ptr _hybridView; + BOOL _didDropView; } + (void) load { @@ -43,6 +51,7 @@ + (void) load { - (instancetype) init { if (self = [super init]) { + _props = HybridRiveViewShadowNode::defaultSharedProps(); std::shared_ptr hybridView = RNRive::RNRiveAutolinking::createRiveView(); _hybridView = std::dynamic_pointer_cast(hybridView); [self updateView]; @@ -62,90 +71,121 @@ - (void) updateView { [self setContentView:view]; } +- (void) notifyOnDropView { + // A recycled component can later be invalidated. Notify only once per mount. + if (_didDropView) { + return; + } + RNRive::HybridRiveViewSpec_cxx& swiftPart = _hybridView->getSwiftPart(); + swiftPart.onDropView(); + _didDropView = YES; +} + - (void) updateProps:(const std::shared_ptr&)props oldProps:(const std::shared_ptr&)oldProps { + // A props update marks a newly mounted or still-active component. + _didDropView = NO; + // 1. Downcast props - const auto& newViewPropsConst = *std::static_pointer_cast(props); - auto& newViewProps = const_cast(newViewPropsConst); + const auto& newViewProps = *std::static_pointer_cast(props); + const auto* oldViewProps = static_cast(oldProps.get()); RNRive::HybridRiveViewSpec_cxx& swiftPart = _hybridView->getSwiftPart(); - // 2. Update each prop individually - swiftPart.beforeUpdate(); - - // artboardName: optional - if (newViewProps.artboardName.isDirty) { - swiftPart.setArtboardName(newViewProps.artboardName.value); - newViewProps.artboardName.isDirty = false; - } - // stateMachineName: optional - if (newViewProps.stateMachineName.isDirty) { - swiftPart.setStateMachineName(newViewProps.stateMachineName.value); - newViewProps.stateMachineName.isDirty = false; - } - // autoPlay: optional - if (newViewProps.autoPlay.isDirty) { - swiftPart.setAutoPlay(newViewProps.autoPlay.value); - newViewProps.autoPlay.isDirty = false; - } - // file: hybrid-object - if (newViewProps.file.isDirty) { - swiftPart.setFile(newViewProps.file.value); - newViewProps.file.isDirty = false; - } - // alignment: optional - if (newViewProps.alignment.isDirty) { - swiftPart.setAlignment(newViewProps.alignment.value); - newViewProps.alignment.isDirty = false; - } - // fit: optional - if (newViewProps.fit.isDirty) { - swiftPart.setFit(newViewProps.fit.value); - newViewProps.fit.isDirty = false; - } - // layoutScaleFactor: optional - if (newViewProps.layoutScaleFactor.isDirty) { - swiftPart.setLayoutScaleFactor(newViewProps.layoutScaleFactor.value); - newViewProps.layoutScaleFactor.isDirty = false; - } - // frameRate: optional - if (newViewProps.frameRate.isDirty) { - swiftPart.setFrameRate(newViewProps.frameRate.value); - newViewProps.frameRate.isDirty = false; - } - // semantics: optional - if (newViewProps.semantics.isDirty) { - swiftPart.setSemantics(newViewProps.semantics.value); - newViewProps.semantics.isDirty = false; - } - // dataBind: optional - if (newViewProps.dataBind.isDirty) { - swiftPart.setDataBind(newViewProps.dataBind.value); - newViewProps.dataBind.isDirty = false; - } - // onError: function - if (newViewProps.onError.isDirty) { - swiftPart.setOnError(newViewProps.onError.value); - newViewProps.onError.isDirty = false; - } - // onStop: function - if (newViewProps.onStop.isDirty) { - swiftPart.setOnStop(newViewProps.onStop.value); - newViewProps.onStop.isDirty = false; - } - - swiftPart.afterUpdate(); + // 2. Update only props that differ from the previous Props snapshot. + const bool hasTransactionPropChanges = oldViewProps == nullptr + ? newViewProps.hasAnyProvidedProps() + : !newViewProps.hasSameProps(*oldViewProps); + if (hasTransactionPropChanges) { + swiftPart.beforeUpdate(); + + // artboardName: optional + if (oldViewProps == nullptr + ? newViewProps.artboardName.isProvided() + : !newViewProps.artboardName.hasSameValue(oldViewProps->artboardName)) { + swiftPart.setArtboardName(newViewProps.artboardName.get()); + } + // stateMachineName: optional + if (oldViewProps == nullptr + ? newViewProps.stateMachineName.isProvided() + : !newViewProps.stateMachineName.hasSameValue(oldViewProps->stateMachineName)) { + swiftPart.setStateMachineName(newViewProps.stateMachineName.get()); + } + // autoPlay: optional + if (oldViewProps == nullptr + ? newViewProps.autoPlay.isProvided() + : !newViewProps.autoPlay.hasSameValue(oldViewProps->autoPlay)) { + swiftPart.setAutoPlay(newViewProps.autoPlay.get()); + } + // file: hybrid-object + if (oldViewProps == nullptr + ? newViewProps.file.isProvided() + : !newViewProps.file.hasSameValue(oldViewProps->file)) { + swiftPart.setFile(newViewProps.file.get()); + } + // alignment: optional + if (oldViewProps == nullptr + ? newViewProps.alignment.isProvided() + : !newViewProps.alignment.hasSameValue(oldViewProps->alignment)) { + swiftPart.setAlignment(newViewProps.alignment.get()); + } + // fit: optional + if (oldViewProps == nullptr + ? newViewProps.fit.isProvided() + : !newViewProps.fit.hasSameValue(oldViewProps->fit)) { + swiftPart.setFit(newViewProps.fit.get()); + } + // layoutScaleFactor: optional + if (oldViewProps == nullptr + ? newViewProps.layoutScaleFactor.isProvided() + : !newViewProps.layoutScaleFactor.hasSameValue(oldViewProps->layoutScaleFactor)) { + swiftPart.setLayoutScaleFactor(newViewProps.layoutScaleFactor.get()); + } + // frameRate: optional + if (oldViewProps == nullptr + ? newViewProps.frameRate.isProvided() + : !newViewProps.frameRate.hasSameValue(oldViewProps->frameRate)) { + swiftPart.setFrameRate(newViewProps.frameRate.get()); + } + // semantics: optional + if (oldViewProps == nullptr + ? newViewProps.semantics.isProvided() + : !newViewProps.semantics.hasSameValue(oldViewProps->semantics)) { + swiftPart.setSemantics(newViewProps.semantics.get()); + } + // dataBind: optional + if (oldViewProps == nullptr + ? newViewProps.dataBind.isProvided() + : !newViewProps.dataBind.hasSameValue(oldViewProps->dataBind)) { + swiftPart.setDataBind(newViewProps.dataBind.get()); + } + // onError: function + if (oldViewProps == nullptr + ? newViewProps.onError.isProvided() + : !newViewProps.onError.hasSameValue(oldViewProps->onError)) { + swiftPart.setOnError(newViewProps.onError.get()); + } + // onStop: function + if (oldViewProps == nullptr + ? newViewProps.onStop.isProvided() + : !newViewProps.onStop.hasSameValue(oldViewProps->onStop)) { + swiftPart.setOnStop(newViewProps.onStop.get()); + } - // 3. Update hybridRef if it changed - if (newViewProps.hybridRef.isDirty) { - // hybridRef changed - call it with new this - const auto& maybeFunc = newViewProps.hybridRef.value; - if (maybeFunc.has_value()) { - maybeFunc.value()(_hybridView); + // Update hybridRef if it changed + if (oldViewProps == nullptr + ? newViewProps.hybridRef.isProvided() + : !newViewProps.hybridRef.hasSameValue(oldViewProps->hybridRef)) { + // hybridRef changed - call it with new this + const auto& maybeFunc = newViewProps.hybridRef.get(); + if (maybeFunc.has_value()) { + maybeFunc.value()(_hybridView); + } } - newViewProps.hybridRef.isDirty = false; + + swiftPart.afterUpdate(); } - // 4. Continue in base class + // 3. Continue in base class [super updateProps:props oldProps:oldProps]; } @@ -154,9 +194,17 @@ + (BOOL)shouldBeRecycled { } - (void)prepareForRecycle { + [self notifyOnDropView]; [super prepareForRecycle]; RNRive::HybridRiveViewSpec_cxx& swiftPart = _hybridView->getSwiftPart(); swiftPart.maybePrepareForRecycle(); } +#ifdef ENABLE_RCT_COMPONENT_VIEW_INVALIDATE +- (void)invalidate { + [self notifyOnDropView]; + [super invalidate]; +} +#endif + @end diff --git a/nitrogen/generated/ios/swift/EventPropertiesOutput.swift b/nitrogen/generated/ios/swift/EventPropertiesOutput.swift index 7f6a3b8a..332daa64 100644 --- a/nitrogen/generated/ios/swift/EventPropertiesOutput.swift +++ b/nitrogen/generated/ios/swift/EventPropertiesOutput.swift @@ -9,11 +9,24 @@ /** * An Swift enum with associated values representing a Variant/Union type. - * JS type: `boolean | string | number` + * JS type: `boolean | number | string` */ @frozen public enum EventPropertiesOutput { case first(Bool) - case second(String) - case third(Double) + case second(Double) + case third(String) +} + +public extension EventPropertiesOutput { + func asType(_ type: T.Type = T.self) -> T? { + switch self { + case .first(let value): return value as? T + case .second(let value): return value as? T + case .third(let value): return value as? T + } + } + func isType(_ type: T.Type = T.self) -> Bool { + return self.asType(type) != nil + } } diff --git a/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift b/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift index bba3dd02..f7df07b2 100644 --- a/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift @@ -718,4 +718,8 @@ open class HybridRiveViewSpec_cxx { guard let recyclable = __implementation as? any RecyclableView else { return } recyclable.prepareForRecycle() } + + public final func onDropView() { + __implementation.onDropView() + } } diff --git a/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift b/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift index 31afcf9d..6383eabb 100644 --- a/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift +++ b/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift @@ -25,19 +25,19 @@ public extension UnifiedRiveEvent { } else { return .init() } - }(), { () -> bridge.std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___ in + }(), { () -> bridge.std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___ in if let __unwrappedValue = properties { - return bridge.create_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___({ () -> bridge.std__unordered_map_std__string__std__variant_bool__std__string__double__ in - var __map = bridge.create_std__unordered_map_std__string__std__variant_bool__std__string__double__(__unwrappedValue.count) + return bridge.create_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___({ () -> bridge.std__unordered_map_std__string__std__variant_bool__double__std__string__ in + var __map = bridge.create_std__unordered_map_std__string__std__variant_bool__double__std__string__(__unwrappedValue.count) for (__k, __v) in __unwrappedValue { - bridge.emplace_std__unordered_map_std__string__std__variant_bool__std__string__double__(&__map, std.string(__k), { () -> bridge.std__variant_bool__std__string__double_ in + bridge.emplace_std__unordered_map_std__string__std__variant_bool__double__std__string__(&__map, std.string(__k), { () -> bridge.std__variant_bool__double__std__string_ in switch __v { case .first(let __value): - return bridge.create_std__variant_bool__std__string__double_(__value) + return bridge.create_std__variant_bool__double__std__string_(__value) case .second(let __value): - return bridge.create_std__variant_bool__std__string__double_(std.string(__value)) + return bridge.create_std__variant_bool__double__std__string_(__value) case .third(let __value): - return bridge.create_std__variant_bool__std__string__double_(__value) + return bridge.create_std__variant_bool__double__std__string_(std.string(__value)) } }().variant) } @@ -86,25 +86,25 @@ public extension UnifiedRiveEvent { @inline(__always) var properties: Dictionary? { return { () -> Dictionary? in - if bridge.has_value_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___(self.__properties) { - let __unwrapped = bridge.get_std__optional_std__unordered_map_std__string__std__variant_bool__std__string__double___(self.__properties) + if bridge.has_value_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___(self.__properties) { + let __unwrapped = bridge.get_std__optional_std__unordered_map_std__string__std__variant_bool__double__std__string___(self.__properties) return { () -> Dictionary in var __dictionary = Dictionary(minimumCapacity: __unwrapped.size()) - let __keys = bridge.get_std__unordered_map_std__string__std__variant_bool__std__string__double___keys(__unwrapped) + let __keys = bridge.get_std__unordered_map_std__string__std__variant_bool__double__std__string___keys(__unwrapped) for __key in __keys { - let __value = bridge.get_std__unordered_map_std__string__std__variant_bool__std__string__double___value(__unwrapped, __key) + let __value = bridge.get_std__unordered_map_std__string__std__variant_bool__double__std__string___value(__unwrapped, __key) __dictionary[String(__key)] = { () -> EventPropertiesOutput in - let __variant = bridge.std__variant_bool__std__string__double_(__value) + let __variant = bridge.std__variant_bool__double__std__string_(__value) switch __variant.index() { case 0: let __actual = __variant.get_0() return .first(__actual) case 1: let __actual = __variant.get_1() - return .second(String(__actual)) + return .second(__actual) case 2: let __actual = __variant.get_2() - return .third(__actual) + return .third(String(__actual)) default: fatalError("Variant can never have index \(__variant.index())!") } diff --git a/nitrogen/generated/ios/swift/Variant_Double_FrameRateRange.swift b/nitrogen/generated/ios/swift/Variant_Double_FrameRateRange.swift index 0af12d68..d2db85c3 100644 --- a/nitrogen/generated/ios/swift/Variant_Double_FrameRateRange.swift +++ b/nitrogen/generated/ios/swift/Variant_Double_FrameRateRange.swift @@ -16,3 +16,15 @@ public indirect enum Variant_Double_FrameRateRange { case first(Double) case second(FrameRateRange) } + +public extension Variant_Double_FrameRateRange { + func asType(_ type: T.Type = T.self) -> T? { + switch self { + case .first(let value): return value as? T + case .second(let value): return value as? T + } + } + func isType(_ type: T.Type = T.self) -> Bool { + return self.asType(type) != nil + } +} diff --git a/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift b/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift index 94fdf1a6..0509e1d0 100644 --- a/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift +++ b/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift @@ -17,3 +17,16 @@ public indirect enum Variant__any_HybridViewModelInstanceSpec__DataBindMode_Data case second(DataBindMode) case third(DataBindByName) } + +public extension Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName { + func asType(_ type: T.Type = T.self) -> T? { + switch self { + case .first(let value): return value as? T + case .second(let value): return value as? T + case .third(let value): return value as? T + } + } + func isType(_ type: T.Type = T.self) -> Bool { + return self.asType(type) != nil + } +} diff --git a/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp b/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp index ded81452..7bedb3db 100644 --- a/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp +++ b/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp @@ -47,13 +47,13 @@ namespace margelo::nitro::rive { std::string name SWIFT_PRIVATE; RiveEventType type SWIFT_PRIVATE; std::optional delay SWIFT_PRIVATE; - std::optional>> properties SWIFT_PRIVATE; + std::optional>> properties SWIFT_PRIVATE; std::optional url SWIFT_PRIVATE; std::optional target SWIFT_PRIVATE; public: UnifiedRiveEvent() = default; - explicit UnifiedRiveEvent(std::string name, RiveEventType type, std::optional delay, std::optional>> properties, std::optional url, std::optional target): name(name), type(type), delay(delay), properties(properties), url(url), target(target) {} + explicit UnifiedRiveEvent(std::string name, RiveEventType type, std::optional delay, std::optional>> properties, std::optional url, std::optional target): name(name), type(type), delay(delay), properties(properties), url(url), target(target) {} public: friend bool operator==(const UnifiedRiveEvent& lhs, const UnifiedRiveEvent& rhs) = default; @@ -72,7 +72,7 @@ namespace margelo::nitro { JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name"))), JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type"))), JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "delay"))), - JSIConverter>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "properties"))), + JSIConverter>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "properties"))), JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "url"))), JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "target"))) ); @@ -82,7 +82,7 @@ namespace margelo::nitro { obj.setProperty(runtime, PropNameIDCache::get(runtime, "name"), JSIConverter::toJSI(runtime, arg.name)); obj.setProperty(runtime, PropNameIDCache::get(runtime, "type"), JSIConverter::toJSI(runtime, arg.type)); obj.setProperty(runtime, PropNameIDCache::get(runtime, "delay"), JSIConverter>::toJSI(runtime, arg.delay)); - obj.setProperty(runtime, PropNameIDCache::get(runtime, "properties"), JSIConverter>>>::toJSI(runtime, arg.properties)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "properties"), JSIConverter>>>::toJSI(runtime, arg.properties)); obj.setProperty(runtime, PropNameIDCache::get(runtime, "url"), JSIConverter>::toJSI(runtime, arg.url)); obj.setProperty(runtime, PropNameIDCache::get(runtime, "target"), JSIConverter>::toJSI(runtime, arg.target)); return obj; @@ -98,7 +98,7 @@ namespace margelo::nitro { if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name")))) return false; if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type")))) return false; if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "delay")))) return false; - if (!JSIConverter>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "properties")))) return false; + if (!JSIConverter>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "properties")))) return false; if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "url")))) return false; if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "target")))) return false; return true; diff --git a/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp b/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp index 82757d46..43a9392a 100644 --- a/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp +++ b/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp @@ -7,164 +7,55 @@ #include "HybridRiveViewComponent.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include namespace margelo::nitro::rive::views { + using namespace facebook; + + template struct RiveIsOptional final : std::false_type {}; + template struct RiveIsOptional> final : std::true_type {}; + + // Fabric sends `null` (not `undefined`) when a prop is removed, but Nitro's + // JSIConverter> only maps `undefined` to nullopt, so parsing + // a cleared optional prop throws. Parse a null-valued optional prop as a + // cleared prop instead. https://github.com/mrousavy/nitro/issues/1184 + template + nitro::ReactProp parseNullAsCleared(const char* viewName, const char* propName, + const react::RawProps& rawProps, + const nitro::ReactProp& sourceProp) { + if constexpr (RiveIsOptional::value) { + const react::RawValue* rawValue = nitro::RawPropsCompat::at(rawProps, propName); + if (rawValue != nullptr) { + auto [runtime, value] = static_cast>(*rawValue); + if (value.isNull() && !nitro::JSIConverter::canConvert(*runtime, value)) { + return nitro::ReactProp(); + } + } + } + return nitro::ReactProp::fromRawValue(viewName, propName, rawProps, sourceProp); + } + extern const char HybridRiveViewComponentName[] = "RiveView"; HybridRiveViewProps::HybridRiveViewProps(const react::PropsParserContext& context, const HybridRiveViewProps& sourceProps, const react::RawProps& rawProps): react::ViewProps(context, sourceProps, rawProps, filterObjectKeys), - artboardName([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("artboardName", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.artboardName; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.artboardName); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.artboardName); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.artboardName: ") + exc.what()); - } - }()), - stateMachineName([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("stateMachineName", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.stateMachineName; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.stateMachineName); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.stateMachineName); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.stateMachineName: ") + exc.what()); - } - }()), - autoPlay([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("autoPlay", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.autoPlay; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.autoPlay); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.autoPlay); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.autoPlay: ") + exc.what()); - } - }()), - file([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("file", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.file; - const auto& [runtime, value] = (std::pair)*rawValue; - return CachedProp>::fromRawValue(*runtime, value, sourceProps.file); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.file: ") + exc.what()); - } - }()), - alignment([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("alignment", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.alignment; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.alignment); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.alignment); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.alignment: ") + exc.what()); - } - }()), - fit([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("fit", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.fit; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.fit); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.fit); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.fit: ") + exc.what()); - } - }()), - layoutScaleFactor([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("layoutScaleFactor", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.layoutScaleFactor; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.layoutScaleFactor); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.layoutScaleFactor); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.layoutScaleFactor: ") + exc.what()); - } - }()), - frameRate([&]() -> CachedProp>> { - try { - const react::RawValue* rawValue = rawProps.at("frameRate", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.frameRate; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.frameRate); - return CachedProp>>::fromRawValue(*runtime, value, sourceProps.frameRate); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.frameRate: ") + exc.what()); - } - }()), - semantics([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("semantics", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.semantics; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.semantics); - return CachedProp>::fromRawValue(*runtime, value, sourceProps.semantics); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.semantics: ") + exc.what()); - } - }()), - dataBind([&]() -> CachedProp, DataBindMode, DataBindByName>>> { - try { - const react::RawValue* rawValue = rawProps.at("dataBind", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.dataBind; - const auto& [runtime, value] = (std::pair)*rawValue; - if (value.isNull()) return CachedProp, DataBindMode, DataBindByName>>>::fromRawValue(*runtime, jsi::Value::undefined(), sourceProps.dataBind); - return CachedProp, DataBindMode, DataBindByName>>>::fromRawValue(*runtime, value, sourceProps.dataBind); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.dataBind: ") + exc.what()); - } - }()), - onError([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("onError", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.onError; - const auto& [runtime, value] = (std::pair)*rawValue; - return CachedProp>::fromRawValue(*runtime, value.asObject(*runtime).getProperty(*runtime, PropNameIDCache::get(*runtime, "f")), sourceProps.onError); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.onError: ") + exc.what()); - } - }()), - onStop([&]() -> CachedProp> { - try { - const react::RawValue* rawValue = rawProps.at("onStop", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.onStop; - const auto& [runtime, value] = (std::pair)*rawValue; - return CachedProp>::fromRawValue(*runtime, value.asObject(*runtime).getProperty(*runtime, PropNameIDCache::get(*runtime, "f")), sourceProps.onStop); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.onStop: ") + exc.what()); - } - }()), - hybridRef([&]() -> CachedProp& /* ref */)>>> { - try { - const react::RawValue* rawValue = rawProps.at("hybridRef", nullptr, nullptr); - if (rawValue == nullptr) return sourceProps.hybridRef; - const auto& [runtime, value] = (std::pair)*rawValue; - return CachedProp& /* ref */)>>>::fromRawValue(*runtime, value.asObject(*runtime).getProperty(*runtime, PropNameIDCache::get(*runtime, "f")), sourceProps.hybridRef); - } catch (const std::exception& exc) { - throw std::runtime_error(std::string("RiveView.hybridRef: ") + exc.what()); - } - }()) { } + artboardName(parseNullAsCleared>("RiveView", "artboardName", rawProps, sourceProps.artboardName)), + stateMachineName(parseNullAsCleared>("RiveView", "stateMachineName", rawProps, sourceProps.stateMachineName)), + autoPlay(parseNullAsCleared>("RiveView", "autoPlay", rawProps, sourceProps.autoPlay)), + file(nitro::ReactProp>::fromRawValue("RiveView", "file", rawProps, sourceProps.file)), + alignment(parseNullAsCleared>("RiveView", "alignment", rawProps, sourceProps.alignment)), + fit(parseNullAsCleared>("RiveView", "fit", rawProps, sourceProps.fit)), + layoutScaleFactor(parseNullAsCleared>("RiveView", "layoutScaleFactor", rawProps, sourceProps.layoutScaleFactor)), + frameRate(parseNullAsCleared>>("RiveView", "frameRate", rawProps, sourceProps.frameRate)), + semantics(parseNullAsCleared>("RiveView", "semantics", rawProps, sourceProps.semantics)), + dataBind(parseNullAsCleared, DataBindMode, DataBindByName>>>("RiveView", "dataBind", rawProps, sourceProps.dataBind)), + onError(nitro::ReactProp>::fromRawValue("RiveView", "onError", rawProps, sourceProps.onError)), + onStop(nitro::ReactProp>::fromRawValue("RiveView", "onStop", rawProps, sourceProps.onStop)), + hybridRef(parseNullAsCleared& /* ref */)>>>("RiveView", "hybridRef", rawProps, sourceProps.hybridRef)) { } bool HybridRiveViewProps::filterObjectKeys(const std::string& propName) { switch (hashString(propName)) { @@ -185,29 +76,4 @@ namespace margelo::nitro::rive::views { } } - HybridRiveViewComponentDescriptor::HybridRiveViewComponentDescriptor(const react::ComponentDescriptorParameters& parameters) - : ConcreteComponentDescriptor(parameters, - react::RawPropsParser(/* enableJsiParser */ true)) {} - - std::shared_ptr HybridRiveViewComponentDescriptor::cloneProps(const react::PropsParserContext& context, - const std::shared_ptr& props, - react::RawProps rawProps) const { - // 1. Prepare raw props parser - rawProps.parse(rawPropsParser_); - // 2. Copy props with Nitro's cached copy constructor - return HybridRiveViewShadowNode::Props(context, /* & */ rawProps, props); - } - -#ifdef ANDROID - void HybridRiveViewComponentDescriptor::adopt(react::ShadowNode& shadowNode) const { - // This is called immediately after `ShadowNode` is created, cloned or in progress. - // On Android, we need to wrap props in our state, which gets routed through Java and later unwrapped in JNI/C++. - auto& concreteShadowNode = static_cast(shadowNode); - const std::shared_ptr& constProps = concreteShadowNode.getConcreteSharedProps(); - const std::shared_ptr& props = std::const_pointer_cast(constProps); - HybridRiveViewState state{props}; - concreteShadowNode.setStateData(std::move(state)); - } -#endif - } // namespace margelo::nitro::rive::views diff --git a/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp b/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp index 27d708de..8c862fd8 100644 --- a/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp +++ b/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp @@ -7,14 +7,15 @@ #pragma once -#include -#include -#include -#include -#include -#include +#include +#include +#include #include #include +#include +#include + +#include #include #include @@ -52,19 +53,53 @@ namespace margelo::nitro::rive::views { const react::RawProps& rawProps); public: - CachedProp> artboardName; - CachedProp> stateMachineName; - CachedProp> autoPlay; - CachedProp> file; - CachedProp> alignment; - CachedProp> fit; - CachedProp> layoutScaleFactor; - CachedProp>> frameRate; - CachedProp> semantics; - CachedProp, DataBindMode, DataBindByName>>> dataBind; - CachedProp> onError; - CachedProp> onStop; - CachedProp& /* ref */)>>> hybridRef; + nitro::ReactProp> artboardName; + nitro::ReactProp> stateMachineName; + nitro::ReactProp> autoPlay; + nitro::ReactProp> file; + nitro::ReactProp> alignment; + nitro::ReactProp> fit; + nitro::ReactProp> layoutScaleFactor; + nitro::ReactProp>> frameRate; + nitro::ReactProp> semantics; + nitro::ReactProp, DataBindMode, DataBindByName>>> dataBind; + nitro::ReactProp> onError; + nitro::ReactProp> onStop; + nitro::ReactProp& /* ref */)>>> hybridRef; + + [[nodiscard]] + bool hasSameProps(const HybridRiveViewProps& other) const noexcept { + return artboardName.hasSameValue(other.artboardName) && + stateMachineName.hasSameValue(other.stateMachineName) && + autoPlay.hasSameValue(other.autoPlay) && + file.hasSameValue(other.file) && + alignment.hasSameValue(other.alignment) && + fit.hasSameValue(other.fit) && + layoutScaleFactor.hasSameValue(other.layoutScaleFactor) && + frameRate.hasSameValue(other.frameRate) && + semantics.hasSameValue(other.semantics) && + dataBind.hasSameValue(other.dataBind) && + onError.hasSameValue(other.onError) && + onStop.hasSameValue(other.onStop) && + hybridRef.hasSameValue(other.hybridRef); + } + + [[nodiscard]] + bool hasAnyProvidedProps() const noexcept { + return artboardName.isProvided() || + stateMachineName.isProvided() || + autoPlay.isProvided() || + file.isProvided() || + alignment.isProvided() || + fit.isProvided() || + layoutScaleFactor.isProvided() || + frameRate.isProvided() || + semantics.isProvided() || + dataBind.isProvided() || + onError.isProvided() || + onStop.isProvided() || + hybridRef.isProvided(); + } private: static bool filterObjectKeys(const std::string& propName); @@ -73,32 +108,7 @@ namespace margelo::nitro::rive::views { /** * State for the "RiveView" View. */ - class HybridRiveViewState final { - public: - HybridRiveViewState() = default; - explicit HybridRiveViewState(const std::shared_ptr& props): - _props(props) {} - - public: - [[nodiscard]] - const std::shared_ptr& getProps() const { - return _props; - } - - public: -#ifdef ANDROID - HybridRiveViewState(const HybridRiveViewState& /* previousState */, folly::dynamic /* data */) {} - folly::dynamic getDynamic() const { - throw std::runtime_error("HybridRiveViewState does not support folly!"); - } - react::MapBuffer getMapBuffer() const { - throw std::runtime_error("HybridRiveViewState does not support MapBuffer!"); - }; -#endif - - private: - std::shared_ptr _props; - }; + using HybridRiveViewState = nitro::ViewPropsHolderState; /** * The Shadow Node for the "RiveView" View. @@ -111,21 +121,7 @@ namespace margelo::nitro::rive::views { /** * The Component Descriptor for the "RiveView" View. */ - class HybridRiveViewComponentDescriptor final: public react::ConcreteComponentDescriptor { - public: - explicit HybridRiveViewComponentDescriptor(const react::ComponentDescriptorParameters& parameters); - - public: - /** - * A faster path for cloning props - reuses the caching logic from `HybridRiveViewProps`. - */ - std::shared_ptr cloneProps(const react::PropsParserContext& context, - const std::shared_ptr& props, - react::RawProps rawProps) const override; -#ifdef ANDROID - void adopt(react::ShadowNode& shadowNode) const override; -#endif - }; + using HybridRiveViewComponentDescriptor = nitro::ViewComponentDescriptor; /* The actual view for "RiveView" needs to be implemented in platform-specific code. */ diff --git a/package.json b/package.json index 3fb3a346..1ada32cb 100644 --- a/package.json +++ b/package.json @@ -101,12 +101,12 @@ "eslint-plugin-prettier": "^5.2.3", "expect": "29.7.0", "jest": "^29.7.0", - "nitrogen": "0.35.0", + "nitrogen": "0.37.0", "prettier": "^3.0.3", "react": "19.0.0", "react-native": "0.79.2", "react-native-builder-bob": "^0.40.10", - "react-native-nitro-modules": "0.35.10", + "react-native-nitro-modules": "0.37.0", "react-test-renderer": "19.0.0", "release-it": "^17.10.0", "tsd": "^0.33.0", @@ -117,7 +117,7 @@ "@rive-app/canvas": "^2.39.0", "react": "*", "react-native": "*", - "react-native-nitro-modules": ">=0.35.10 <0.36" + "react-native-nitro-modules": ">=0.37.0 <0.38" }, "workspaces": [ "example", diff --git a/scripts/nitrogen-postprocess.ts b/scripts/nitrogen-postprocess.ts index 0cec6394..ef14528b 100644 --- a/scripts/nitrogen-postprocess.ts +++ b/scripts/nitrogen-postprocess.ts @@ -10,7 +10,6 @@ const COMPONENT_FILE = join( ROOT, 'nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp' ); - function makeHybridRiveViewManagerOpen() { if (!existsSync(MANAGER_FILE)) { console.warn('HybridRiveViewManager.kt not found, skipping'); @@ -35,8 +34,37 @@ function makeHybridRiveViewManagerOpen() { // Fabric's prop diff sends `null` (not `undefined`) when a prop is removed, // but Nitro's JSIConverter> only maps `undefined` to nullopt, // so clearing an optional prop throws e.g. "RiveView.artboardName: Value is -// null, expected a String". Treat null like undefined for optional props. +// null, expected a String". Since nitro 0.37 the conversion happens inside +// ReactProp::fromRawValue (a library header, not generated code), so instead +// of editing the parse site we inject a wrapper that peeks at the raw value +// first (via the public RawPropsCompat::at) and parses a null-valued optional +// prop as a cleared one, never handing the null to nitro. // Remove once fixed upstream: https://github.com/mrousavy/nitro/issues/1184 +const NULL_AS_CLEARED_HELPER = ` + template struct RiveIsOptional final : std::false_type {}; + template struct RiveIsOptional> final : std::true_type {}; + + // Fabric sends \`null\` (not \`undefined\`) when a prop is removed, but Nitro's + // JSIConverter> only maps \`undefined\` to nullopt, so parsing + // a cleared optional prop throws. Parse a null-valued optional prop as a + // cleared prop instead. https://github.com/mrousavy/nitro/issues/1184 + template + nitro::ReactProp parseNullAsCleared(const char* viewName, const char* propName, + const react::RawProps& rawProps, + const nitro::ReactProp& sourceProp) { + if constexpr (RiveIsOptional::value) { + const react::RawValue* rawValue = nitro::RawPropsCompat::at(rawProps, propName); + if (rawValue != nullptr) { + auto [runtime, value] = static_cast>(*rawValue); + if (value.isNull() && !nitro::JSIConverter::canConvert(*runtime, value)) { + return nitro::ReactProp(); + } + } + } + return nitro::ReactProp::fromRawValue(viewName, propName, rawProps, sourceProp); + } +`; + function acceptNullForOptionalProps() { if (!existsSync(COMPONENT_FILE)) { console.warn('HybridRiveViewComponent.cpp not found, skipping'); @@ -44,24 +72,24 @@ function acceptNullForOptionalProps() { } const content = readFileSync(COMPONENT_FILE, 'utf-8'); - const pattern = - /^( *)return (CachedProp>)::fromRawValue\(\*runtime, value, (sourceProps\.\w+)\);$/gm; - const updated = content.replace( - pattern, - (match, indent, cachedProp, sourceProp) => - `${indent}if (value.isNull()) return ${cachedProp}::fromRawValue(*runtime, jsi::Value::undefined(), ${sourceProp});\n${match}` - ); + if (content.includes('parseNullAsCleared')) { + console.log('HybridRiveViewComponent.cpp already accepts null props'); + return; + } - if (content === updated) { - if (content.includes('value.isNull()')) { - console.log('HybridRiveViewComponent.cpp already accepts null props'); - } else { - console.warn( - 'No optional CachedProp parse sites found in HybridRiveViewComponent.cpp — nitrogen output may have changed shape' - ); - } + const anchor = ' using namespace facebook;\n'; + const callSite = /nitro::ReactProp<(std::optional<.+>)>::fromRawValue\(/g; + if (!content.includes(anchor) || !callSite.test(content)) { + console.warn( + 'No optional ReactProp parse sites found in HybridRiveViewComponent.cpp — nitrogen output may have changed shape' + ); return; } + callSite.lastIndex = 0; + + const updated = content + .replace(anchor, anchor + NULL_AS_CLEARED_HELPER) + .replace(callSite, (_match, type) => `parseNullAsCleared<${type}>(`); writeFileSync(COMPONENT_FILE, updated); console.log( diff --git a/yarn.lock b/yarn.lock index 52a8ca58..3ac18591 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7039,12 +7039,12 @@ __metadata: eslint-plugin-prettier: ^5.2.3 expect: 29.7.0 jest: ^29.7.0 - nitrogen: 0.35.0 + nitrogen: 0.37.0 prettier: ^3.0.3 react: 19.0.0 react-native: 0.79.2 react-native-builder-bob: ^0.40.10 - react-native-nitro-modules: 0.35.10 + react-native-nitro-modules: 0.37.0 react-test-renderer: 19.0.0 release-it: ^17.10.0 tsd: ^0.33.0 @@ -7054,7 +7054,7 @@ __metadata: "@rive-app/canvas": ^2.39.0 react: "*" react-native: "*" - react-native-nitro-modules: ">=0.35.10 <0.36" + react-native-nitro-modules: ">=0.37.0 <0.38" peerDependenciesMeta: "@rive-app/canvas": optional: true @@ -7386,14 +7386,14 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.28.1": - version: 0.28.1 - resolution: "@ts-morph/common@npm:0.28.1" +"@ts-morph/common@npm:~0.29.0": + version: 0.29.0 + resolution: "@ts-morph/common@npm:0.29.0" dependencies: minimatch: ^10.0.1 path-browserify: ^1.0.1 tinyglobby: ^0.2.14 - checksum: bc3e879ff55fe8fe460d49124d10f74aba4ec92c261b7f65d48153a107e1b733676bb89e1c55fa4e5c045fe055c6c5247f7d340aaf1db1a44ffaf32ca2a00ec5 + checksum: 00bdc26260272482a914dbf44a80d0f411c68cf2553e1616cdfd5997e353ac1026fa255e2e8fecec21458380ca1aff998f49d985d9c726bf92f22058b178a6a5 languageName: node linkType: hard @@ -12043,7 +12043,7 @@ __metadata: react-dom: 19.1.0 react-native: 0.81.5 react-native-gesture-handler: 2.29.1 - react-native-nitro-modules: 0.35.10 + react-native-nitro-modules: 0.37.0 react-native-reanimated: 4.1.5 react-native-safe-area-context: ~5.6.0 react-native-screens: ~4.16.0 @@ -12858,7 +12858,7 @@ __metadata: react-dom: 19.2.0 react-native: 0.83.4 react-native-gesture-handler: ~2.29.0 - react-native-nitro-modules: 0.35.10 + react-native-nitro-modules: 0.37.0 react-native-reanimated: 4.2.1 react-native-safe-area-context: ~5.6.2 react-native-screens: ~4.23.0 @@ -12902,7 +12902,7 @@ __metadata: react-native: 0.86.0 react-native-gesture-handler: ~2.32.0 react-native-harness: 1.4.0-rc.1 - react-native-nitro-modules: 0.35.10 + react-native-nitro-modules: 0.37.0 react-native-reanimated: 4.5.0 react-native-safe-area-context: ~5.7.0 react-native-screens: 4.25.2 @@ -17875,18 +17875,18 @@ __metadata: languageName: node linkType: hard -"nitrogen@npm:0.35.0": - version: 0.35.0 - resolution: "nitrogen@npm:0.35.0" +"nitrogen@npm:0.37.0": + version: 0.37.0 + resolution: "nitrogen@npm:0.37.0" dependencies: chalk: ^5.3.0 - react-native-nitro-modules: ^0.35.0 - ts-morph: ^27.0.0 + react-native-nitro-modules: ^0.37.0 + ts-morph: ^28.0.0 yargs: ^18.0.0 - zod: ^4.0.5 + zod: ^4.4.3 bin: nitrogen: lib/index.js - checksum: d99d27ff6c5cacf1acaf11aa21ee58b401b1d185086b103a6cc26e92433505e4aef93b8a8281b21f872f219d8ad7a96412ac28c36894542a709eebb86e523fc3 + checksum: 50dc6af393a9450bf01a76477d3543e97457fe15fc6eb04eb64a3c5e2821bc0de47f047e939a15de73fc331aa17a7dee3b58501379ab6397003c68c2f9f68938 languageName: node linkType: hard @@ -19374,23 +19374,13 @@ __metadata: languageName: node linkType: hard -"react-native-nitro-modules@npm:0.35.10": - version: 0.35.10 - resolution: "react-native-nitro-modules@npm:0.35.10" - peerDependencies: - react: "*" - react-native: "*" - checksum: 9a657b0503fa549d3d35e275f14872950c5f798367e8a983e5386760460d2bdbac4bd107ea78e67aec08eb03a8244e60f684faf7d252703bd4b1931bfac1890f - languageName: node - linkType: hard - -"react-native-nitro-modules@npm:^0.35.0": - version: 0.35.0 - resolution: "react-native-nitro-modules@npm:0.35.0" +"react-native-nitro-modules@npm:0.37.0, react-native-nitro-modules@npm:^0.37.0": + version: 0.37.0 + resolution: "react-native-nitro-modules@npm:0.37.0" peerDependencies: react: "*" react-native: "*" - checksum: f006daa1aa58f1a0165a4d6fc087c8d190f2857a7acfd6b47080e5979f05beb20455ed3c66831d489df4eb57d2f430d1610094ed4d6ae3946e17d83362161aa6 + checksum: b11bee4cceb34cb6bd9e3e0d48b90065738a638610711868e2fabd315e4f8a0d1a5a9b58775383ae0b6703abda2063e5ce3a40ab8c5a734b73715650328d16f1 languageName: node linkType: hard @@ -19465,7 +19455,7 @@ __metadata: react-native-builder-bob: ^0.40.10 react-native-gesture-handler: 2.29.1 react-native-harness: 1.4.0-rc.1 - react-native-nitro-modules: 0.35.10 + react-native-nitro-modules: 0.37.0 react-native-reanimated: 4.1.5 react-native-safe-area-context: ^5.4.0 react-native-screens: ~4.18.0 @@ -21846,13 +21836,13 @@ __metadata: languageName: node linkType: hard -"ts-morph@npm:^27.0.0": - version: 27.0.2 - resolution: "ts-morph@npm:27.0.2" +"ts-morph@npm:^28.0.0": + version: 28.0.0 + resolution: "ts-morph@npm:28.0.0" dependencies: - "@ts-morph/common": ~0.28.1 + "@ts-morph/common": ~0.29.0 code-block-writer: ^13.0.3 - checksum: 1ed2e89257d6f48fdce49bf51e1767787579220197efaa31ac25971c656c9a8a5a6bdd123042d16f83674eec119e4462a06f716187aec0b5e4740888ab5b73b7 + checksum: 0c63f7af39a694a0bc569c4e496dbd5a13e6320926d841aea32979fd53e0847ca90e11660e195bfd7b4e4fd04115659fbe1baf336d195f9185a006d3769d898e languageName: node linkType: hard @@ -23145,7 +23135,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.25.0 || ^4.0.0": +"zod@npm:^3.25.0 || ^4.0.0, zod@npm:^4.4.3": version: 4.4.3 resolution: "zod@npm:4.4.3" checksum: bf236fdee7a5a5ec645eef5bfea3aad34e7df912931c2a23bc17e5b59882482751da42392916529da52ff9bc70f584797a5d496f1fb81f2d1a4c90fdd3922d2a @@ -23159,13 +23149,6 @@ __metadata: languageName: node linkType: hard -"zod@npm:^4.0.5": - version: 4.1.12 - resolution: "zod@npm:4.1.12" - checksum: 91174acc7d2ca5572ad522643474ddd60640cf6877b5d76e5d583eb25e3c4072c6f5eb92ab94f231ec5ce61c6acdfc3e0166de45fb1005b1ea54986b026b765f - languageName: node - linkType: hard - "zustand@npm:^5.0.5": version: 5.0.13 resolution: "zustand@npm:5.0.13"