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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["bundleValueUnpacker","setupCallGuard","registerReportFatalRemoteError","IS_JEST","SHOULD_BE_USE_WEB","mockedRequestAnimationFrame","setupRequestAnimationFrame","setupSetImmediate","setupSetInterval","setupSetTimeout","executeOnUIRuntimeSync","runOnJS","setupMicrotasks","isWorkletFunction","registerWorkletsError","WorkletsError","WorkletsModule","capturableConsole","getMemorySafeCapturableConsole","consoleCopy","Object","fromEntries","entries","console","map","methodName","method","methodWrapper","args","name","defineProperty","value","writable","setupConsole","boundCapturableConsole","globalThis","assert","debug","log","warn","error","info","initialized","init","initializeRuntime","initializeRuntimeOnWeb","_WORKLET","initializeWorkletRuntime","initializeRNRuntime","installRNBindingsOnUIRuntime","_WORKLETS_BUNDLE_MODE","__valueUnpacker","__DEV__","testWorklet","Refresh","Proxy","get","__r","_log","_getAnimationTimestamp","performance","now","requestAnimationFrame","runtimeBoundCapturableConsole"],"sourceRoot":"../../src","sources":["initializers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const PREFIX = '[Worklets]';
|
|
4
|
+
function formatMessage(message) {
|
|
5
|
+
return `${PREFIX} ${message}`;
|
|
6
|
+
}
|
|
7
|
+
export const logger = {
|
|
8
|
+
warn(message) {
|
|
9
|
+
console.warn(formatMessage(message));
|
|
10
|
+
},
|
|
11
|
+
error(message) {
|
|
12
|
+
console.error(formatMessage(message));
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PREFIX","formatMessage","message","logger","warn","console","error"],"sourceRoot":"../../src","sources":["logger.ts"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,MAAM,GAAG,YAAY;AAE3B,SAASC,aAAaA,CAACC,OAAe,EAAE;EACtC,OAAO,GAAGF,MAAM,IAAIE,OAAO,EAAE;AAC/B;AAEA,OAAO,MAAMC,MAAM,GAAG;EACpBC,IAAIA,CAACF,OAAe,EAAE;IACpBG,OAAO,CAACD,IAAI,CAACH,aAAa,CAACC,OAAO,CAAC,CAAC;EACtC,CAAC;EACDI,KAAKA,CAACJ,OAAe,EAAE;IACrBG,OAAO,CAACC,KAAK,CAACL,aAAa,CAACC,OAAO,CAAC,CAAC;EACvC;AACF,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["privateGlobals.d.ts"],"mappings":"AAAA;AACA
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["privateGlobals.d.ts"],"mappings":"AAAA;AACA,YAAY;;AAEZ;AACA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["publicGlobals.ts"],"mappings":"AAAA,YAAY;;AACZ;AACA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mockedRequestAnimationFrame","callback","setTimeout","performance","now"],"sourceRoot":"../../../src","sources":["runLoop/mockedRequestAnimationFrame.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AACA;AACA;AACA,OAAO,SAASA,2BAA2BA,CACzCC,QAAqC,EACN;EAC/B,OAAOC,UAAU,CAAC,MAAMD,QAAQ,CAACE,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzD","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import { callMicrotasks } from "../threads.js";
|
|
4
|
+
export function setupRequestAnimationFrame() {
|
|
5
|
+
'worklet';
|
|
6
|
+
|
|
7
|
+
const nativeRequestAnimationFrame = globalThis.requestAnimationFrame;
|
|
8
|
+
let animationFrameCallbacks = [];
|
|
9
|
+
let callbacksBegin = 0;
|
|
10
|
+
let callbacksEnd = 0;
|
|
11
|
+
let flushedCallbacks = animationFrameCallbacks;
|
|
12
|
+
let flushedCallbacksBegin = 0;
|
|
13
|
+
let flushedCallbacksEnd = 0;
|
|
14
|
+
let flushRequested = false;
|
|
15
|
+
globalThis.__flushAnimationFrame = timestamp => {
|
|
16
|
+
globalThis.__frameTimestamp = timestamp;
|
|
17
|
+
flushedCallbacks = animationFrameCallbacks;
|
|
18
|
+
animationFrameCallbacks = [];
|
|
19
|
+
flushedCallbacksBegin = callbacksBegin;
|
|
20
|
+
flushedCallbacksEnd = callbacksEnd;
|
|
21
|
+
callbacksBegin = callbacksEnd;
|
|
22
|
+
flushRequested = false;
|
|
23
|
+
for (const callback of flushedCallbacks) {
|
|
24
|
+
callback(timestamp);
|
|
25
|
+
}
|
|
26
|
+
flushedCallbacksBegin = callbacksEnd;
|
|
27
|
+
callMicrotasks();
|
|
28
|
+
globalThis.__frameTimestamp = undefined;
|
|
29
|
+
};
|
|
30
|
+
globalThis.requestAnimationFrame = callback => {
|
|
31
|
+
const handle = callbacksEnd++;
|
|
32
|
+
animationFrameCallbacks.push(callback);
|
|
33
|
+
if (!flushRequested) {
|
|
34
|
+
flushRequested = true;
|
|
35
|
+
nativeRequestAnimationFrame(globalThis.__flushAnimationFrame);
|
|
36
|
+
}
|
|
37
|
+
return handle;
|
|
38
|
+
};
|
|
39
|
+
globalThis.cancelAnimationFrame = handle => {
|
|
40
|
+
if (handle < flushedCallbacksBegin || handle >= callbacksEnd) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (handle < flushedCallbacksEnd) {
|
|
44
|
+
flushedCallbacks[handle - flushedCallbacksBegin] = () => {};
|
|
45
|
+
} else {
|
|
46
|
+
animationFrameCallbacks[handle - callbacksBegin] = () => {};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=requestAnimationFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["callMicrotasks","setupRequestAnimationFrame","nativeRequestAnimationFrame","globalThis","requestAnimationFrame","animationFrameCallbacks","callbacksBegin","callbacksEnd","flushedCallbacks","flushedCallbacksBegin","flushedCallbacksEnd","flushRequested","__flushAnimationFrame","timestamp","__frameTimestamp","callback","undefined","handle","push","cancelAnimationFrame"],"sourceRoot":"../../../src","sources":["runLoop/requestAnimationFrame.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,eAAY;AAE3C,OAAO,SAASC,0BAA0BA,CAAA,EAAG;EAC3C,SAAS;;EACT,MAAMC,2BAA2B,GAAGC,UAAU,CAACC,qBAAqB;EAEpE,IAAIC,uBAAwD,GAAG,EAAE;EACjE,IAAIC,cAAc,GAAG,CAAC;EACtB,IAAIC,YAAY,GAAG,CAAC;EAEpB,IAAIC,gBAAgB,GAAGH,uBAAuB;EAC9C,IAAII,qBAAqB,GAAG,CAAC;EAC7B,IAAIC,mBAAmB,GAAG,CAAC;EAE3B,IAAIC,cAAc,GAAG,KAAK;EAE1BR,UAAU,CAACS,qBAAqB,GAAIC,SAAiB,IAAK;IACxDV,UAAU,CAACW,gBAAgB,GAAGD,SAAS;IAEvCL,gBAAgB,GAAGH,uBAAuB;IAC1CA,uBAAuB,GAAG,EAAE;IAE5BI,qBAAqB,GAAGH,cAAc;IACtCI,mBAAmB,GAAGH,YAAY;IAClCD,cAAc,GAAGC,YAAY;IAE7BI,cAAc,GAAG,KAAK;IAEtB,KAAK,MAAMI,QAAQ,IAAIP,gBAAgB,EAAE;MACvCO,QAAQ,CAACF,SAAS,CAAC;IACrB;IAEAJ,qBAAqB,GAAGF,YAAY;IAEpCP,cAAc,CAAC,CAAC;IAEhBG,UAAU,CAACW,gBAAgB,GAAGE,SAAS;EACzC,CAAC;EAEDb,UAAU,CAACC,qBAAqB,GAC9BW,QAAqC,IAC1B;IACX,MAAME,MAAM,GAAGV,YAAY,EAAE;IAE7BF,uBAAuB,CAACa,IAAI,CAACH,QAAQ,CAAC;IACtC,IAAI,CAACJ,cAAc,EAAE;MACnBA,cAAc,GAAG,IAAI;MAErBT,2BAA2B,CAACC,UAAU,CAACS,qBAAqB,CAAC;IAC/D;IACA,OAAOK,MAAM;EACf,CAAC;EAEDd,UAAU,CAACgB,oBAAoB,GAAIF,MAAc,IAAK;IACpD,IAAIA,MAAM,GAAGR,qBAAqB,IAAIQ,MAAM,IAAIV,YAAY,EAAE;MAC5D;IACF;IAEA,IAAIU,MAAM,GAAGP,mBAAmB,EAAE;MAChCF,gBAAgB,CAACS,MAAM,GAAGR,qBAAqB,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7D,CAAC,MAAM;MACLJ,uBAAuB,CAACY,MAAM,GAAGX,cAAc,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7D;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export function setupSetImmediate() {
|
|
4
|
+
'worklet';
|
|
5
|
+
|
|
6
|
+
const setImmediatePolyfill = (callback, ...args) => {
|
|
7
|
+
return setTimeout(callback, 0, ...args);
|
|
8
|
+
};
|
|
9
|
+
const clearImmediatePolyfill = immediateHandle => {
|
|
10
|
+
clearTimeout(immediateHandle);
|
|
11
|
+
};
|
|
12
|
+
globalThis.setImmediate = setImmediatePolyfill;
|
|
13
|
+
globalThis.clearImmediate = clearImmediatePolyfill;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=setImmediatePolyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["setupSetImmediate","setImmediatePolyfill","callback","args","setTimeout","clearImmediatePolyfill","immediateHandle","clearTimeout","globalThis","setImmediate","clearImmediate"],"sourceRoot":"../../../src","sources":["runLoop/setImmediatePolyfill.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,SAASA,iBAAiBA,CAAA,EAAG;EAClC,SAAS;;EAET,MAAMC,oBAAoB,GAAGA,CAC3BC,QAAsC,EACtC,GAAGC,IAAe,KACf;IACH,OAAOC,UAAU,CAACF,QAAQ,EAAE,CAAC,EAAE,GAAGC,IAAI,CAAC;EACzC,CAAC;EAED,MAAME,sBAAsB,GAAIC,eAAuB,IAAK;IAC1DC,YAAY,CAACD,eAAe,CAAC;EAC/B,CAAC;EAEDE,UAAU,CAACC,YAAY,GACrBR,oBAAsD;EACxDO,UAAU,CAACE,cAAc,GAAGL,sBAA+C;AAC7E","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export function setupSetInterval() {
|
|
4
|
+
'worklet';
|
|
5
|
+
|
|
6
|
+
const intervalHandleToTimeoutHandle = new Map();
|
|
7
|
+
const setIntervalPolyfill = (callback, delay = 0, ...args) => {
|
|
8
|
+
let intervalHandle = 0;
|
|
9
|
+
const repeatingCallback = () => {
|
|
10
|
+
const timeoutHandle = setTimeout(repeatingCallback, delay);
|
|
11
|
+
intervalHandleToTimeoutHandle.set(intervalHandle, timeoutHandle);
|
|
12
|
+
callback(...args);
|
|
13
|
+
};
|
|
14
|
+
intervalHandle = setTimeout(repeatingCallback, delay);
|
|
15
|
+
intervalHandleToTimeoutHandle.set(intervalHandle, intervalHandle);
|
|
16
|
+
return intervalHandle;
|
|
17
|
+
};
|
|
18
|
+
const clearIntervalPolyfill = intervalHandle => {
|
|
19
|
+
const timeoutHandle = intervalHandleToTimeoutHandle.get(intervalHandle);
|
|
20
|
+
clearTimeout(timeoutHandle);
|
|
21
|
+
intervalHandleToTimeoutHandle.delete(intervalHandle);
|
|
22
|
+
};
|
|
23
|
+
globalThis.setInterval = setIntervalPolyfill;
|
|
24
|
+
globalThis.clearInterval = clearIntervalPolyfill;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=setIntervalPolyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["setupSetInterval","intervalHandleToTimeoutHandle","Map","setIntervalPolyfill","callback","delay","args","intervalHandle","repeatingCallback","timeoutHandle","setTimeout","set","clearIntervalPolyfill","get","clearTimeout","delete","globalThis","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["runLoop/setIntervalPolyfill.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,SAASA,gBAAgBA,CAAA,EAAG;EACjC,SAAS;;EAET,MAAMC,6BAAkD,GAAG,IAAIC,GAAG,CAAC,CAAC;EAEpE,MAAMC,mBAAmB,GAAGA,CAC1BC,QAAsC,EACtCC,KAAa,GAAG,CAAC,EACjB,GAAGC,IAAe,KACf;IACH,IAAIC,cAAc,GAAG,CAAC;IAEtB,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;MAC9B,MAAMC,aAAa,GAAGC,UAAU,CAC9BF,iBAAiB,EACjBH,KACF,CAAsB;MACtBJ,6BAA6B,CAACU,GAAG,CAACJ,cAAc,EAAEE,aAAa,CAAC;MAChEL,QAAQ,CAAC,GAAGE,IAAI,CAAC;IACnB,CAAC;IAEDC,cAAc,GAAGG,UAAU,CAACF,iBAAiB,EAAEH,KAAK,CAAsB;IAC1EJ,6BAA6B,CAACU,GAAG,CAACJ,cAAc,EAAEA,cAAc,CAAC;IAEjE,OAAOA,cAAc;EACvB,CAAC;EAED,MAAMK,qBAAqB,GAAIL,cAAsB,IAAK;IACxD,MAAME,aAAa,GAAGR,6BAA6B,CAACY,GAAG,CAACN,cAAc,CAAC;IACvEO,YAAY,CAACL,aAAa,CAAC;IAC3BR,6BAA6B,CAACc,MAAM,CAACR,cAAc,CAAC;EACtD,CAAC;EAEDS,UAAU,CAACC,WAAW,GAAGd,mBAAyC;EAClEa,UAAU,CAACE,aAAa,GAAGN,qBAA6C;AAC1E","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export function setupSetTimeout() {
|
|
4
|
+
'worklet';
|
|
5
|
+
|
|
6
|
+
const timeoutHandleToRafHandle = new Map();
|
|
7
|
+
const setTimeoutPolyfill = (callback, delay = 1, ...args) => {
|
|
8
|
+
const start = performance.now();
|
|
9
|
+
let timeoutHandle = 0;
|
|
10
|
+
const rafCallback = () => {
|
|
11
|
+
const now = performance.now();
|
|
12
|
+
if (now - start >= delay) {
|
|
13
|
+
callback(...args);
|
|
14
|
+
timeoutHandleToRafHandle.delete(timeoutHandle);
|
|
15
|
+
} else {
|
|
16
|
+
const rafHandle = requestAnimationFrame(rafCallback);
|
|
17
|
+
timeoutHandleToRafHandle.set(timeoutHandle, rafHandle);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
timeoutHandle = requestAnimationFrame(rafCallback);
|
|
21
|
+
timeoutHandleToRafHandle.set(timeoutHandle, timeoutHandle);
|
|
22
|
+
return timeoutHandle;
|
|
23
|
+
};
|
|
24
|
+
const clearTimeoutPolyfill = timeoutHandle => {
|
|
25
|
+
const rafHandle = timeoutHandleToRafHandle.get(timeoutHandle);
|
|
26
|
+
timeoutHandleToRafHandle.delete(timeoutHandle);
|
|
27
|
+
cancelAnimationFrame(rafHandle);
|
|
28
|
+
};
|
|
29
|
+
globalThis.setTimeout = setTimeoutPolyfill;
|
|
30
|
+
globalThis.clearTimeout = clearTimeoutPolyfill;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=setTimeoutPolyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["setupSetTimeout","timeoutHandleToRafHandle","Map","setTimeoutPolyfill","callback","delay","args","start","performance","now","timeoutHandle","rafCallback","delete","rafHandle","requestAnimationFrame","set","clearTimeoutPolyfill","get","cancelAnimationFrame","globalThis","setTimeout","clearTimeout"],"sourceRoot":"../../../src","sources":["runLoop/setTimeoutPolyfill.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,SAASA,eAAeA,CAAA,EAAG;EAChC,SAAS;;EAET,MAAMC,wBAA6C,GAAG,IAAIC,GAAG,CAAC,CAAC;EAE/D,MAAMC,kBAAkB,GAAGA,CACzBC,QAAsC,EACtCC,KAAa,GAAG,CAAC,EACjB,GAAGC,IAAe,KACf;IACH,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC/B,IAAIC,aAAa,GAAG,CAAC;IAErB,MAAMC,WAAW,GAAGA,CAAA,KAAM;MACxB,MAAMF,GAAG,GAAGD,WAAW,CAACC,GAAG,CAAC,CAAC;MAC7B,IAAIA,GAAG,GAAGF,KAAK,IAAIF,KAAK,EAAE;QACxBD,QAAQ,CAAC,GAAGE,IAAI,CAAC;QACjBL,wBAAwB,CAACW,MAAM,CAACF,aAAa,CAAC;MAChD,CAAC,MAAM;QACL,MAAMG,SAAS,GAAGC,qBAAqB,CAACH,WAAW,CAAC;QACpDV,wBAAwB,CAACc,GAAG,CAACL,aAAa,EAAEG,SAAS,CAAC;MACxD;IACF,CAAC;IAEDH,aAAa,GAAGI,qBAAqB,CAACH,WAAW,CAAC;IAClDV,wBAAwB,CAACc,GAAG,CAACL,aAAa,EAAEA,aAAa,CAAC;IAC1D,OAAOA,aAAa;EACtB,CAAC;EAED,MAAMM,oBAAoB,GAAIN,aAAqB,IAAK;IACtD,MAAMG,SAAS,GAAGZ,wBAAwB,CAACgB,GAAG,CAACP,aAAa,CAAC;IAC7DT,wBAAwB,CAACW,MAAM,CAACF,aAAa,CAAC;IAC9CQ,oBAAoB,CAACL,SAAU,CAAC;EAClC,CAAC;EAEDM,UAAU,CAACC,UAAU,GAAGjB,kBAAuC;EAC/DgB,UAAU,CAACE,YAAY,GAAGL,oBAA2C;AACvE","ignoreList":[]}
|
package/lib/module/runtimes.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import { setupCallGuard
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { setupCallGuard } from "./callGuard.js";
|
|
4
|
+
import { getMemorySafeCapturableConsole, setupConsole } from "./initializers.js";
|
|
5
|
+
import { SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js";
|
|
6
6
|
import { makeShareableCloneOnUIRecursive, makeShareableCloneRecursive } from "./shareables.js";
|
|
7
7
|
import { isWorkletFunction } from "./workletFunction.js";
|
|
8
8
|
import { registerWorkletsError, WorkletsError } from "./WorkletsError.js";
|
|
9
9
|
import { WorkletsModule } from "./WorkletsModule/index.js";
|
|
10
|
-
const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* Lets you create a new JS runtime which can be used to run worklets possibly
|
|
@@ -24,16 +23,13 @@ const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
|
24
23
|
// @ts-expect-error Check `runOnUI` overload.
|
|
25
24
|
|
|
26
25
|
export function createWorkletRuntime(name, initializer) {
|
|
27
|
-
|
|
28
|
-
// identifier in the Worklet runtime.
|
|
29
|
-
const config = __workletsLoggerConfig;
|
|
26
|
+
const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole();
|
|
30
27
|
return WorkletsModule.createWorkletRuntime(name, makeShareableCloneRecursive(() => {
|
|
31
28
|
'worklet';
|
|
32
29
|
|
|
33
|
-
registerWorkletsError();
|
|
34
|
-
registerLoggerConfig(config);
|
|
35
30
|
setupCallGuard();
|
|
36
|
-
|
|
31
|
+
registerWorkletsError();
|
|
32
|
+
setupConsole(runtimeBoundCapturableConsole);
|
|
37
33
|
initializer?.();
|
|
38
34
|
}));
|
|
39
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["setupCallGuard","
|
|
1
|
+
{"version":3,"names":["setupCallGuard","getMemorySafeCapturableConsole","setupConsole","SHOULD_BE_USE_WEB","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","isWorkletFunction","registerWorkletsError","WorkletsError","WorkletsModule","createWorkletRuntime","name","initializer","runtimeBoundCapturableConsole","runOnRuntime","workletRuntime","worklet","__DEV__","globalThis","_WORKLET","args","global","_scheduleOnRuntime","scheduleOnRuntime"],"sourceRoot":"../../src","sources":["runtimes.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,gBAAa;AAC5C,SAASC,8BAA8B,EAAEC,YAAY,QAAQ,mBAAgB;AAC7E,SAASC,iBAAiB,QAAQ,4BAAmB;AACrD,SACEC,+BAA+B,EAC/BC,2BAA2B,QACtB,iBAAc;AACrB,SAASC,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,qBAAqB,EAAEC,aAAa,QAAQ,oBAAiB;AACtE,SAASC,cAAc,QAAQ,2BAAkB;;AAGjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,OAAO,SAASC,oBAAoBA,CAClCC,IAAY,EACZC,WAAuC,EACvB;EAChB,MAAMC,6BAA6B,GAAGZ,8BAA8B,CAAC,CAAC;EACtE,OAAOQ,cAAc,CAACC,oBAAoB,CACxCC,IAAI,EACJN,2BAA2B,CAAC,MAAM;IAChC,SAAS;;IACTL,cAAc,CAAC,CAAC;IAChBO,qBAAqB,CAAC,CAAC;IACvBL,YAAY,CAACW,6BAA6B,CAAC;IAC3CD,WAAW,GAAG,CAAC;EACjB,CAAC,CACH,CAAC;AACH;;AAEA;;AAKA;AACA,OAAO,SAASE,YAAYA,CAC1BC,cAA8B,EAC9BC,OAA2C,EAClB;EACzB,SAAS;;EACT,IAAIC,OAAO,IAAI,CAACd,iBAAiB,IAAI,CAACG,iBAAiB,CAACU,OAAO,CAAC,EAAE;IAChE,MAAM,IAAIR,aAAa,CACrB,yDACF,CAAC;EACH;EACA,IAAIU,UAAU,CAACC,QAAQ,EAAE;IACvB,OAAO,CAAC,GAAGC,IAAI,KACbC,MAAM,CAACC,kBAAkB,CACvBP,cAAc,EACdX,+BAA+B,CAAC,MAAM;MACpC,SAAS;;MACTY,OAAO,CAAC,GAAGI,IAAI,CAAC;IAClB,CAAC,CACH,CAAC;EACL;EACA,OAAO,CAAC,GAAGA,IAAI,KACbX,cAAc,CAACc,iBAAiB,CAC9BR,cAAc,EACdV,2BAA2B,CAAC,MAAM;IAChC,SAAS;;IACTW,OAAO,CAAC,GAAGI,IAAI,CAAC;EAClB,CAAC,CACH,CAAC;AACL","ignoreList":[]}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
5
|
-
|
|
3
|
+
import { SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js";
|
|
6
4
|
/**
|
|
7
5
|
* This symbol is used to represent a mapping from the value to itself.
|
|
8
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["SHOULD_BE_USE_WEB","shareableMappingFlag","Symbol","cache","WeakMap","shareableMappingCache","set","get","shareable","shareableRef","bind"],"sourceRoot":"../../src","sources":["shareableMappingCache.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,iBAAiB,QAAQ,4BAAmB;AAGrD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGC,MAAM,CAAC,gBAAgB,CAAC;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,KAAK,GAAGH,iBAAiB,GAC3B,IAAI,GACJ,IAAII,OAAO,CAAgC,CAAC;AAEhD,OAAO,MAAMC,qBAAqB,GAAGL,iBAAiB,GAClD;EACEM,GAAGA,CAAA,EAAG;IACJ;EAAA,CACD;EACDC,GAAGA,CAAA,EAAG;IACJ,OAAO,IAAI;EACb;AACF,CAAC,GACD;EACED,GAAGA,CAACE,SAAiB,EAAEC,YAA2B,EAAQ;IACxDN,KAAK,CAAEG,GAAG,CAACE,SAAS,EAAEC,YAAY,IAAIR,oBAAoB,CAAC;EAC7D,CAAC;EACDM,GAAG,EAAEJ,KAAK,CAAEI,GAAG,CAACG,IAAI,CAACP,KAAK;AAC5B,CAAC","ignoreList":[]}
|
package/lib/module/shareables.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import { registerWorkletStackDetails } from "./errors.js";
|
|
4
|
-
import { logger } from "./logger
|
|
5
|
-
import {
|
|
4
|
+
import { logger } from "./logger.js";
|
|
5
|
+
import { SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js";
|
|
6
6
|
import { shareableMappingCache, shareableMappingFlag } from "./shareableMappingCache.js";
|
|
7
7
|
import { isWorkletFunction } from "./workletFunction.js";
|
|
8
8
|
import { WorkletsError } from "./WorkletsError.js";
|
|
@@ -11,7 +11,7 @@ import { WorkletsModule } from "./WorkletsModule/index.js";
|
|
|
11
11
|
// where no shareable references are used. Instead, the objects themselves are used
|
|
12
12
|
// instead of shareable references, because of the fact that we don't have to deal with
|
|
13
13
|
// running the code on separate VMs.
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
const MAGIC_KEY = 'REANIMATED_MAGIC_KEY';
|
|
16
16
|
function isHostObject(value) {
|
|
17
17
|
'worklet';
|
|
@@ -23,8 +23,13 @@ function isHostObject(value) {
|
|
|
23
23
|
return MAGIC_KEY in value;
|
|
24
24
|
}
|
|
25
25
|
function isPlainJSObject(object) {
|
|
26
|
+
'worklet';
|
|
27
|
+
|
|
26
28
|
return Object.getPrototypeOf(object) === Object.prototype;
|
|
27
29
|
}
|
|
30
|
+
function isTurboModuleLike(object) {
|
|
31
|
+
return isHostObject(Object.getPrototypeOf(object));
|
|
32
|
+
}
|
|
28
33
|
function getFromCache(value) {
|
|
29
34
|
const cached = shareableMappingCache.get(value);
|
|
30
35
|
if (cached === shareableMappingFlag) {
|
|
@@ -106,11 +111,22 @@ function makeShareableCloneRecursiveNative(value, shouldPersistRemote = false, d
|
|
|
106
111
|
if (Array.isArray(value)) {
|
|
107
112
|
return cloneArray(value, shouldPersistRemote, depth);
|
|
108
113
|
}
|
|
114
|
+
if (globalThis._WORKLETS_BUNDLE_MODE && isFunction && value.__bundleData) {
|
|
115
|
+
return cloneImport(value);
|
|
116
|
+
}
|
|
109
117
|
if (isFunction && !isWorkletFunction(value)) {
|
|
110
|
-
return cloneRemoteFunction(value
|
|
118
|
+
return cloneRemoteFunction(value);
|
|
119
|
+
}
|
|
120
|
+
// RN has introduced a new representation of TurboModules as a JS object whose prototype is the host object
|
|
121
|
+
// More details: https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp#L182
|
|
122
|
+
if (isTurboModuleLike(value)) {
|
|
123
|
+
return cloneTurboModuleLike(value, shouldPersistRemote, depth);
|
|
111
124
|
}
|
|
112
125
|
if (isHostObject(value)) {
|
|
113
|
-
return cloneHostObject(value
|
|
126
|
+
return cloneHostObject(value);
|
|
127
|
+
}
|
|
128
|
+
if (isPlainJSObject(value) && value.__init) {
|
|
129
|
+
return cloneInitializer(value, shouldPersistRemote, depth);
|
|
114
130
|
}
|
|
115
131
|
if (isPlainJSObject(value) && value.__workletContextObjectFactory) {
|
|
116
132
|
return cloneContextObject(value);
|
|
@@ -121,6 +137,12 @@ function makeShareableCloneRecursiveNative(value, shouldPersistRemote = false, d
|
|
|
121
137
|
if (isPlainJSObject(value) || isFunction) {
|
|
122
138
|
return clonePlainJSObject(value, shouldPersistRemote, depth);
|
|
123
139
|
}
|
|
140
|
+
if (value instanceof Set) {
|
|
141
|
+
return cloneSet(value);
|
|
142
|
+
}
|
|
143
|
+
if (value instanceof Map) {
|
|
144
|
+
return cloneMap(value);
|
|
145
|
+
}
|
|
124
146
|
if (value instanceof RegExp) {
|
|
125
147
|
return cloneRegExp(value);
|
|
126
148
|
}
|
|
@@ -136,6 +158,14 @@ function makeShareableCloneRecursiveNative(value, shouldPersistRemote = false, d
|
|
|
136
158
|
}
|
|
137
159
|
return inaccessibleObject(value);
|
|
138
160
|
}
|
|
161
|
+
if (globalThis._WORKLETS_BUNDLE_MODE) {
|
|
162
|
+
// TODO: Do it programatically.
|
|
163
|
+
makeShareableCloneRecursiveNative.__bundleData = {
|
|
164
|
+
imported: 'makeShareableCloneRecursive',
|
|
165
|
+
// @ts-expect-error resolveWeak is defined by Metro
|
|
166
|
+
source: require.resolveWeak('./index')
|
|
167
|
+
};
|
|
168
|
+
}
|
|
139
169
|
export const makeShareableCloneRecursive = SHOULD_BE_USE_WEB ? makeShareableCloneRecursiveWeb : makeShareableCloneRecursiveNative;
|
|
140
170
|
function detectCyclicObject(value, depth) {
|
|
141
171
|
if (depth >= DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) {
|
|
@@ -174,26 +204,43 @@ function cloneUndefined() {
|
|
|
174
204
|
function cloneNull() {
|
|
175
205
|
return WorkletsModule.makeShareableNull();
|
|
176
206
|
}
|
|
207
|
+
function cloneObjectProperties(value, shouldPersistRemote, depth) {
|
|
208
|
+
const clonedProps = {};
|
|
209
|
+
for (const [key, element] of Object.entries(value)) {
|
|
210
|
+
// We don't need to clone __initData field as it contains long strings
|
|
211
|
+
// representing the worklet code, source map, and location, and we will
|
|
212
|
+
// serialize/deserialize it once.
|
|
213
|
+
if (key === '__initData' && clonedProps.__initData !== undefined) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
clonedProps[key] = makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1);
|
|
217
|
+
}
|
|
218
|
+
return clonedProps;
|
|
219
|
+
}
|
|
220
|
+
function cloneInitializer(value, shouldPersistRemote = false, depth = 0) {
|
|
221
|
+
const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth);
|
|
222
|
+
return WorkletsModule.makeShareableInitializer(clonedProps);
|
|
223
|
+
}
|
|
177
224
|
function cloneArray(value, shouldPersistRemote, depth) {
|
|
178
225
|
const clonedElements = value.map(element => makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1));
|
|
179
|
-
const clone = WorkletsModule.
|
|
226
|
+
const clone = WorkletsModule.makeShareableArray(clonedElements, shouldPersistRemote);
|
|
180
227
|
shareableMappingCache.set(value, clone);
|
|
181
228
|
shareableMappingCache.set(clone);
|
|
182
229
|
freezeObjectInDev(value);
|
|
183
230
|
return clone;
|
|
184
231
|
}
|
|
185
|
-
function cloneRemoteFunction(value
|
|
186
|
-
const clone = WorkletsModule.
|
|
232
|
+
function cloneRemoteFunction(value) {
|
|
233
|
+
const clone = WorkletsModule.makeShareableFunction(value);
|
|
187
234
|
shareableMappingCache.set(value, clone);
|
|
188
235
|
shareableMappingCache.set(clone);
|
|
189
236
|
freezeObjectInDev(value);
|
|
190
237
|
return clone;
|
|
191
238
|
}
|
|
192
|
-
function cloneHostObject(value
|
|
239
|
+
function cloneHostObject(value) {
|
|
193
240
|
// for host objects we pass the reference to the object as shareable and
|
|
194
241
|
// then recreate new host object wrapping the same instance on the UI thread.
|
|
195
242
|
// there is no point of iterating over keys as we do for regular objects.
|
|
196
|
-
const clone = WorkletsModule.
|
|
243
|
+
const clone = WorkletsModule.makeShareableHostObject(value);
|
|
197
244
|
shareableMappingCache.set(value, clone);
|
|
198
245
|
shareableMappingCache.set(clone);
|
|
199
246
|
return clone;
|
|
@@ -216,30 +263,36 @@ function cloneWorklet(value, shouldPersistRemote, depth) {
|
|
|
216
263
|
// seems more elegant to handle it this way.
|
|
217
264
|
delete value.__stackDetails;
|
|
218
265
|
}
|
|
266
|
+
const clonedProps = cloneObjectProperties(value, true, depth);
|
|
219
267
|
// to save on transferring static __initData field of worklet structure
|
|
220
268
|
// we request shareable value to persist its UI counterpart. This means
|
|
221
|
-
// that the __initData field that contains long strings
|
|
269
|
+
// that the __initData field that contains long strings representing the
|
|
222
270
|
// worklet code, source map, and location, will always be
|
|
223
271
|
// serialized/deserialized once.
|
|
224
|
-
const clonedProps = {};
|
|
225
272
|
clonedProps.__initData = makeShareableCloneRecursive(value.__initData, true, depth + 1);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
clonedProps[key] = makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1);
|
|
231
|
-
}
|
|
232
|
-
const clone = WorkletsModule.makeShareableClone(clonedProps,
|
|
273
|
+
const clone = WorkletsModule.makeShareableWorklet(clonedProps,
|
|
274
|
+
// TODO: Check after refactor if we can remove shouldPersistRemote parameter (imho it's redundant here since worklets are always persistent)
|
|
233
275
|
// retain all worklets
|
|
234
|
-
true
|
|
276
|
+
true);
|
|
235
277
|
shareableMappingCache.set(value, clone);
|
|
236
278
|
shareableMappingCache.set(clone);
|
|
237
279
|
freezeObjectInDev(value);
|
|
238
280
|
return clone;
|
|
239
281
|
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* TurboModuleLike objects are JS objects that have a TurboModule as their
|
|
285
|
+
* prototype.
|
|
286
|
+
*/
|
|
287
|
+
function cloneTurboModuleLike(value, shouldPersistRemote, depth) {
|
|
288
|
+
const proto = Object.getPrototypeOf(value);
|
|
289
|
+
const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth);
|
|
290
|
+
const clone = WorkletsModule.makeShareableTurboModuleLike(clonedProps, proto);
|
|
291
|
+
return clone;
|
|
292
|
+
}
|
|
240
293
|
function cloneContextObject(value) {
|
|
241
294
|
const workletContextObjectFactory = value.__workletContextObjectFactory;
|
|
242
|
-
const handle =
|
|
295
|
+
const handle = cloneInitializer({
|
|
243
296
|
__init: () => {
|
|
244
297
|
'worklet';
|
|
245
298
|
|
|
@@ -250,14 +303,32 @@ function cloneContextObject(value) {
|
|
|
250
303
|
return handle;
|
|
251
304
|
}
|
|
252
305
|
function clonePlainJSObject(value, shouldPersistRemote, depth) {
|
|
253
|
-
const clonedProps =
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
306
|
+
const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth);
|
|
307
|
+
const clone = WorkletsModule.makeShareableObject(clonedProps, shouldPersistRemote, value);
|
|
308
|
+
shareableMappingCache.set(value, clone);
|
|
309
|
+
shareableMappingCache.set(clone);
|
|
310
|
+
freezeObjectInDev(value);
|
|
311
|
+
return clone;
|
|
312
|
+
}
|
|
313
|
+
function cloneMap(value) {
|
|
314
|
+
const clonedKeys = [];
|
|
315
|
+
const clonedValues = [];
|
|
316
|
+
for (const [key, element] of value.entries()) {
|
|
317
|
+
clonedKeys.push(makeShareableCloneRecursive(key));
|
|
318
|
+
clonedValues.push(makeShareableCloneRecursive(element));
|
|
259
319
|
}
|
|
260
|
-
const clone = WorkletsModule.
|
|
320
|
+
const clone = WorkletsModule.makeShareableMap(clonedKeys, clonedValues);
|
|
321
|
+
shareableMappingCache.set(value, clone);
|
|
322
|
+
shareableMappingCache.set(clone);
|
|
323
|
+
freezeObjectInDev(value);
|
|
324
|
+
return clone;
|
|
325
|
+
}
|
|
326
|
+
function cloneSet(value) {
|
|
327
|
+
const clonedElements = [];
|
|
328
|
+
for (const element of value) {
|
|
329
|
+
clonedElements.push(makeShareableCloneRecursive(element));
|
|
330
|
+
}
|
|
331
|
+
const clone = WorkletsModule.makeShareableSet(clonedElements);
|
|
261
332
|
shareableMappingCache.set(value, clone);
|
|
262
333
|
shareableMappingCache.set(clone);
|
|
263
334
|
freezeObjectInDev(value);
|
|
@@ -266,7 +337,7 @@ function clonePlainJSObject(value, shouldPersistRemote, depth) {
|
|
|
266
337
|
function cloneRegExp(value) {
|
|
267
338
|
const pattern = value.source;
|
|
268
339
|
const flags = value.flags;
|
|
269
|
-
const handle =
|
|
340
|
+
const handle = cloneInitializer({
|
|
270
341
|
__init: () => {
|
|
271
342
|
'worklet';
|
|
272
343
|
|
|
@@ -282,7 +353,7 @@ function cloneError(value) {
|
|
|
282
353
|
message,
|
|
283
354
|
stack
|
|
284
355
|
} = value;
|
|
285
|
-
const handle =
|
|
356
|
+
const handle = cloneInitializer({
|
|
286
357
|
__init: () => {
|
|
287
358
|
'worklet';
|
|
288
359
|
|
|
@@ -306,7 +377,7 @@ function cloneArrayBuffer(value, shouldPersistRemote) {
|
|
|
306
377
|
function cloneArrayBufferView(value) {
|
|
307
378
|
const buffer = value.buffer;
|
|
308
379
|
const typeName = value.constructor.name;
|
|
309
|
-
const handle =
|
|
380
|
+
const handle = cloneInitializer({
|
|
310
381
|
__init: () => {
|
|
311
382
|
'worklet';
|
|
312
383
|
|
|
@@ -323,6 +394,16 @@ function cloneArrayBufferView(value) {
|
|
|
323
394
|
shareableMappingCache.set(value, handle);
|
|
324
395
|
return handle;
|
|
325
396
|
}
|
|
397
|
+
function cloneImport(value) {
|
|
398
|
+
const {
|
|
399
|
+
source,
|
|
400
|
+
imported
|
|
401
|
+
} = value.__bundleData;
|
|
402
|
+
const clone = WorkletsModule.makeShareableImport(source, imported);
|
|
403
|
+
shareableMappingCache.set(value, clone);
|
|
404
|
+
shareableMappingCache.set(clone);
|
|
405
|
+
return clone;
|
|
406
|
+
}
|
|
326
407
|
function inaccessibleObject(value) {
|
|
327
408
|
// This is reached for object types that are not of plain Object.prototype.
|
|
328
409
|
// We don't support such objects from being transferred as shareables to
|
|
@@ -391,7 +472,7 @@ function freezeObjectInDev(value) {
|
|
|
391
472
|
});
|
|
392
473
|
Object.preventExtensions(value);
|
|
393
474
|
}
|
|
394
|
-
|
|
475
|
+
function makeShareableCloneOnUIRecursiveLEGACY(value) {
|
|
395
476
|
'worklet';
|
|
396
477
|
|
|
397
478
|
if (SHOULD_BE_USE_WEB) {
|
|
@@ -405,7 +486,7 @@ export function makeShareableCloneOnUIRecursive(value) {
|
|
|
405
486
|
if (isHostObject(value)) {
|
|
406
487
|
// We call `_makeShareableClone` to wrap the provided HostObject
|
|
407
488
|
// inside ShareableJSRef.
|
|
408
|
-
return global.
|
|
489
|
+
return global._makeShareableHostObject(value);
|
|
409
490
|
}
|
|
410
491
|
if (isRemoteFunction(value)) {
|
|
411
492
|
// RemoteFunctions are created by us therefore they are
|
|
@@ -414,7 +495,7 @@ export function makeShareableCloneOnUIRecursive(value) {
|
|
|
414
495
|
return value.__remoteFunction;
|
|
415
496
|
}
|
|
416
497
|
if (Array.isArray(value)) {
|
|
417
|
-
return global.
|
|
498
|
+
return global._makeShareableArray(value.map(cloneRecursive));
|
|
418
499
|
}
|
|
419
500
|
const toAdapt = {};
|
|
420
501
|
for (const [key, element] of Object.entries(value)) {
|
|
@@ -444,6 +525,7 @@ export function makeShareableCloneOnUIRecursive(value) {
|
|
|
444
525
|
}
|
|
445
526
|
return cloneRecursive(value);
|
|
446
527
|
}
|
|
528
|
+
export const makeShareableCloneOnUIRecursive = globalThis._WORKLETS_BUNDLE_MODE ? makeShareableCloneRecursive : makeShareableCloneOnUIRecursiveLEGACY;
|
|
447
529
|
function makeShareableJS(value) {
|
|
448
530
|
return value;
|
|
449
531
|
}
|