react-native-worklets 0.3.0 → 0.4.0-bundle-mode-preview-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp +532 -0
- package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h +88 -0
- package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +40 -122
- package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +16 -40
- package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +2 -1
- package/Common/cpp/worklets/Resources/ValueUnpacker.cpp +1 -1
- package/Common/cpp/worklets/SharedItems/Shareables.cpp +200 -24
- package/Common/cpp/worklets/SharedItems/Shareables.h +108 -7
- package/Common/cpp/worklets/Tools/JSLogger.cpp +56 -4
- package/Common/cpp/worklets/Tools/JSLogger.h +17 -0
- package/Common/cpp/worklets/Tools/JSScheduler.cpp +12 -0
- package/Common/cpp/worklets/Tools/JSScheduler.h +10 -2
- package/Common/cpp/worklets/Tools/SingleInstanceChecker.h +3 -1
- package/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +19 -1
- package/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +12 -3
- package/Common/cpp/worklets/Tools/WorkletsSystraceSection.h +136 -0
- package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +4 -4
- package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +1 -1
- package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp +85 -0
- package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h +55 -0
- package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +8 -4
- package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +70 -24
- package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +24 -4
- package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +53 -1
- package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +2 -1
- package/RNWorklets.podspec +9 -4
- package/android/CMakeLists.txt +14 -36
- package/android/build.gradle +16 -33
- package/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java +149 -0
- package/android/src/{main/java → legacyBundling}/com/swmansion/worklets/WorkletsModule.java +17 -2
- package/android/src/main/cpp/worklets/android/WorkletsModule.cpp +49 -8
- package/android/src/main/cpp/worklets/android/WorkletsModule.h +17 -2
- package/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java +1 -1
- package/apple/worklets/apple/WorkletsMessageThread.mm +4 -0
- package/apple/worklets/apple/WorkletsModule.h +16 -1
- package/apple/worklets/apple/WorkletsModule.mm +29 -2
- package/bundleMode/index.d.ts +3 -0
- package/bundleMode/index.js +55 -0
- package/lib/module/PlatformChecker/PlatformChecker.js +8 -0
- package/lib/module/PlatformChecker/PlatformChecker.js.map +1 -0
- package/lib/module/PlatformChecker/index.js +17 -0
- package/lib/module/PlatformChecker/index.js.map +1 -0
- package/lib/module/WorkletsError.js +2 -1
- package/lib/module/WorkletsError.js.map +1 -1
- package/lib/module/WorkletsModule/JSWorklets.js +36 -4
- package/lib/module/WorkletsModule/JSWorklets.js.map +1 -1
- package/lib/module/WorkletsModule/NativeWorklets.js +35 -15
- package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -1
- package/lib/module/WorkletsModule/workletsModuleInstance.js +2 -2
- package/lib/module/WorkletsModule/workletsModuleInstance.js.map +1 -1
- package/lib/module/bundleUnpacker.js +47 -0
- package/lib/module/bundleUnpacker.js.map +1 -0
- package/lib/module/callGuard.js +30 -0
- package/lib/module/callGuard.js.map +1 -0
- package/lib/module/errors.js +30 -11
- package/lib/module/errors.js.map +1 -1
- package/lib/module/index.js +10 -7
- package/lib/module/index.js.map +1 -1
- package/lib/module/initializers.js +123 -103
- package/lib/module/initializers.js.map +1 -1
- package/lib/module/logger.js +15 -0
- package/lib/module/logger.js.map +1 -0
- package/lib/module/privateGlobals.d.js +0 -1
- package/lib/module/privateGlobals.d.js.map +1 -1
- package/lib/module/publicGlobals.js +5 -0
- package/lib/module/publicGlobals.js.map +1 -0
- package/lib/module/runLoop/mockedRequestAnimationFrame.js.map +1 -0
- package/lib/module/runLoop/requestAnimationFrame.js +50 -0
- package/lib/module/runLoop/requestAnimationFrame.js.map +1 -0
- package/lib/module/runLoop/setImmediatePolyfill.js +15 -0
- package/lib/module/runLoop/setImmediatePolyfill.js.map +1 -0
- package/lib/module/runLoop/setIntervalPolyfill.js +26 -0
- package/lib/module/runLoop/setIntervalPolyfill.js.map +1 -0
- package/lib/module/runLoop/setTimeoutPolyfill.js +32 -0
- package/lib/module/runLoop/setTimeoutPolyfill.js.map +1 -0
- package/lib/module/runtimes.js +6 -10
- package/lib/module/runtimes.js.map +1 -1
- package/lib/module/shareableMappingCache.js +1 -3
- package/lib/module/shareableMappingCache.js.map +1 -1
- package/lib/module/shareables.js +116 -34
- package/lib/module/shareables.js.map +1 -1
- package/lib/module/specs/index.js +2 -2
- package/lib/module/specs/index.js.map +1 -1
- package/lib/module/threads.js +49 -54
- package/lib/module/threads.js.map +1 -1
- package/lib/module/valueUnpacker.js +3 -3
- package/lib/module/valueUnpacker.js.map +1 -1
- package/lib/module/workletRuntimeEntry.js +30 -0
- package/lib/module/workletRuntimeEntry.js.map +1 -0
- package/lib/typescript/PlatformChecker/PlatformChecker.d.ts +5 -0
- package/lib/typescript/PlatformChecker/PlatformChecker.d.ts.map +1 -0
- package/lib/typescript/PlatformChecker/index.d.ts +10 -0
- package/lib/typescript/PlatformChecker/index.d.ts.map +1 -0
- package/lib/typescript/WorkletsError.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/JSWorklets.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/NativeWorklets.d.ts +1 -3
- package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts +1 -1
- package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts +1 -1
- package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts.map +1 -1
- package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +12 -2
- package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +1 -1
- package/lib/typescript/bundleUnpacker.d.ts +7 -0
- package/lib/typescript/bundleUnpacker.d.ts.map +1 -0
- package/lib/typescript/callGuard.d.ts +4 -0
- package/lib/typescript/callGuard.d.ts.map +1 -0
- package/lib/typescript/errors.d.ts +13 -5
- package/lib/typescript/errors.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/initializers.d.ts +16 -5
- package/lib/typescript/initializers.d.ts.map +1 -1
- package/lib/typescript/logger.d.ts +5 -0
- package/lib/typescript/logger.d.ts.map +1 -0
- package/lib/typescript/publicGlobals.d.ts +22 -0
- package/lib/typescript/publicGlobals.d.ts.map +1 -0
- package/lib/typescript/runLoop/mockedRequestAnimationFrame.d.ts.map +1 -0
- package/lib/typescript/runLoop/requestAnimationFrame.d.ts.map +1 -0
- package/lib/typescript/runLoop/setImmediatePolyfill.d.ts +2 -0
- package/lib/typescript/runLoop/setImmediatePolyfill.d.ts.map +1 -0
- package/lib/typescript/runLoop/setIntervalPolyfill.d.ts +2 -0
- package/lib/typescript/runLoop/setIntervalPolyfill.d.ts.map +1 -0
- package/lib/typescript/runLoop/setTimeoutPolyfill.d.ts +2 -0
- package/lib/typescript/runLoop/setTimeoutPolyfill.d.ts.map +1 -0
- package/lib/typescript/runtimes.d.ts.map +1 -1
- package/lib/typescript/shareableMappingCache.d.ts.map +1 -1
- package/lib/typescript/shareables.d.ts +3 -2
- package/lib/typescript/shareables.d.ts.map +1 -1
- package/lib/typescript/specs/NativeWorkletsModule.d.ts +1 -1
- package/lib/typescript/specs/NativeWorkletsModule.d.ts.map +1 -1
- package/lib/typescript/specs/index.d.ts +2 -2
- package/lib/typescript/specs/index.d.ts.map +1 -1
- package/lib/typescript/threads.d.ts.map +1 -1
- package/lib/typescript/workletRuntimeEntry.d.ts +14 -0
- package/lib/typescript/workletRuntimeEntry.d.ts.map +1 -0
- package/lib/typescript/workletTypes.d.ts +14 -3
- package/lib/typescript/workletTypes.d.ts.map +1 -1
- package/package.json +17 -8
- package/plugin/index.js +145 -52
- package/scripts/worklets_utils.rb +9 -0
- package/src/PlatformChecker/PlatformChecker.ts +7 -0
- package/src/PlatformChecker/index.ts +29 -0
- package/src/WorkletsError.ts +2 -1
- package/src/WorkletsModule/JSWorklets.ts +71 -4
- package/src/WorkletsModule/NativeWorklets.ts +83 -21
- package/src/WorkletsModule/workletsModuleInstance.ts +2 -2
- package/src/WorkletsModule/workletsModuleProxy.ts +49 -1
- package/src/bundleUnpacker.ts +75 -0
- package/src/callGuard.ts +33 -0
- package/src/errors.ts +35 -18
- package/src/index.ts +12 -12
- package/src/initializers.ts +143 -113
- package/src/logger.ts +16 -0
- package/src/privateGlobals.d.ts +22 -6
- package/src/publicGlobals.ts +26 -0
- package/src/runLoop/requestAnimationFrame.ts +67 -0
- package/src/runLoop/setImmediatePolyfill.ts +20 -0
- package/src/runLoop/setIntervalPolyfill.ts +38 -0
- package/src/runLoop/setTimeoutPolyfill.ts +40 -0
- package/src/runtimes.ts +6 -11
- package/src/shareableMappingCache.ts +1 -3
- package/src/shareables.ts +179 -65
- package/src/specs/NativeWorkletsModule.ts +1 -1
- package/src/specs/index.ts +5 -2
- package/src/threads.ts +75 -65
- package/src/valueUnpacker.ts +3 -3
- package/src/workletRuntimeEntry.ts +30 -0
- package/src/workletTypes.ts +22 -5
- package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp +0 -139
- package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h +0 -61
- package/android/src/paper/com/swmansion/worklets/NativeWorkletsModuleSpec.java +0 -26
- package/lib/module/PlatformChecker.js +0 -26
- package/lib/module/PlatformChecker.js.map +0 -1
- package/lib/module/animationFrameQueue/mockedRequestAnimationFrame.js.map +0 -1
- package/lib/module/animationFrameQueue/requestAnimationFrame.js +0 -36
- package/lib/module/animationFrameQueue/requestAnimationFrame.js.map +0 -1
- package/lib/module/logger/LogBox.js +0 -15
- package/lib/module/logger/LogBox.js.map +0 -1
- package/lib/module/logger/index.js +0 -5
- package/lib/module/logger/index.js.map +0 -1
- package/lib/module/logger/logger.js +0 -137
- package/lib/module/logger/logger.js.map +0 -1
- package/lib/typescript/PlatformChecker.d.ts +0 -6
- package/lib/typescript/PlatformChecker.d.ts.map +0 -1
- package/lib/typescript/animationFrameQueue/mockedRequestAnimationFrame.d.ts.map +0 -1
- package/lib/typescript/animationFrameQueue/requestAnimationFrame.d.ts.map +0 -1
- package/lib/typescript/logger/LogBox.d.ts +0 -32
- package/lib/typescript/logger/LogBox.d.ts.map +0 -1
- package/lib/typescript/logger/index.d.ts +0 -3
- package/lib/typescript/logger/index.d.ts.map +0 -1
- package/lib/typescript/logger/logger.d.ts +0 -52
- package/lib/typescript/logger/logger.d.ts.map +0 -1
- package/src/PlatformChecker.ts +0 -30
- package/src/animationFrameQueue/requestAnimationFrame.ts +0 -41
- package/src/logger/LogBox.ts +0 -55
- package/src/logger/index.ts +0 -3
- package/src/logger/logger.ts +0 -155
- /package/lib/module/{animationFrameQueue → runLoop}/mockedRequestAnimationFrame.js +0 -0
- /package/lib/typescript/{animationFrameQueue → runLoop}/mockedRequestAnimationFrame.d.ts +0 -0
- /package/lib/typescript/{animationFrameQueue → runLoop}/requestAnimationFrame.d.ts +0 -0
- /package/src/{animationFrameQueue → runLoop}/mockedRequestAnimationFrame.ts +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
1
|
'use strict';
|
|
3
2
|
|
|
4
3
|
import { WorkletsTurboModule } from "../specs/index.js";
|
|
@@ -13,26 +12,14 @@ class NativeWorklets {
|
|
|
13
12
|
#shareableTrue;
|
|
14
13
|
#shareableFalse;
|
|
15
14
|
constructor() {
|
|
16
|
-
if (global.__workletsModuleProxy === undefined) {
|
|
15
|
+
if (global.__workletsModuleProxy === undefined && !globalThis._WORKLET) {
|
|
17
16
|
WorkletsTurboModule?.installTurboModule();
|
|
18
17
|
}
|
|
19
18
|
if (global.__workletsModuleProxy === undefined) {
|
|
20
19
|
throw new WorkletsError(`Native part of Worklets doesn't seem to be initialized.
|
|
21
20
|
See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#native-part-of-reanimated-doesnt-seem-to-be-initialized for more details.`);
|
|
22
21
|
}
|
|
23
|
-
this.#workletsModuleProxy =
|
|
24
|
-
scheduleOnUI: global.__workletsModuleProxy.scheduleOnUI,
|
|
25
|
-
scheduleOnRuntime: global.__workletsModuleProxy.scheduleOnRuntime,
|
|
26
|
-
executeOnUIRuntimeSync: global.__workletsModuleProxy.executeOnUIRuntimeSync,
|
|
27
|
-
createWorkletRuntime: global.__workletsModuleProxy.createWorkletRuntime,
|
|
28
|
-
makeShareableClone: global.__workletsModuleProxy.makeShareableClone,
|
|
29
|
-
makeShareableString: global.__workletsModuleProxy.makeShareableString,
|
|
30
|
-
makeShareableNumber: global.__workletsModuleProxy.makeShareableNumber,
|
|
31
|
-
makeShareableBoolean: global.__workletsModuleProxy.makeShareableBoolean,
|
|
32
|
-
makeShareableBigInt: global.__workletsModuleProxy.makeShareableBigInt,
|
|
33
|
-
makeShareableUndefined: global.__workletsModuleProxy.makeShareableUndefined,
|
|
34
|
-
makeShareableNull: global.__workletsModuleProxy.makeShareableNull
|
|
35
|
-
};
|
|
22
|
+
this.#workletsModuleProxy = global.__workletsModuleProxy;
|
|
36
23
|
this.#shareableNull = this.#workletsModuleProxy.makeShareableNull();
|
|
37
24
|
this.#shareableUndefined = this.#workletsModuleProxy.makeShareableUndefined();
|
|
38
25
|
this.#shareableTrue = this.#workletsModuleProxy.makeShareableBoolean(true);
|
|
@@ -41,6 +28,9 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti
|
|
|
41
28
|
makeShareableClone(value, shouldPersistRemote, nativeStateSource) {
|
|
42
29
|
return this.#workletsModuleProxy.makeShareableClone(value, shouldPersistRemote, nativeStateSource);
|
|
43
30
|
}
|
|
31
|
+
makeShareableImport(from, to) {
|
|
32
|
+
return this.#workletsModuleProxy.makeShareableImport(from, to);
|
|
33
|
+
}
|
|
44
34
|
makeShareableString(str) {
|
|
45
35
|
return this.#workletsModuleProxy.makeShareableString(str);
|
|
46
36
|
}
|
|
@@ -59,6 +49,33 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti
|
|
|
59
49
|
makeShareableNull() {
|
|
60
50
|
return this.#shareableNull;
|
|
61
51
|
}
|
|
52
|
+
makeShareableTurboModuleLike(props, proto) {
|
|
53
|
+
return this.#workletsModuleProxy.makeShareableTurboModuleLike(props, proto);
|
|
54
|
+
}
|
|
55
|
+
makeShareableObject(obj, shouldRetainRemote, nativeStateSource) {
|
|
56
|
+
return this.#workletsModuleProxy.makeShareableObject(obj, shouldRetainRemote, nativeStateSource);
|
|
57
|
+
}
|
|
58
|
+
makeShareableHostObject(obj) {
|
|
59
|
+
return this.#workletsModuleProxy.makeShareableHostObject(obj);
|
|
60
|
+
}
|
|
61
|
+
makeShareableArray(array, shouldRetainRemote) {
|
|
62
|
+
return this.#workletsModuleProxy.makeShareableArray(array, shouldRetainRemote);
|
|
63
|
+
}
|
|
64
|
+
makeShareableMap(keys, values) {
|
|
65
|
+
return this.#workletsModuleProxy.makeShareableMap(keys, values);
|
|
66
|
+
}
|
|
67
|
+
makeShareableSet(values) {
|
|
68
|
+
return this.#workletsModuleProxy.makeShareableSet(values);
|
|
69
|
+
}
|
|
70
|
+
makeShareableInitializer(obj) {
|
|
71
|
+
return this.#workletsModuleProxy.makeShareableInitializer(obj);
|
|
72
|
+
}
|
|
73
|
+
makeShareableFunction(func) {
|
|
74
|
+
return this.#workletsModuleProxy.makeShareableFunction(func);
|
|
75
|
+
}
|
|
76
|
+
makeShareableWorklet(worklet, shouldPersistRemote) {
|
|
77
|
+
return this.#workletsModuleProxy.makeShareableWorklet(worklet, shouldPersistRemote);
|
|
78
|
+
}
|
|
62
79
|
scheduleOnUI(shareable) {
|
|
63
80
|
return this.#workletsModuleProxy.scheduleOnUI(shareable);
|
|
64
81
|
}
|
|
@@ -71,5 +88,8 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti
|
|
|
71
88
|
scheduleOnRuntime(workletRuntime, shareableWorklet) {
|
|
72
89
|
return this.#workletsModuleProxy.scheduleOnRuntime(workletRuntime, shareableWorklet);
|
|
73
90
|
}
|
|
91
|
+
reportFatalErrorOnJS(message, stack, name, jsEngine) {
|
|
92
|
+
return this.#workletsModuleProxy.reportFatalErrorOnJS(message, stack, name, jsEngine);
|
|
93
|
+
}
|
|
74
94
|
}
|
|
75
95
|
//# sourceMappingURL=NativeWorklets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WorkletsTurboModule","WorkletsError","createNativeWorkletsModule","NativeWorklets","workletsModuleProxy","shareableUndefined","shareableNull","shareableTrue","shareableFalse","constructor","global","__workletsModuleProxy","undefined","
|
|
1
|
+
{"version":3,"names":["WorkletsTurboModule","WorkletsError","createNativeWorkletsModule","NativeWorklets","workletsModuleProxy","shareableUndefined","shareableNull","shareableTrue","shareableFalse","constructor","global","__workletsModuleProxy","undefined","globalThis","_WORKLET","installTurboModule","makeShareableNull","makeShareableUndefined","makeShareableBoolean","makeShareableClone","value","shouldPersistRemote","nativeStateSource","makeShareableImport","from","to","makeShareableString","str","makeShareableNumber","num","bool","makeShareableBigInt","bigInt","makeShareableTurboModuleLike","props","proto","makeShareableObject","obj","shouldRetainRemote","makeShareableHostObject","makeShareableArray","array","makeShareableMap","keys","values","makeShareableSet","makeShareableInitializer","makeShareableFunction","func","makeShareableWorklet","worklet","scheduleOnUI","shareable","executeOnUIRuntimeSync","createWorkletRuntime","name","initializer","scheduleOnRuntime","workletRuntime","shareableWorklet","reportFatalErrorOnJS","message","stack","jsEngine"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { SHOULD_BE_USE_WEB } from "../PlatformChecker/index.js";
|
|
4
4
|
import { createJSWorkletsModule } from "./JSWorklets.js";
|
|
5
5
|
import { createNativeWorkletsModule } from "./NativeWorklets.js";
|
|
6
|
-
export const WorkletsModule =
|
|
6
|
+
export const WorkletsModule = SHOULD_BE_USE_WEB ? createJSWorkletsModule() : createNativeWorkletsModule();
|
|
7
7
|
//# sourceMappingURL=workletsModuleInstance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["SHOULD_BE_USE_WEB","createJSWorkletsModule","createNativeWorkletsModule","WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/workletsModuleInstance.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,iBAAiB,QAAQ,6BAAoB;AACtD,SAASC,sBAAsB,QAAQ,iBAAc;AACrD,SAASC,0BAA0B,QAAQ,qBAAkB;AAE7D,OAAO,MAAMC,cAAc,GAAGH,iBAAiB,GAC3CC,sBAAsB,CAAC,CAAC,GACxBC,0BAA0B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import { logger } from "./logger.js";
|
|
4
|
+
import { WorkletsError } from "./WorkletsError.js";
|
|
5
|
+
const handleCache = new WeakMap();
|
|
6
|
+
export function bundleValueUnpacker(objectToUnpack, category, remoteFunctionName) {
|
|
7
|
+
const workletHash = objectToUnpack.__workletHash;
|
|
8
|
+
if (workletHash !== undefined) {
|
|
9
|
+
return getWorklet(workletHash, objectToUnpack.__closure);
|
|
10
|
+
} else if (objectToUnpack.__init !== undefined) {
|
|
11
|
+
let value = handleCache.get(objectToUnpack);
|
|
12
|
+
if (value === undefined) {
|
|
13
|
+
value = objectToUnpack.__init();
|
|
14
|
+
handleCache.set(objectToUnpack, value);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
} else if (category === 'RemoteFunction') {
|
|
18
|
+
const remoteFunctionHolder = () => {
|
|
19
|
+
const label = remoteFunctionName ? `function \`${remoteFunctionName}\`` : 'anonymous function';
|
|
20
|
+
throw new WorkletsError(`Tried to synchronously call a non-worklet ${label} on the UI thread.
|
|
21
|
+
See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.`);
|
|
22
|
+
};
|
|
23
|
+
remoteFunctionHolder.__remoteFunction = objectToUnpack;
|
|
24
|
+
return remoteFunctionHolder;
|
|
25
|
+
} else {
|
|
26
|
+
throw new WorkletsError(`Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString(objectToUnpack)}".`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function getWorklet(workletHash, closureVariables) {
|
|
30
|
+
let worklet;
|
|
31
|
+
if (__DEV__) {
|
|
32
|
+
try {
|
|
33
|
+
worklet = getWorkletFromMetroRequire(workletHash, closureVariables);
|
|
34
|
+
} catch (_e) {
|
|
35
|
+
logger.error('Unable to resolve worklet with hash' + workletHash + 'try to reload the app.');
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
worklet = getWorkletFromMetroRequire(workletHash, closureVariables);
|
|
39
|
+
}
|
|
40
|
+
return worklet;
|
|
41
|
+
}
|
|
42
|
+
const metroRequire = globalThis.__r;
|
|
43
|
+
function getWorkletFromMetroRequire(workletHash, closureVariables) {
|
|
44
|
+
const factory = metroRequire(workletHash).default;
|
|
45
|
+
return factory(closureVariables);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=bundleUnpacker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["logger","WorkletsError","handleCache","WeakMap","bundleValueUnpacker","objectToUnpack","category","remoteFunctionName","workletHash","__workletHash","undefined","getWorklet","__closure","__init","value","get","set","remoteFunctionHolder","label","__remoteFunction","globalThis","_toString","closureVariables","worklet","__DEV__","getWorkletFromMetroRequire","_e","error","metroRequire","__r","factory","default"],"sourceRoot":"../../src","sources":["bundleUnpacker.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,MAAM,QAAQ,aAAU;AACjC,SAASC,aAAa,QAAQ,oBAAiB;AAG/C,MAAMC,WAAW,GAAG,IAAIC,OAAO,CAA2B,CAAC;AAE3D,OAAO,SAASC,mBAAmBA,CACjCC,cAA8B,EAC9BC,QAAiB,EACjBC,kBAA2B,EAClB;EACT,MAAMC,WAAW,GAAGH,cAAc,CAACI,aAAa;EAChD,IAAID,WAAW,KAAKE,SAAS,EAAE;IAC7B,OAAOC,UAAU,CAACH,WAAW,EAAEH,cAAc,CAACO,SAAS,CAAC;EAC1D,CAAC,MAAM,IAAIP,cAAc,CAACQ,MAAM,KAAKH,SAAS,EAAE;IAC9C,IAAII,KAAK,GAAGZ,WAAW,CAACa,GAAG,CAACV,cAAc,CAAC;IAC3C,IAAIS,KAAK,KAAKJ,SAAS,EAAE;MACvBI,KAAK,GAAGT,cAAc,CAACQ,MAAM,CAAC,CAAC;MAC/BX,WAAW,CAACc,GAAG,CAACX,cAAc,EAAES,KAAK,CAAC;IACxC;IACA,OAAOA,KAAK;EACd,CAAC,MAAM,IAAIR,QAAQ,KAAK,gBAAgB,EAAE;IACxC,MAAMW,oBAAoB,GAAGA,CAAA,KAAM;MACjC,MAAMC,KAAK,GAAGX,kBAAkB,GAC5B,cAAcA,kBAAkB,IAAI,GACpC,oBAAoB;MACxB,MAAM,IAAIN,aAAa,CAAC,6CAA6CiB,KAAK;AAChF,yKAAyK,CAAC;IACtK,CAAC;IACDD,oBAAoB,CAACE,gBAAgB,GAAGd,cAAc;IACtD,OAAOY,oBAAoB;EAC7B,CAAC,MAAM;IACL,MAAM,IAAIhB,aAAa,CACrB,0BAA0BK,QAAQ,wCAAwCc,UAAU,CAACC,SAAS,CAC5FhB,cACF,CAAC,IACH,CAAC;EACH;AACF;AAEA,SAASM,UAAUA,CACjBH,WAAmB,EACnBc,gBAAyC,EACZ;EAC7B,IAAIC,OAAO;EACX,IAAIC,OAAO,EAAE;IACX,IAAI;MACFD,OAAO,GAAGE,0BAA0B,CAACjB,WAAW,EAAEc,gBAAgB,CAAC;IACrE,CAAC,CAAC,OAAOI,EAAE,EAAE;MACX1B,MAAM,CAAC2B,KAAK,CACV,qCAAqC,GACnCnB,WAAW,GACX,wBACJ,CAAC;IACH;EACF,CAAC,MAAM;IACLe,OAAO,GAAGE,0BAA0B,CAACjB,WAAW,EAAEc,gBAAgB,CAAC;EACrE;EACA,OAAOC,OAAO;AAChB;AAEA,MAAMK,YAAY,GAAGR,UAAU,CAACS,GAAG;AAEnC,SAASJ,0BAA0BA,CACjCjB,WAAmB,EACnBc,gBAAyC,EACxB;EACjB,MAAMQ,OAAO,GAAGF,YAAY,CAACpB,WAAW,CAAC,CAACuB,OAAyB;EACnE,OAAOD,OAAO,CAACR,gBAAgB,CAAC;AAClC","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/** Used only with debug builds. */
|
|
4
|
+
export function callGuardDEV(fn, ...args) {
|
|
5
|
+
'worklet';
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
return fn(...args);
|
|
9
|
+
} catch (error) {
|
|
10
|
+
if (globalThis.__workletsModuleProxy) {
|
|
11
|
+
const {
|
|
12
|
+
message,
|
|
13
|
+
stack,
|
|
14
|
+
name,
|
|
15
|
+
jsEngine
|
|
16
|
+
} = error;
|
|
17
|
+
globalThis.__workletsModuleProxy.reportFatalErrorOnJS(message, stack ?? '', name ?? 'WorkletsError', jsEngine ?? 'Worklets');
|
|
18
|
+
} else {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function setupCallGuard() {
|
|
24
|
+
'worklet';
|
|
25
|
+
|
|
26
|
+
if (!globalThis.__callGuardDEV) {
|
|
27
|
+
globalThis.__callGuardDEV = callGuardDEV;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=callGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["callGuardDEV","fn","args","error","globalThis","__workletsModuleProxy","message","stack","name","jsEngine","reportFatalErrorOnJS","setupCallGuard","__callGuardDEV"],"sourceRoot":"../../src","sources":["callGuard.ts"],"mappings":"AAAA,YAAY;;AAIZ;AACA,OAAO,SAASA,YAAYA,CAC1BC,EAAkC,EAClC,GAAGC,IAAU,EACO;EACpB,SAAS;;EACT,IAAI;IACF,OAAOD,EAAE,CAAC,GAAGC,IAAI,CAAC;EACpB,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,IAAIC,UAAU,CAACC,qBAAqB,EAAE;MACpC,MAAM;QAAEC,OAAO;QAAEC,KAAK;QAAEC,IAAI;QAAEC;MAAS,CAAC,GAAGN,KAAgB;MAC3DC,UAAU,CAACC,qBAAqB,CAACK,oBAAoB,CACnDJ,OAAO,EACPC,KAAK,IAAI,EAAE,EACXC,IAAI,IAAI,eAAe,EACvBC,QAAQ,IAAI,UACd,CAAC;IACH,CAAC,MAAM;MACL,MAAMN,KAAK;IACb;EACF;AACF;AAEA,OAAO,SAASQ,cAAcA,CAAA,EAAG;EAC/B,SAAS;;EACT,IAAI,CAACP,UAAU,CAACQ,cAAc,EAAE;IAC9BR,UAAU,CAACQ,cAAc,GAAGZ,YAAY;EAC1C;AACF","ignoreList":[]}
|
package/lib/module/errors.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
import { WorkletsError } from "./WorkletsError.js";
|
|
3
4
|
const _workletStackDetails = new Map();
|
|
4
5
|
export function registerWorkletStackDetails(hash, stackDetails) {
|
|
5
6
|
_workletStackDetails.set(hash, stackDetails);
|
|
@@ -16,6 +17,9 @@ function getBundleOffset(error) {
|
|
|
16
17
|
return ['unknown', 0, 0];
|
|
17
18
|
}
|
|
18
19
|
function processStack(stack) {
|
|
20
|
+
if (stack === '' || stack === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
19
23
|
const workletStackEntries = stack.match(/worklet_(\d+):(\d+):(\d+)/g);
|
|
20
24
|
let result = stack;
|
|
21
25
|
workletStackEntries?.forEach(match => {
|
|
@@ -32,19 +36,34 @@ function processStack(stack) {
|
|
|
32
36
|
});
|
|
33
37
|
return result;
|
|
34
38
|
}
|
|
35
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Remote error is an error coming from a Worklet Runtime that we bubble up to
|
|
41
|
+
* the RN Runtime.
|
|
42
|
+
*/
|
|
43
|
+
export function reportFatalRemoteError({
|
|
36
44
|
message,
|
|
37
45
|
stack,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const error = new
|
|
46
|
+
name,
|
|
47
|
+
jsEngine
|
|
48
|
+
}, force) {
|
|
49
|
+
const error = new WorkletsError();
|
|
42
50
|
error.message = message;
|
|
43
|
-
error.stack =
|
|
44
|
-
error.name =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
error.stack = processStack(stack);
|
|
52
|
+
error.name = name;
|
|
53
|
+
error.jsEngine = jsEngine;
|
|
54
|
+
if (force) {
|
|
55
|
+
throw error;
|
|
56
|
+
} else {
|
|
57
|
+
// @ts-expect-error React Native's `ErrorUtils` are hidden from the global scope.
|
|
58
|
+
globalThis.ErrorUtils.reportFatalError(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Registers `reportFatalRemoteError` function in global scope to allow to
|
|
64
|
+
* invoke it from C++.
|
|
65
|
+
*/
|
|
66
|
+
export function registerReportFatalRemoteError() {
|
|
67
|
+
globalThis.__reportFatalRemoteError = reportFatalRemoteError;
|
|
49
68
|
}
|
|
50
69
|
//# sourceMappingURL=errors.js.map
|
package/lib/module/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_workletStackDetails","Map","registerWorkletStackDetails","hash","stackDetails","set","getBundleOffset","error","frame","stack","split","parsedFrame","exec","file","line","col","Number","processStack","workletStackEntries","match","result","forEach","origLine","origCol","map","errorDetails","get","lineOffset","colOffset","bundleFile","bundleLine","bundleCol","replace","
|
|
1
|
+
{"version":3,"names":["WorkletsError","_workletStackDetails","Map","registerWorkletStackDetails","hash","stackDetails","set","getBundleOffset","error","frame","stack","split","parsedFrame","exec","file","line","col","Number","processStack","undefined","workletStackEntries","match","result","forEach","origLine","origCol","map","errorDetails","get","lineOffset","colOffset","bundleFile","bundleLine","bundleCol","replace","reportFatalRemoteError","message","name","jsEngine","force","globalThis","ErrorUtils","reportFatalError","registerReportFatalRemoteError","__reportFatalRemoteError"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,oBAAiB;AAG/C,MAAMC,oBAAoB,GAAG,IAAIC,GAAG,CAA8B,CAAC;AAEnE,OAAO,SAASC,2BAA2BA,CACzCC,IAAY,EACZC,YAAiC,EACjC;EACAJ,oBAAoB,CAACK,GAAG,CAACF,IAAI,EAAEC,YAAY,CAAC;AAC9C;AAEA,SAASE,eAAeA,CAACC,KAAY,EAA4B;EAC/D,MAAMC,KAAK,GAAGD,KAAK,CAACE,KAAK,EAAEC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC3C,IAAIF,KAAK,EAAE;IACT,MAAMG,WAAW,GAAG,sBAAsB,CAACC,IAAI,CAACJ,KAAK,CAAC;IACtD,IAAIG,WAAW,EAAE;MACf,MAAM,GAAGE,IAAI,EAAEC,IAAI,EAAEC,GAAG,CAAC,GAAGJ,WAAW;MACvC,OAAO,CAACE,IAAI,EAAEG,MAAM,CAACF,IAAI,CAAC,EAAEE,MAAM,CAACD,GAAG,CAAC,CAAC;IAC1C;EACF;EACA,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B;AAEA,SAASE,YAAYA,CAACR,KAAc,EAAsB;EACxD,IAAIA,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAKS,SAAS,EAAE;IACvC,OAAOA,SAAS;EAClB;EACA,MAAMC,mBAAmB,GAAGV,KAAK,CAACW,KAAK,CAAC,4BAA4B,CAAC;EACrE,IAAIC,MAAM,GAAGZ,KAAK;EAClBU,mBAAmB,EAAEG,OAAO,CAAEF,KAAK,IAAK;IACtC,MAAM,GAAGjB,IAAI,EAAEoB,QAAQ,EAAEC,OAAO,CAAC,GAAGJ,KAAK,CAACV,KAAK,CAAC,KAAK,CAAC,CAACe,GAAG,CAACT,MAAM,CAAC;IAClE,MAAMU,YAAY,GAAG1B,oBAAoB,CAAC2B,GAAG,CAACxB,IAAI,CAAC;IACnD,IAAI,CAACuB,YAAY,EAAE;MACjB;IACF;IACA,MAAM,CAACnB,KAAK,EAAEqB,UAAU,EAAEC,SAAS,CAAC,GAAGH,YAAY;IACnD,MAAM,CAACI,UAAU,EAAEC,UAAU,EAAEC,SAAS,CAAC,GAAG1B,eAAe,CAACC,KAAK,CAAC;IAClE,MAAMO,IAAI,GAAGS,QAAQ,GAAGQ,UAAU,GAAGH,UAAU;IAC/C,MAAMb,GAAG,GAAGS,OAAO,GAAGQ,SAAS,GAAGH,SAAS;IAE3CR,MAAM,GAAGA,MAAM,CAACY,OAAO,CAACb,KAAK,EAAE,GAAGU,UAAU,IAAIhB,IAAI,IAAIC,GAAG,EAAE,CAAC;EAChE,CAAC,CAAC;EACF,OAAOM,MAAM;AACf;AAMA;AACA;AACA;AACA;AACA,OAAO,SAASa,sBAAsBA,CACpC;EAAEC,OAAO;EAAE1B,KAAK;EAAE2B,IAAI;EAAEC;AAAkB,CAAC,EAC3CC,KAAc,EACR;EACN,MAAM/B,KAAK,GAAG,IAAIR,aAAa,CAAC,CAAY;EAC5CQ,KAAK,CAAC4B,OAAO,GAAGA,OAAO;EACvB5B,KAAK,CAACE,KAAK,GAAGQ,YAAY,CAACR,KAAK,CAAC;EACjCF,KAAK,CAAC6B,IAAI,GAAGA,IAAI;EACjB7B,KAAK,CAAC8B,QAAQ,GAAGA,QAAQ;EACzB,IAAIC,KAAK,EAAE;IACT,MAAM/B,KAAK;EACb,CAAC,MAAM;IACL;IACAgC,UAAU,CAACC,UAAU,CAACC,gBAAgB,CAAClC,KAAK,CAAC;EAC/C;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASmC,8BAA8BA,CAAA,EAAG;EAC/CH,UAAU,CAACI,wBAAwB,GAAGT,sBAAsB;AAC9D","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// universal source of truth for it.
|
|
8
|
-
initializeUIRuntime(WorkletsModule);
|
|
9
|
-
export { logger, LogLevel, registerLoggerConfig, updateLoggerConfig } from "./logger/index.js";
|
|
3
|
+
import "./publicGlobals.js";
|
|
4
|
+
import { init } from "./initializers.js";
|
|
5
|
+
import { bundleModeInit } from "./workletRuntimeEntry.js";
|
|
6
|
+
init();
|
|
10
7
|
export { createWorkletRuntime, runOnRuntime } from "./runtimes.js";
|
|
11
8
|
export { shareableMappingCache } from "./shareableMappingCache.js";
|
|
12
9
|
export { makeShareable, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive } from "./shareables.js";
|
|
13
10
|
export { callMicrotasks, executeOnUIRuntimeSync, runOnJS, runOnUI, runOnUIAsync } from "./threads.js";
|
|
14
11
|
export { isWorkletFunction } from "./workletFunction.js";
|
|
15
12
|
export { WorkletsModule } from "./WorkletsModule/index.js";
|
|
13
|
+
// @ts-expect-error We must trick the bundler to include
|
|
14
|
+
// the `workletRuntimeEntry` file the way it cannot optimize it out.
|
|
15
|
+
if (globalThis._ALWAYS_FALSE) {
|
|
16
|
+
// Bundle mode.
|
|
17
|
+
bundleModeInit();
|
|
18
|
+
}
|
|
16
19
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["init","bundleModeInit","createWorkletRuntime","runOnRuntime","shareableMappingCache","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","callMicrotasks","executeOnUIRuntimeSync","runOnJS","runOnUI","runOnUIAsync","isWorkletFunction","WorkletsModule","globalThis","_ALWAYS_FALSE"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,oBAAiB;AAExB,SAASA,IAAI,QAAQ,mBAAgB;AACrC,SAASC,cAAc,QAAQ,0BAAuB;AAEtDD,IAAI,CAAC,CAAC;AAEN,SAASE,oBAAoB,EAAEC,YAAY,QAAQ,eAAY;AAC/D,SAASC,qBAAqB,QAAQ,4BAAyB;AAC/D,SACEC,aAAa,EACbC,+BAA+B,EAC/BC,2BAA2B,QACtB,iBAAc;AACrB,SACEC,cAAc,EACdC,sBAAsB,EACtBC,OAAO,EACPC,OAAO,EACPC,YAAY,QACP,cAAW;AAClB,SAASC,iBAAiB,QAAQ,sBAAmB;AAErD,SAASC,cAAc,QAAQ,2BAAkB;AAQjD;AACA;AACA,IAAIC,UAAU,CAACC,aAAa,EAAE;EAC5B;EACAf,cAAc,CAAC,CAAC;AAClB","ignoreList":[]}
|
|
@@ -1,84 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { bundleValueUnpacker } from "./bundleUnpacker.js";
|
|
4
|
+
import { setupCallGuard } from "./callGuard.js";
|
|
5
|
+
import { registerReportFatalRemoteError } from "./errors.js";
|
|
6
|
+
import { IS_JEST, SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js";
|
|
7
|
+
import { mockedRequestAnimationFrame } from "./runLoop/mockedRequestAnimationFrame.js";
|
|
8
|
+
import { setupRequestAnimationFrame } from "./runLoop/requestAnimationFrame.js";
|
|
9
|
+
import { setupSetImmediate } from "./runLoop/setImmediatePolyfill.js";
|
|
10
|
+
import { setupSetInterval } from "./runLoop/setIntervalPolyfill.js";
|
|
11
|
+
import { setupSetTimeout } from "./runLoop/setTimeoutPolyfill.js";
|
|
8
12
|
import { executeOnUIRuntimeSync, runOnJS, setupMicrotasks } from "./threads.js";
|
|
9
13
|
import { isWorkletFunction } from "./workletFunction.js";
|
|
10
14
|
import { registerWorkletsError, WorkletsError } from "./WorkletsError.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// Override the logFunction implementation with the one that adds logs
|
|
15
|
-
// with better stack traces to the LogBox (need to override it after `runOnJS`
|
|
16
|
-
// is defined).
|
|
17
|
-
function overrideLogFunctionImplementation() {
|
|
18
|
-
'worklet';
|
|
19
|
-
|
|
20
|
-
replaceLoggerImplementation(data => {
|
|
21
|
-
'worklet';
|
|
22
|
-
|
|
23
|
-
runOnJS(logToLogBoxAndConsole)(data);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Register logger config and replace the log function implementation in
|
|
28
|
-
// the React runtime global scope
|
|
29
|
-
registerLoggerConfig(DEFAULT_LOGGER_CONFIG);
|
|
30
|
-
overrideLogFunctionImplementation();
|
|
31
|
-
|
|
32
|
-
// this is for web implementation
|
|
33
|
-
if (SHOULD_BE_USE_WEB) {
|
|
34
|
-
global._WORKLET = false;
|
|
35
|
-
global._log = console.log;
|
|
36
|
-
global._getAnimationTimestamp = () => performance.now();
|
|
37
|
-
} else {
|
|
38
|
-
if (__DEV__) {
|
|
39
|
-
const testWorklet = () => {
|
|
40
|
-
'worklet';
|
|
41
|
-
};
|
|
42
|
-
if (!isWorkletFunction(testWorklet)) {
|
|
43
|
-
throw new WorkletsError(`Failed to create a worklet. See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#failed-to-create-a-worklet for more details.`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Register WorkletsError and logger config in the UI runtime global scope.
|
|
47
|
-
// (we are using `executeOnUIRuntimeSync` here to make sure that the changes
|
|
48
|
-
// are applied before any async operations are executed on the UI runtime)
|
|
49
|
-
executeOnUIRuntimeSync(registerWorkletsError)();
|
|
50
|
-
executeOnUIRuntimeSync(registerLoggerConfig)(DEFAULT_LOGGER_CONFIG);
|
|
51
|
-
executeOnUIRuntimeSync(overrideLogFunctionImplementation)();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// callGuard is only used with debug builds
|
|
55
|
-
export function callGuardDEV(fn, ...args) {
|
|
56
|
-
'worklet';
|
|
57
|
-
|
|
58
|
-
try {
|
|
59
|
-
return fn(...args);
|
|
60
|
-
} catch (e) {
|
|
61
|
-
if (global.__ErrorUtils) {
|
|
62
|
-
global.__ErrorUtils.reportFatalError(e);
|
|
63
|
-
} else {
|
|
64
|
-
throw e;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
export function setupCallGuard() {
|
|
69
|
-
'worklet';
|
|
70
|
-
|
|
71
|
-
global.__callGuardDEV = callGuardDEV;
|
|
72
|
-
global.__ErrorUtils = {
|
|
73
|
-
reportFatalError: error => {
|
|
74
|
-
runOnJS(reportFatalErrorOnJS)({
|
|
75
|
-
message: error.message,
|
|
76
|
-
moduleName: 'Worklets',
|
|
77
|
-
stack: error.stack
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
}
|
|
15
|
+
import { WorkletsModule } from "./WorkletsModule/index.js";
|
|
16
|
+
let capturableConsole;
|
|
82
17
|
|
|
83
18
|
/**
|
|
84
19
|
* Currently there seems to be a bug in the JSI layer which causes a crash when
|
|
@@ -93,7 +28,10 @@ export function setupCallGuard() {
|
|
|
93
28
|
* we don't copy the methods as they are in the original console object, we copy
|
|
94
29
|
* JavaScript wrappers instead.
|
|
95
30
|
*/
|
|
96
|
-
function
|
|
31
|
+
export function getMemorySafeCapturableConsole() {
|
|
32
|
+
if (capturableConsole) {
|
|
33
|
+
return capturableConsole;
|
|
34
|
+
}
|
|
97
35
|
const consoleCopy = Object.fromEntries(Object.entries(console).map(([methodName, method]) => {
|
|
98
36
|
const methodWrapper = function methodWrapper(...args) {
|
|
99
37
|
return method(...args);
|
|
@@ -113,34 +51,87 @@ function createMemorySafeCapturableConsole() {
|
|
|
113
51
|
}
|
|
114
52
|
return [methodName, methodWrapper];
|
|
115
53
|
}));
|
|
54
|
+
capturableConsole = consoleCopy;
|
|
116
55
|
return consoleCopy;
|
|
117
56
|
}
|
|
118
|
-
|
|
119
|
-
// We really have to create a copy of console here. Function runOnJS we use on elements inside
|
|
120
|
-
// this object makes it not configurable
|
|
121
|
-
const capturableConsole = createMemorySafeCapturableConsole();
|
|
122
|
-
export function setupConsole() {
|
|
57
|
+
export function setupConsole(boundCapturableConsole) {
|
|
123
58
|
'worklet';
|
|
124
59
|
|
|
125
60
|
// @ts-ignore TypeScript doesn't like that there are missing methods in console object, but we don't provide all the methods for the UI runtime console version
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
info: runOnJS(capturableConsole.info)
|
|
134
|
-
/* eslint-enable @typescript-eslint/unbound-method */
|
|
61
|
+
globalThis.console = {
|
|
62
|
+
assert: runOnJS(boundCapturableConsole.assert),
|
|
63
|
+
debug: runOnJS(boundCapturableConsole.debug),
|
|
64
|
+
log: runOnJS(boundCapturableConsole.log),
|
|
65
|
+
warn: runOnJS(boundCapturableConsole.warn),
|
|
66
|
+
error: runOnJS(boundCapturableConsole.error),
|
|
67
|
+
info: runOnJS(boundCapturableConsole.info)
|
|
135
68
|
};
|
|
136
69
|
}
|
|
137
|
-
|
|
138
|
-
|
|
70
|
+
let initialized = false;
|
|
71
|
+
export function init() {
|
|
72
|
+
if (initialized) {
|
|
139
73
|
return;
|
|
140
74
|
}
|
|
141
|
-
|
|
142
|
-
|
|
75
|
+
initialized = true;
|
|
76
|
+
initializeRuntime();
|
|
77
|
+
if (SHOULD_BE_USE_WEB) {
|
|
78
|
+
initializeRuntimeOnWeb();
|
|
79
|
+
}
|
|
80
|
+
if (globalThis._WORKLET) {
|
|
81
|
+
initializeWorkletRuntime();
|
|
82
|
+
} else {
|
|
83
|
+
initializeRNRuntime();
|
|
84
|
+
if (!SHOULD_BE_USE_WEB) {
|
|
85
|
+
installRNBindingsOnUIRuntime();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** A function that should be run on any kind of runtime. */
|
|
91
|
+
function initializeRuntime() {
|
|
92
|
+
if (globalThis._WORKLETS_BUNDLE_MODE) {
|
|
93
|
+
globalThis.__valueUnpacker = bundleValueUnpacker;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** A function that should be run only on React Native runtime. */
|
|
98
|
+
function initializeRNRuntime() {
|
|
99
|
+
if (__DEV__) {
|
|
100
|
+
const testWorklet = () => {
|
|
101
|
+
'worklet';
|
|
102
|
+
};
|
|
103
|
+
if (!isWorkletFunction(testWorklet)) {
|
|
104
|
+
throw new WorkletsError(`Failed to create a worklet. See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#failed-to-create-a-worklet for more details.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
registerReportFatalRemoteError();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** A function that should be run only on Worklet runtimes. */
|
|
111
|
+
function initializeWorkletRuntime() {
|
|
112
|
+
if (globalThis._WORKLETS_BUNDLE_MODE) {
|
|
113
|
+
setupCallGuard();
|
|
114
|
+
if (__DEV__) {
|
|
115
|
+
/**
|
|
116
|
+
* Temporary workaround for Metro bundler. We must implement a dummy
|
|
117
|
+
* Refresh module to prevent Metro from throwing irrelevant errors.
|
|
118
|
+
*/
|
|
119
|
+
|
|
120
|
+
const Refresh = new Proxy({}, {
|
|
121
|
+
get() {
|
|
122
|
+
return () => {};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
globalThis.__r.Refresh = Refresh;
|
|
126
|
+
}
|
|
143
127
|
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** A function that should be run only on RN Runtime in web implementation. */
|
|
131
|
+
function initializeRuntimeOnWeb() {
|
|
132
|
+
globalThis._WORKLET = false;
|
|
133
|
+
globalThis._log = console.log;
|
|
134
|
+
globalThis._getAnimationTimestamp = () => performance.now();
|
|
144
135
|
if (IS_JEST) {
|
|
145
136
|
// requestAnimationFrame react-native jest's setup is incorrect as it polyfills
|
|
146
137
|
// the method directly using setTimeout, therefore the callback doesn't get the
|
|
@@ -150,15 +141,44 @@ export function initializeUIRuntime(WorkletsModule) {
|
|
|
150
141
|
// @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number
|
|
151
142
|
globalThis.requestAnimationFrame = mockedRequestAnimationFrame;
|
|
152
143
|
}
|
|
153
|
-
|
|
154
|
-
executeOnUIRuntimeSync(() => {
|
|
155
|
-
'worklet';
|
|
144
|
+
}
|
|
156
145
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
146
|
+
/**
|
|
147
|
+
* A function that should be run on the RN Runtime to configure the UI Runtime
|
|
148
|
+
* with callback bindings.
|
|
149
|
+
*/
|
|
150
|
+
function installRNBindingsOnUIRuntime() {
|
|
151
|
+
if (!WorkletsModule) {
|
|
152
|
+
throw new WorkletsError('Worklets are trying to initialize the UI runtime without a valid WorkletsModule');
|
|
162
153
|
}
|
|
154
|
+
const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole();
|
|
155
|
+
if (!globalThis._WORKLETS_BUNDLE_MODE) {
|
|
156
|
+
/** In bundle mode Runtimes setup their callGuard themselves. */
|
|
157
|
+
executeOnUIRuntimeSync(setupCallGuard)();
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Register WorkletsError in the UI runtime global scope. (we are using
|
|
161
|
+
* `executeOnUIRuntimeSync` here to make sure that the changes are applied
|
|
162
|
+
* before any async operations are executed on the UI runtime).
|
|
163
|
+
*
|
|
164
|
+
* There's no need to register the error in bundle mode.
|
|
165
|
+
*/
|
|
166
|
+
executeOnUIRuntimeSync(registerWorkletsError)();
|
|
167
|
+
}
|
|
168
|
+
executeOnUIRuntimeSync(() => {
|
|
169
|
+
'worklet';
|
|
170
|
+
|
|
171
|
+
setupConsole(runtimeBoundCapturableConsole);
|
|
172
|
+
/**
|
|
173
|
+
* TODO: Move `setupMicrotasks` and `setupRequestAnimationFrame` to a
|
|
174
|
+
* separate function once we have a better way to distinguish between
|
|
175
|
+
* Worklet Runtimes.
|
|
176
|
+
*/
|
|
177
|
+
setupMicrotasks();
|
|
178
|
+
setupRequestAnimationFrame();
|
|
179
|
+
setupSetTimeout();
|
|
180
|
+
setupSetImmediate();
|
|
181
|
+
setupSetInterval();
|
|
182
|
+
})();
|
|
163
183
|
}
|
|
164
184
|
//# sourceMappingURL=initializers.js.map
|