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.
Files changed (202) hide show
  1. package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp +532 -0
  2. package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h +88 -0
  3. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +40 -122
  4. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +16 -40
  5. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +2 -1
  6. package/Common/cpp/worklets/Resources/ValueUnpacker.cpp +1 -1
  7. package/Common/cpp/worklets/SharedItems/Shareables.cpp +200 -24
  8. package/Common/cpp/worklets/SharedItems/Shareables.h +108 -7
  9. package/Common/cpp/worklets/Tools/JSLogger.cpp +56 -4
  10. package/Common/cpp/worklets/Tools/JSLogger.h +17 -0
  11. package/Common/cpp/worklets/Tools/JSScheduler.cpp +12 -0
  12. package/Common/cpp/worklets/Tools/JSScheduler.h +10 -2
  13. package/Common/cpp/worklets/Tools/SingleInstanceChecker.h +3 -1
  14. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +19 -1
  15. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +12 -3
  16. package/Common/cpp/worklets/Tools/WorkletsSystraceSection.h +136 -0
  17. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +4 -4
  18. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +1 -1
  19. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp +85 -0
  20. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h +55 -0
  21. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +8 -4
  22. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +70 -24
  23. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +24 -4
  24. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +53 -1
  25. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +2 -1
  26. package/RNWorklets.podspec +9 -4
  27. package/android/CMakeLists.txt +14 -36
  28. package/android/build.gradle +16 -33
  29. package/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java +149 -0
  30. package/android/src/{main/java → legacyBundling}/com/swmansion/worklets/WorkletsModule.java +17 -2
  31. package/android/src/main/cpp/worklets/android/WorkletsModule.cpp +49 -8
  32. package/android/src/main/cpp/worklets/android/WorkletsModule.h +17 -2
  33. package/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java +1 -1
  34. package/apple/worklets/apple/WorkletsMessageThread.mm +4 -0
  35. package/apple/worklets/apple/WorkletsModule.h +16 -1
  36. package/apple/worklets/apple/WorkletsModule.mm +29 -2
  37. package/bundleMode/index.d.ts +3 -0
  38. package/bundleMode/index.js +55 -0
  39. package/lib/module/PlatformChecker/PlatformChecker.js +8 -0
  40. package/lib/module/PlatformChecker/PlatformChecker.js.map +1 -0
  41. package/lib/module/PlatformChecker/index.js +17 -0
  42. package/lib/module/PlatformChecker/index.js.map +1 -0
  43. package/lib/module/WorkletsError.js +2 -1
  44. package/lib/module/WorkletsError.js.map +1 -1
  45. package/lib/module/WorkletsModule/JSWorklets.js +36 -4
  46. package/lib/module/WorkletsModule/JSWorklets.js.map +1 -1
  47. package/lib/module/WorkletsModule/NativeWorklets.js +35 -15
  48. package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -1
  49. package/lib/module/WorkletsModule/workletsModuleInstance.js +2 -2
  50. package/lib/module/WorkletsModule/workletsModuleInstance.js.map +1 -1
  51. package/lib/module/bundleUnpacker.js +47 -0
  52. package/lib/module/bundleUnpacker.js.map +1 -0
  53. package/lib/module/callGuard.js +30 -0
  54. package/lib/module/callGuard.js.map +1 -0
  55. package/lib/module/errors.js +30 -11
  56. package/lib/module/errors.js.map +1 -1
  57. package/lib/module/index.js +10 -7
  58. package/lib/module/index.js.map +1 -1
  59. package/lib/module/initializers.js +123 -103
  60. package/lib/module/initializers.js.map +1 -1
  61. package/lib/module/logger.js +15 -0
  62. package/lib/module/logger.js.map +1 -0
  63. package/lib/module/privateGlobals.d.js +0 -1
  64. package/lib/module/privateGlobals.d.js.map +1 -1
  65. package/lib/module/publicGlobals.js +5 -0
  66. package/lib/module/publicGlobals.js.map +1 -0
  67. package/lib/module/runLoop/mockedRequestAnimationFrame.js.map +1 -0
  68. package/lib/module/runLoop/requestAnimationFrame.js +50 -0
  69. package/lib/module/runLoop/requestAnimationFrame.js.map +1 -0
  70. package/lib/module/runLoop/setImmediatePolyfill.js +15 -0
  71. package/lib/module/runLoop/setImmediatePolyfill.js.map +1 -0
  72. package/lib/module/runLoop/setIntervalPolyfill.js +26 -0
  73. package/lib/module/runLoop/setIntervalPolyfill.js.map +1 -0
  74. package/lib/module/runLoop/setTimeoutPolyfill.js +32 -0
  75. package/lib/module/runLoop/setTimeoutPolyfill.js.map +1 -0
  76. package/lib/module/runtimes.js +6 -10
  77. package/lib/module/runtimes.js.map +1 -1
  78. package/lib/module/shareableMappingCache.js +1 -3
  79. package/lib/module/shareableMappingCache.js.map +1 -1
  80. package/lib/module/shareables.js +116 -34
  81. package/lib/module/shareables.js.map +1 -1
  82. package/lib/module/specs/index.js +2 -2
  83. package/lib/module/specs/index.js.map +1 -1
  84. package/lib/module/threads.js +49 -54
  85. package/lib/module/threads.js.map +1 -1
  86. package/lib/module/valueUnpacker.js +3 -3
  87. package/lib/module/valueUnpacker.js.map +1 -1
  88. package/lib/module/workletRuntimeEntry.js +30 -0
  89. package/lib/module/workletRuntimeEntry.js.map +1 -0
  90. package/lib/typescript/PlatformChecker/PlatformChecker.d.ts +5 -0
  91. package/lib/typescript/PlatformChecker/PlatformChecker.d.ts.map +1 -0
  92. package/lib/typescript/PlatformChecker/index.d.ts +10 -0
  93. package/lib/typescript/PlatformChecker/index.d.ts.map +1 -0
  94. package/lib/typescript/WorkletsError.d.ts.map +1 -1
  95. package/lib/typescript/WorkletsModule/JSWorklets.d.ts.map +1 -1
  96. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts +1 -3
  97. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -1
  98. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts +1 -1
  99. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts.map +1 -1
  100. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts +1 -1
  101. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts.map +1 -1
  102. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +12 -2
  103. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +1 -1
  104. package/lib/typescript/bundleUnpacker.d.ts +7 -0
  105. package/lib/typescript/bundleUnpacker.d.ts.map +1 -0
  106. package/lib/typescript/callGuard.d.ts +4 -0
  107. package/lib/typescript/callGuard.d.ts.map +1 -0
  108. package/lib/typescript/errors.d.ts +13 -5
  109. package/lib/typescript/errors.d.ts.map +1 -1
  110. package/lib/typescript/index.d.ts +1 -2
  111. package/lib/typescript/index.d.ts.map +1 -1
  112. package/lib/typescript/initializers.d.ts +16 -5
  113. package/lib/typescript/initializers.d.ts.map +1 -1
  114. package/lib/typescript/logger.d.ts +5 -0
  115. package/lib/typescript/logger.d.ts.map +1 -0
  116. package/lib/typescript/publicGlobals.d.ts +22 -0
  117. package/lib/typescript/publicGlobals.d.ts.map +1 -0
  118. package/lib/typescript/runLoop/mockedRequestAnimationFrame.d.ts.map +1 -0
  119. package/lib/typescript/runLoop/requestAnimationFrame.d.ts.map +1 -0
  120. package/lib/typescript/runLoop/setImmediatePolyfill.d.ts +2 -0
  121. package/lib/typescript/runLoop/setImmediatePolyfill.d.ts.map +1 -0
  122. package/lib/typescript/runLoop/setIntervalPolyfill.d.ts +2 -0
  123. package/lib/typescript/runLoop/setIntervalPolyfill.d.ts.map +1 -0
  124. package/lib/typescript/runLoop/setTimeoutPolyfill.d.ts +2 -0
  125. package/lib/typescript/runLoop/setTimeoutPolyfill.d.ts.map +1 -0
  126. package/lib/typescript/runtimes.d.ts.map +1 -1
  127. package/lib/typescript/shareableMappingCache.d.ts.map +1 -1
  128. package/lib/typescript/shareables.d.ts +3 -2
  129. package/lib/typescript/shareables.d.ts.map +1 -1
  130. package/lib/typescript/specs/NativeWorkletsModule.d.ts +1 -1
  131. package/lib/typescript/specs/NativeWorkletsModule.d.ts.map +1 -1
  132. package/lib/typescript/specs/index.d.ts +2 -2
  133. package/lib/typescript/specs/index.d.ts.map +1 -1
  134. package/lib/typescript/threads.d.ts.map +1 -1
  135. package/lib/typescript/workletRuntimeEntry.d.ts +14 -0
  136. package/lib/typescript/workletRuntimeEntry.d.ts.map +1 -0
  137. package/lib/typescript/workletTypes.d.ts +14 -3
  138. package/lib/typescript/workletTypes.d.ts.map +1 -1
  139. package/package.json +17 -8
  140. package/plugin/index.js +145 -52
  141. package/scripts/worklets_utils.rb +9 -0
  142. package/src/PlatformChecker/PlatformChecker.ts +7 -0
  143. package/src/PlatformChecker/index.ts +29 -0
  144. package/src/WorkletsError.ts +2 -1
  145. package/src/WorkletsModule/JSWorklets.ts +71 -4
  146. package/src/WorkletsModule/NativeWorklets.ts +83 -21
  147. package/src/WorkletsModule/workletsModuleInstance.ts +2 -2
  148. package/src/WorkletsModule/workletsModuleProxy.ts +49 -1
  149. package/src/bundleUnpacker.ts +75 -0
  150. package/src/callGuard.ts +33 -0
  151. package/src/errors.ts +35 -18
  152. package/src/index.ts +12 -12
  153. package/src/initializers.ts +143 -113
  154. package/src/logger.ts +16 -0
  155. package/src/privateGlobals.d.ts +22 -6
  156. package/src/publicGlobals.ts +26 -0
  157. package/src/runLoop/requestAnimationFrame.ts +67 -0
  158. package/src/runLoop/setImmediatePolyfill.ts +20 -0
  159. package/src/runLoop/setIntervalPolyfill.ts +38 -0
  160. package/src/runLoop/setTimeoutPolyfill.ts +40 -0
  161. package/src/runtimes.ts +6 -11
  162. package/src/shareableMappingCache.ts +1 -3
  163. package/src/shareables.ts +179 -65
  164. package/src/specs/NativeWorkletsModule.ts +1 -1
  165. package/src/specs/index.ts +5 -2
  166. package/src/threads.ts +75 -65
  167. package/src/valueUnpacker.ts +3 -3
  168. package/src/workletRuntimeEntry.ts +30 -0
  169. package/src/workletTypes.ts +22 -5
  170. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp +0 -139
  171. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h +0 -61
  172. package/android/src/paper/com/swmansion/worklets/NativeWorkletsModuleSpec.java +0 -26
  173. package/lib/module/PlatformChecker.js +0 -26
  174. package/lib/module/PlatformChecker.js.map +0 -1
  175. package/lib/module/animationFrameQueue/mockedRequestAnimationFrame.js.map +0 -1
  176. package/lib/module/animationFrameQueue/requestAnimationFrame.js +0 -36
  177. package/lib/module/animationFrameQueue/requestAnimationFrame.js.map +0 -1
  178. package/lib/module/logger/LogBox.js +0 -15
  179. package/lib/module/logger/LogBox.js.map +0 -1
  180. package/lib/module/logger/index.js +0 -5
  181. package/lib/module/logger/index.js.map +0 -1
  182. package/lib/module/logger/logger.js +0 -137
  183. package/lib/module/logger/logger.js.map +0 -1
  184. package/lib/typescript/PlatformChecker.d.ts +0 -6
  185. package/lib/typescript/PlatformChecker.d.ts.map +0 -1
  186. package/lib/typescript/animationFrameQueue/mockedRequestAnimationFrame.d.ts.map +0 -1
  187. package/lib/typescript/animationFrameQueue/requestAnimationFrame.d.ts.map +0 -1
  188. package/lib/typescript/logger/LogBox.d.ts +0 -32
  189. package/lib/typescript/logger/LogBox.d.ts.map +0 -1
  190. package/lib/typescript/logger/index.d.ts +0 -3
  191. package/lib/typescript/logger/index.d.ts.map +0 -1
  192. package/lib/typescript/logger/logger.d.ts +0 -52
  193. package/lib/typescript/logger/logger.d.ts.map +0 -1
  194. package/src/PlatformChecker.ts +0 -30
  195. package/src/animationFrameQueue/requestAnimationFrame.ts +0 -41
  196. package/src/logger/LogBox.ts +0 -55
  197. package/src/logger/index.ts +0 -3
  198. package/src/logger/logger.ts +0 -155
  199. /package/lib/module/{animationFrameQueue → runLoop}/mockedRequestAnimationFrame.js +0 -0
  200. /package/lib/typescript/{animationFrameQueue → runLoop}/mockedRequestAnimationFrame.d.ts +0 -0
  201. /package/lib/typescript/{animationFrameQueue → runLoop}/requestAnimationFrame.d.ts +0 -0
  202. /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","installTurboModule","scheduleOnUI","scheduleOnRuntime","executeOnUIRuntimeSync","createWorkletRuntime","makeShareableClone","makeShareableString","makeShareableNumber","makeShareableBoolean","makeShareableBigInt","makeShareableUndefined","makeShareableNull","value","shouldPersistRemote","nativeStateSource","str","num","bool","bigInt","shareable","name","initializer","workletRuntime","shareableWorklet"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.ts"],"mappings":"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","ignoreList":[]}
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 { shouldBeUseWeb } from "../PlatformChecker.js";
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 = shouldBeUseWeb() ? createJSWorkletsModule() : createNativeWorkletsModule();
6
+ export const WorkletsModule = SHOULD_BE_USE_WEB ? createJSWorkletsModule() : createNativeWorkletsModule();
7
7
  //# sourceMappingURL=workletsModuleInstance.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["shouldBeUseWeb","createJSWorkletsModule","createNativeWorkletsModule","WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/workletsModuleInstance.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,uBAAoB;AACnD,SAASC,sBAAsB,QAAQ,iBAAc;AACrD,SAASC,0BAA0B,QAAQ,qBAAkB;AAE7D,OAAO,MAAMC,cAAc,GAAGH,cAAc,CAAC,CAAC,GAC1CC,sBAAsB,CAAC,CAAC,GACxBC,0BAA0B,CAAC,CAAC","ignoreList":[]}
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":[]}
@@ -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
- export function reportFatalErrorOnJS({
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
- moduleName
39
- }) {
40
- // eslint-disable-next-line reanimated/use-worklets-error
41
- const error = new Error();
46
+ name,
47
+ jsEngine
48
+ }, force) {
49
+ const error = new WorkletsError();
42
50
  error.message = message;
43
- error.stack = stack ? processStack(stack) : undefined;
44
- error.name = `${moduleName}Error`;
45
- // @ts-ignore React Native's ErrorUtils implementation extends the Error type with jsEngine field
46
- error.jsEngine = moduleName;
47
- // @ts-ignore the reportFatalError method is an internal method of ErrorUtils not exposed in the type definitions
48
- global.ErrorUtils.reportFatalError(error);
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
@@ -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","reportFatalErrorOnJS","message","moduleName","Error","undefined","name","jsEngine","global","ErrorUtils","reportFatalError"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":"AAAA,YAAY;;AAIZ,MAAMA,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,KAAa,EAAU;EAC3C,MAAMS,mBAAmB,GAAGT,KAAK,CAACU,KAAK,CAAC,4BAA4B,CAAC;EACrE,IAAIC,MAAM,GAAGX,KAAK;EAClBS,mBAAmB,EAAEG,OAAO,CAAEF,KAAK,IAAK;IACtC,MAAM,GAAGhB,IAAI,EAAEmB,QAAQ,EAAEC,OAAO,CAAC,GAAGJ,KAAK,CAACT,KAAK,CAAC,KAAK,CAAC,CAACc,GAAG,CAACR,MAAM,CAAC;IAClE,MAAMS,YAAY,GAAGzB,oBAAoB,CAAC0B,GAAG,CAACvB,IAAI,CAAC;IACnD,IAAI,CAACsB,YAAY,EAAE;MACjB;IACF;IACA,MAAM,CAAClB,KAAK,EAAEoB,UAAU,EAAEC,SAAS,CAAC,GAAGH,YAAY;IACnD,MAAM,CAACI,UAAU,EAAEC,UAAU,EAAEC,SAAS,CAAC,GAAGzB,eAAe,CAACC,KAAK,CAAC;IAClE,MAAMO,IAAI,GAAGQ,QAAQ,GAAGQ,UAAU,GAAGH,UAAU;IAC/C,MAAMZ,GAAG,GAAGQ,OAAO,GAAGQ,SAAS,GAAGH,SAAS;IAE3CR,MAAM,GAAGA,MAAM,CAACY,OAAO,CAACb,KAAK,EAAE,GAAGU,UAAU,IAAIf,IAAI,IAAIC,GAAG,EAAE,CAAC;EAChE,CAAC,CAAC;EACF,OAAOK,MAAM;AACf;AAEA,OAAO,SAASa,oBAAoBA,CAAC;EACnCC,OAAO;EACPzB,KAAK;EACL0B;AAKF,CAAC,EAAE;EACD;EACA,MAAM5B,KAAK,GAAG,IAAI6B,KAAK,CAAC,CAAC;EACzB7B,KAAK,CAAC2B,OAAO,GAAGA,OAAO;EACvB3B,KAAK,CAACE,KAAK,GAAGA,KAAK,GAAGQ,YAAY,CAACR,KAAK,CAAC,GAAG4B,SAAS;EACrD9B,KAAK,CAAC+B,IAAI,GAAG,GAAGH,UAAU,OAAO;EACjC;EACA5B,KAAK,CAACgC,QAAQ,GAAGJ,UAAU;EAC3B;EACAK,MAAM,CAACC,UAAU,CAACC,gBAAgB,CAACnC,KAAK,CAAC;AAC3C","ignoreList":[]}
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":[]}
@@ -1,16 +1,19 @@
1
1
  'use strict';
2
2
 
3
- import { initializeUIRuntime } from "./initializers.js";
4
- import { WorkletsModule } from "./WorkletsModule/index.js";
5
-
6
- // TODO: Specify the initialization pipeline since now there's no
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
@@ -1 +1 @@
1
- {"version":3,"names":["initializeUIRuntime","WorkletsModule","logger","LogLevel","registerLoggerConfig","updateLoggerConfig","createWorkletRuntime","runOnRuntime","shareableMappingCache","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","callMicrotasks","executeOnUIRuntimeSync","runOnJS","runOnUI","runOnUIAsync","isWorkletFunction"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,mBAAmB,QAAQ,mBAAgB;AACpD,SAASC,cAAc,QAAQ,2BAAkB;;AAEjD;AACA;AACAD,mBAAmB,CAACC,cAAc,CAAC;AAGnC,SACEC,MAAM,EACNC,QAAQ,EACRC,oBAAoB,EACpBC,kBAAkB,QACb,mBAAU;AACjB,SAASC,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,SAAShB,cAAc,QAAQ,2BAAkB","ignoreList":[]}
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 { mockedRequestAnimationFrame } from "./animationFrameQueue/mockedRequestAnimationFrame.js";
4
- import { setupRequestAnimationFrame } from "./animationFrameQueue/requestAnimationFrame.js";
5
- import { reportFatalErrorOnJS } from "./errors.js";
6
- import { DEFAULT_LOGGER_CONFIG, logToLogBoxAndConsole, registerLoggerConfig, replaceLoggerImplementation } from "./logger/index.js";
7
- import { isJest, isWeb, shouldBeUseWeb } from "./PlatformChecker.js";
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
- const IS_JEST = isJest();
12
- const SHOULD_BE_USE_WEB = shouldBeUseWeb();
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 createMemorySafeCapturableConsole() {
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
- global.console = {
127
- /* eslint-disable @typescript-eslint/unbound-method */
128
- assert: runOnJS(capturableConsole.assert),
129
- debug: runOnJS(capturableConsole.debug),
130
- log: runOnJS(capturableConsole.log),
131
- warn: runOnJS(capturableConsole.warn),
132
- error: runOnJS(capturableConsole.error),
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
- export function initializeUIRuntime(WorkletsModule) {
138
- if (isWeb()) {
70
+ let initialized = false;
71
+ export function init() {
72
+ if (initialized) {
139
73
  return;
140
74
  }
141
- if (!WorkletsModule) {
142
- throw new WorkletsError('Worklets are trying to initialize the UI runtime without a valid WorkletsModule');
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
- if (!SHOULD_BE_USE_WEB) {
154
- executeOnUIRuntimeSync(() => {
155
- 'worklet';
144
+ }
156
145
 
157
- setupCallGuard();
158
- setupConsole();
159
- setupMicrotasks();
160
- setupRequestAnimationFrame();
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