react-native-worklets 0.0.1-alpha → 0.1.0

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 (246) hide show
  1. package/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp +71 -0
  2. package/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h +38 -0
  3. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +131 -0
  4. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +82 -0
  5. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp +72 -0
  6. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h +44 -0
  7. package/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +94 -0
  8. package/Common/cpp/worklets/Registries/EventHandlerRegistry.h +49 -0
  9. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +8 -0
  10. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +39 -0
  11. package/Common/cpp/worklets/SharedItems/Shareables.cpp +326 -0
  12. package/Common/cpp/worklets/SharedItems/Shareables.h +345 -0
  13. package/Common/cpp/worklets/Tools/AsyncQueue.cpp +52 -0
  14. package/Common/cpp/worklets/Tools/AsyncQueue.h +35 -0
  15. package/Common/cpp/worklets/Tools/Defs.h +10 -0
  16. package/Common/cpp/worklets/Tools/JSISerializer.cpp +342 -0
  17. package/Common/cpp/worklets/Tools/JSISerializer.h +47 -0
  18. package/Common/cpp/worklets/Tools/JSLogger.cpp +16 -0
  19. package/Common/cpp/worklets/Tools/JSLogger.h +20 -0
  20. package/Common/cpp/worklets/Tools/JSScheduler.cpp +10 -0
  21. package/Common/cpp/worklets/Tools/JSScheduler.h +29 -0
  22. package/Common/cpp/worklets/Tools/PlatformLogger.h +16 -0
  23. package/Common/cpp/worklets/Tools/SingleInstanceChecker.h +72 -0
  24. package/Common/cpp/worklets/Tools/ThreadSafeQueue.h +49 -0
  25. package/Common/cpp/worklets/Tools/UIScheduler.cpp +19 -0
  26. package/Common/cpp/worklets/Tools/UIScheduler.h +22 -0
  27. package/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +29 -0
  28. package/Common/cpp/worklets/Tools/WorkletEventHandler.h +41 -0
  29. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +26 -0
  30. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +199 -0
  31. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +20 -0
  32. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +19 -0
  33. package/Common/cpp/worklets/WorkletRuntime/RuntimeInitialization.md +191 -0
  34. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp +19 -0
  35. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h +16 -0
  36. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp +108 -0
  37. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +127 -0
  38. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +183 -0
  39. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +90 -0
  40. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +36 -0
  41. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +179 -0
  42. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +22 -0
  43. package/LICENSE +20 -0
  44. package/README.md +27 -0
  45. package/RNWorklets.podspec +70 -0
  46. package/android/CMakeLists.txt +56 -0
  47. package/android/build.gradle +313 -0
  48. package/android/gradle.properties +5 -0
  49. package/android/proguard-rules.pro +3 -0
  50. package/android/spotless.gradle +9 -0
  51. package/android/src/main/AndroidManifest.xml +2 -0
  52. package/android/src/main/cpp/worklets/CMakeLists.txt +85 -0
  53. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp +63 -0
  54. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.h +41 -0
  55. package/android/src/main/cpp/worklets/android/AnimationFrameCallback.h +32 -0
  56. package/android/src/main/cpp/worklets/android/PlatformLogger.cpp +29 -0
  57. package/android/src/main/cpp/worklets/android/WorkletsModule.cpp +83 -0
  58. package/android/src/main/cpp/worklets/android/WorkletsModule.h +63 -0
  59. package/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp +13 -0
  60. package/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.java +60 -0
  61. package/android/src/main/java/com/swmansion/worklets/AnimationFrameQueue/AnimationFrameCallback.java +20 -0
  62. package/android/src/main/java/com/swmansion/worklets/AnimationFrameQueue/AnimationFrameQueue.java +113 -0
  63. package/android/src/main/java/com/swmansion/worklets/JSCallInvokerResolver.java +27 -0
  64. package/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThread.java +16 -0
  65. package/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThreadBase.java +72 -0
  66. package/android/src/main/java/com/swmansion/worklets/WorkletsModule.java +106 -0
  67. package/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java +49 -0
  68. package/android/src/paper/com/swmansion/worklets/NativeWorkletsModuleSpec.java +26 -0
  69. package/apple/worklets/apple/AnimationFrameQueue.h +15 -0
  70. package/apple/worklets/apple/AnimationFrameQueue.mm +81 -0
  71. package/apple/worklets/apple/AssertJavaScriptQueue.h +14 -0
  72. package/apple/worklets/apple/AssertTurboModuleManagerQueue.h +16 -0
  73. package/apple/worklets/apple/IOSUIScheduler.h +14 -0
  74. package/apple/worklets/apple/IOSUIScheduler.mm +24 -0
  75. package/apple/worklets/apple/PlatformLogger.mm +31 -0
  76. package/apple/worklets/apple/SlowAnimations.h +8 -0
  77. package/apple/worklets/apple/SlowAnimations.mm +47 -0
  78. package/apple/worklets/apple/WorkletsDisplayLink.h +21 -0
  79. package/apple/worklets/apple/WorkletsMessageThread.h +16 -0
  80. package/apple/worklets/apple/WorkletsMessageThread.mm +32 -0
  81. package/apple/worklets/apple/WorkletsModule.h +10 -0
  82. package/apple/worklets/apple/WorkletsModule.mm +85 -0
  83. package/lib/module/PlatformChecker.js +35 -0
  84. package/lib/module/PlatformChecker.js.map +1 -0
  85. package/lib/module/WorkletsError.js +13 -0
  86. package/lib/module/WorkletsError.js.map +1 -0
  87. package/lib/module/WorkletsModule/JSWorklets.js +36 -0
  88. package/lib/module/WorkletsModule/JSWorklets.js.map +1 -0
  89. package/lib/module/WorkletsModule/NativeWorklets.js +39 -0
  90. package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -0
  91. package/lib/module/WorkletsModule/index.js +4 -0
  92. package/lib/module/WorkletsModule/index.js.map +1 -0
  93. package/lib/module/WorkletsModule/workletsModuleInstance.js +7 -0
  94. package/lib/module/WorkletsModule/workletsModuleInstance.js.map +1 -0
  95. package/lib/module/WorkletsModule/workletsModuleInstance.web.js +5 -0
  96. package/lib/module/WorkletsModule/workletsModuleInstance.web.js.map +1 -0
  97. package/lib/module/WorkletsModule/workletsModuleProxy.js +4 -0
  98. package/lib/module/WorkletsModule/workletsModuleProxy.js.map +1 -0
  99. package/lib/module/animationFrameQueue/mockedRequestAnimationFrame.js +10 -0
  100. package/lib/module/animationFrameQueue/mockedRequestAnimationFrame.js.map +1 -0
  101. package/lib/module/animationFrameQueue/requestAnimationFrame.js +36 -0
  102. package/lib/module/animationFrameQueue/requestAnimationFrame.js.map +1 -0
  103. package/lib/module/errors.js +78 -0
  104. package/lib/module/errors.js.map +1 -0
  105. package/lib/module/index.js +17 -0
  106. package/lib/module/index.js.map +1 -0
  107. package/lib/module/initializers.js +158 -0
  108. package/lib/module/initializers.js.map +1 -0
  109. package/lib/module/logger/LogBox.js +15 -0
  110. package/lib/module/logger/LogBox.js.map +1 -0
  111. package/lib/module/logger/index.js +5 -0
  112. package/lib/module/logger/index.js.map +1 -0
  113. package/lib/module/logger/logger.js +137 -0
  114. package/lib/module/logger/logger.js.map +1 -0
  115. package/lib/module/privateGlobals.d.js +8 -0
  116. package/lib/module/privateGlobals.d.js.map +1 -0
  117. package/lib/module/runtimes.js +63 -0
  118. package/lib/module/runtimes.js.map +1 -0
  119. package/lib/module/shareableMappingCache.js +39 -0
  120. package/lib/module/shareableMappingCache.js.map +1 -0
  121. package/lib/module/shareables.js +417 -0
  122. package/lib/module/shareables.js.map +1 -0
  123. package/lib/module/specs/NativeWorkletsModule.js +5 -0
  124. package/lib/module/specs/NativeWorkletsModule.js.map +1 -0
  125. package/lib/module/specs/index.js +5 -0
  126. package/lib/module/specs/index.js.map +1 -0
  127. package/lib/module/threads.js +204 -0
  128. package/lib/module/threads.js.map +1 -0
  129. package/lib/module/valueUnpacker.js +83 -0
  130. package/lib/module/valueUnpacker.js.map +1 -0
  131. package/lib/module/workletFunction.js +37 -0
  132. package/lib/module/workletFunction.js.map +1 -0
  133. package/lib/module/workletTypes.js +12 -0
  134. package/lib/module/workletTypes.js.map +1 -0
  135. package/lib/typescript/PlatformChecker.d.ts +7 -0
  136. package/lib/typescript/PlatformChecker.d.ts.map +1 -0
  137. package/lib/typescript/WorkletsError.d.ts +3 -0
  138. package/lib/typescript/WorkletsError.d.ts.map +1 -0
  139. package/lib/typescript/WorkletsModule/JSWorklets.d.ts +3 -0
  140. package/lib/typescript/WorkletsModule/JSWorklets.d.ts.map +1 -0
  141. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts +5 -0
  142. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -0
  143. package/lib/typescript/WorkletsModule/index.d.ts +3 -0
  144. package/lib/typescript/WorkletsModule/index.d.ts.map +1 -0
  145. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts +2 -0
  146. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts.map +1 -0
  147. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts +2 -0
  148. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts.map +1 -0
  149. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +12 -0
  150. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +1 -0
  151. package/lib/typescript/animationFrameQueue/mockedRequestAnimationFrame.d.ts +6 -0
  152. package/lib/typescript/animationFrameQueue/mockedRequestAnimationFrame.d.ts.map +1 -0
  153. package/lib/typescript/animationFrameQueue/requestAnimationFrame.d.ts +2 -0
  154. package/lib/typescript/animationFrameQueue/requestAnimationFrame.d.ts.map +1 -0
  155. package/lib/typescript/errors.d.ts +19 -0
  156. package/lib/typescript/errors.d.ts.map +1 -0
  157. package/lib/typescript/index.d.ts +13 -0
  158. package/lib/typescript/index.d.ts.map +1 -0
  159. package/lib/typescript/initializers.d.ts +6 -0
  160. package/lib/typescript/initializers.d.ts.map +1 -0
  161. package/lib/typescript/logger/LogBox.d.ts +32 -0
  162. package/lib/typescript/logger/LogBox.d.ts.map +1 -0
  163. package/lib/typescript/logger/index.d.ts +3 -0
  164. package/lib/typescript/logger/index.d.ts.map +1 -0
  165. package/lib/typescript/logger/logger.d.ts +52 -0
  166. package/lib/typescript/logger/logger.d.ts.map +1 -0
  167. package/lib/typescript/runtimes.d.ts +16 -0
  168. package/lib/typescript/runtimes.d.ts.map +1 -0
  169. package/lib/typescript/shareableMappingCache.d.ts +16 -0
  170. package/lib/typescript/shareableMappingCache.d.ts.map +1 -0
  171. package/lib/typescript/shareables.d.ts +15 -0
  172. package/lib/typescript/shareables.d.ts.map +1 -0
  173. package/lib/typescript/specs/NativeWorkletsModule.d.ts +7 -0
  174. package/lib/typescript/specs/NativeWorkletsModule.d.ts.map +1 -0
  175. package/lib/typescript/specs/index.d.ts +3 -0
  176. package/lib/typescript/specs/index.d.ts.map +1 -0
  177. package/lib/typescript/threads.d.ts +49 -0
  178. package/lib/typescript/threads.d.ts.map +1 -0
  179. package/lib/typescript/valueUnpacker.d.ts +2 -0
  180. package/lib/typescript/valueUnpacker.d.ts.map +1 -0
  181. package/lib/typescript/workletFunction.d.ts +27 -0
  182. package/lib/typescript/workletFunction.d.ts.map +1 -0
  183. package/lib/typescript/workletTypes.d.ts +49 -0
  184. package/lib/typescript/workletTypes.d.ts.map +1 -0
  185. package/package.json +106 -8
  186. package/plugin/index.js +3 -0
  187. package/scripts/worklets_utils.rb +53 -0
  188. package/src/PlatformChecker.ts +43 -0
  189. package/src/WorkletsError.ts +13 -0
  190. package/src/WorkletsModule/JSWorklets.ts +57 -0
  191. package/src/WorkletsModule/NativeWorklets.ts +68 -0
  192. package/src/WorkletsModule/index.ts +7 -0
  193. package/src/WorkletsModule/workletsModuleInstance.ts +9 -0
  194. package/src/WorkletsModule/workletsModuleInstance.web.ts +5 -0
  195. package/src/WorkletsModule/workletsModuleProxy.ts +30 -0
  196. package/src/animationFrameQueue/mockedRequestAnimationFrame.ts +11 -0
  197. package/src/animationFrameQueue/requestAnimationFrame.ts +41 -0
  198. package/src/errors.ts +103 -0
  199. package/src/index.ts +42 -0
  200. package/src/initializers.ts +175 -0
  201. package/src/logger/LogBox.ts +55 -0
  202. package/src/logger/index.ts +3 -0
  203. package/src/logger/logger.ts +155 -0
  204. package/src/privateGlobals.d.ts +41 -0
  205. package/src/runtimes.ts +92 -0
  206. package/src/shareableMappingCache.ts +44 -0
  207. package/src/shareables.ts +577 -0
  208. package/src/specs/NativeWorkletsModule.ts +9 -0
  209. package/src/specs/index.ts +5 -0
  210. package/src/threads.ts +275 -0
  211. package/src/valueUnpacker.ts +110 -0
  212. package/src/workletFunction.ts +47 -0
  213. package/src/workletTypes.ts +76 -0
  214. package/Animated.js +0 -13
  215. package/AnimatedEvent.js +0 -167
  216. package/AnimatedImplementation.js +0 -666
  217. package/CoreAnimated.js +0 -43
  218. package/Easing.js +0 -236
  219. package/NativeAnimatedHelper.js +0 -226
  220. package/SpringConfig.js +0 -79
  221. package/animations/Animation.js +0 -36
  222. package/animations/DecayAnimation.js +0 -70
  223. package/animations/SpringAnimation.js +0 -125
  224. package/animations/TimingAnimation.js +0 -70
  225. package/bezier.js +0 -128
  226. package/createAnimatedComponent.js +0 -188
  227. package/nodes/AnimatedBlock.js +0 -19
  228. package/nodes/AnimatedClock.js +0 -76
  229. package/nodes/AnimatedCond.js +0 -23
  230. package/nodes/AnimatedDetach.js +0 -15
  231. package/nodes/AnimatedInterpolation.js +0 -338
  232. package/nodes/AnimatedNode.js +0 -97
  233. package/nodes/AnimatedOnChange.js +0 -28
  234. package/nodes/AnimatedOp.js +0 -17
  235. package/nodes/AnimatedProps.js +0 -154
  236. package/nodes/AnimatedSet.js +0 -19
  237. package/nodes/AnimatedStartClock.js +0 -21
  238. package/nodes/AnimatedStopClock.js +0 -21
  239. package/nodes/AnimatedStyle.js +0 -89
  240. package/nodes/AnimatedTracking.js +0 -36
  241. package/nodes/AnimatedTransform.js +0 -93
  242. package/nodes/AnimatedValue.js +0 -271
  243. package/nodes/AnimatedWithInput.js +0 -21
  244. package/nodes/SpringNode.js +0 -106
  245. package/nodes/TimingStep.js +0 -44
  246. package/utils.js +0 -28
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ import { Platform } from 'react-native';
4
+
5
+ // This type is necessary since some libraries tend to do a lib check
6
+ // and this file causes type errors on `global` access.
7
+
8
+ export function isJest() {
9
+ return !!process.env.JEST_WORKER_ID;
10
+ }
11
+
12
+ // `isChromeDebugger` also returns true in Jest environment, so `isJest()` check should always be performed first
13
+ export function isChromeDebugger() {
14
+ return (!global.nativeCallSyncHook || !!global.__REMOTEDEV__) && !global.RN$Bridgeless;
15
+ }
16
+ export function isWeb() {
17
+ return Platform.OS === 'web';
18
+ }
19
+ export function isAndroid() {
20
+ return Platform.OS === 'android';
21
+ }
22
+ function isWindows() {
23
+ return Platform.OS === 'windows';
24
+ }
25
+ export function shouldBeUseWeb() {
26
+ return isJest() || isChromeDebugger() || isWeb() || isWindows();
27
+ }
28
+ export function isWindowAvailable() {
29
+ // the window object is unavailable when building the server portion of a site that uses SSG
30
+ // this function shouldn't be used to conditionally render components
31
+ // https://www.joshwcomeau.com/react/the-perils-of-rehydration/
32
+ // @ts-ignore Fallback if `window` is undefined.
33
+ return typeof window !== 'undefined';
34
+ }
35
+ //# sourceMappingURL=PlatformChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","isJest","process","env","JEST_WORKER_ID","isChromeDebugger","global","nativeCallSyncHook","__REMOTEDEV__","RN$Bridgeless","isWeb","OS","isAndroid","isWindows","shouldBeUseWeb","isWindowAvailable","window"],"sourceRoot":"../../src","sources":["PlatformChecker.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,QAAQ,QAAQ,cAAc;;AAEvC;AACA;;AAGA,OAAO,SAASC,MAAMA,CAAA,EAAY;EAChC,OAAO,CAAC,CAACC,OAAO,CAACC,GAAG,CAACC,cAAc;AACrC;;AAEA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAAY;EAC1C,OACE,CAAC,CAAEC,MAAM,CAAiBC,kBAAkB,IAC1C,CAAC,CAAED,MAAM,CAAiBE,aAAa,KACzC,CAAEF,MAAM,CAAiBG,aAAa;AAE1C;AAEA,OAAO,SAASC,KAAKA,CAAA,EAAY;EAC/B,OAAOV,QAAQ,CAACW,EAAE,KAAK,KAAK;AAC9B;AAEA,OAAO,SAASC,SAASA,CAAA,EAAY;EACnC,OAAOZ,QAAQ,CAACW,EAAE,KAAK,SAAS;AAClC;AAEA,SAASE,SAASA,CAAA,EAAY;EAC5B,OAAOb,QAAQ,CAACW,EAAE,KAAK,SAAS;AAClC;AAEA,OAAO,SAASG,cAAcA,CAAA,EAAG;EAC/B,OAAOb,MAAM,CAAC,CAAC,IAAII,gBAAgB,CAAC,CAAC,IAAIK,KAAK,CAAC,CAAC,IAAIG,SAAS,CAAC,CAAC;AACjE;AAEA,OAAO,SAASE,iBAAiBA,CAAA,EAAG;EAClC;EACA;EACA;EACA;EACA,OAAO,OAAOC,MAAM,KAAK,WAAW;AACtC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ import { createCustomError, registerCustomError } from "./errors.js";
4
+ export const WorkletsError = createCustomError('Worklets');
5
+
6
+ // To capture it in a the registering worklet's closure.
7
+ const WorkletsErrorConstructor = WorkletsError;
8
+ export function registerWorkletsError() {
9
+ 'worklet';
10
+
11
+ registerCustomError(WorkletsErrorConstructor, 'Worklets');
12
+ }
13
+ //# sourceMappingURL=WorkletsError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createCustomError","registerCustomError","WorkletsError","WorkletsErrorConstructor","registerWorkletsError"],"sourceRoot":"../../src","sources":["WorkletsError.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,iBAAiB,EAAEC,mBAAmB,QAAQ,aAAU;AAEjE,OAAO,MAAMC,aAAa,GAAGF,iBAAiB,CAAC,UAAU,CAAC;;AAE1D;AACA,MAAMG,wBAAwB,GAAGD,aAAa;AAE9C,OAAO,SAASE,qBAAqBA,CAAA,EAAG;EACtC,SAAS;;EACTH,mBAAmB,CAACE,wBAAwB,EAAE,UAAU,CAAC;AAC3D","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ /* eslint-disable reanimated/use-reanimated-error */
2
+ 'use strict';
3
+
4
+ import { mockedRequestAnimationFrame } from "../animationFrameQueue/mockedRequestAnimationFrame.js";
5
+ import { isJest } from "../PlatformChecker.js";
6
+ import { WorkletsError } from "../WorkletsError.js";
7
+ export function createJSWorkletsModule() {
8
+ return new JSWorklets();
9
+ }
10
+
11
+ // In Node.js environments (like when static rendering with Expo Router)
12
+ // requestAnimationFrame is unavailable, so we use our mock.
13
+ // It also has to be mocked for Jest purposes (see `initializeUIRuntime`).
14
+ const requestAnimationFrameImpl = isJest() || !globalThis.requestAnimationFrame ? mockedRequestAnimationFrame : globalThis.requestAnimationFrame;
15
+ class JSWorklets {
16
+ makeShareableClone() {
17
+ throw new WorkletsError('makeShareableClone should never be called in JSWorklets.');
18
+ }
19
+ scheduleOnUI(worklet) {
20
+ // TODO: `requestAnimationFrame` should be used exclusively in Reanimated
21
+
22
+ // @ts-ignore web implementation has still not been updated after the rewrite,
23
+ // this will be addressed once the web implementation updates are ready
24
+ requestAnimationFrameImpl(worklet);
25
+ }
26
+ executeOnUIRuntimeSync(_shareable) {
27
+ throw new WorkletsError('`executeOnUIRuntimeSync` is not available in JSWorklets.');
28
+ }
29
+ createWorkletRuntime(_name, _initializer) {
30
+ throw new WorkletsError('createWorkletRuntime is not available in JSWorklets.');
31
+ }
32
+ scheduleOnRuntime() {
33
+ throw new WorkletsError('scheduleOnRuntime is not available in JSWorklets.');
34
+ }
35
+ }
36
+ //# sourceMappingURL=JSWorklets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mockedRequestAnimationFrame","isJest","WorkletsError","createJSWorkletsModule","JSWorklets","requestAnimationFrameImpl","globalThis","requestAnimationFrame","makeShareableClone","scheduleOnUI","worklet","executeOnUIRuntimeSync","_shareable","createWorkletRuntime","_name","_initializer","scheduleOnRuntime"],"sourceRoot":"../../../src","sources":["WorkletsModule/JSWorklets.ts"],"mappings":"AAAA;AACA,YAAY;;AAEZ,SAASA,2BAA2B,QAAQ,uDAAoD;AAChG,SAASC,MAAM,QAAQ,uBAAoB;AAC3C,SAASC,aAAa,QAAQ,qBAAkB;AAIhD,OAAO,SAASC,sBAAsBA,CAAA,EAAoB;EACxD,OAAO,IAAIC,UAAU,CAAC,CAAC;AACzB;;AAEA;AACA;AACA;AACA,MAAMC,yBAAyB,GAC7BJ,MAAM,CAAC,CAAC,IAAI,CAACK,UAAU,CAACC,qBAAqB,GACzCP,2BAA2B,GAC3BM,UAAU,CAACC,qBAAqB;AAEtC,MAAMH,UAAU,CAA4B;EAC1CI,kBAAkBA,CAAA,EAAiC;IACjD,MAAM,IAAIN,aAAa,CACrB,0DACF,CAAC;EACH;EAEAO,YAAYA,CAASC,OAA6B,EAAE;IAClD;;IAEA;IACA;IACAL,yBAAyB,CAACK,OAAO,CAAC;EACpC;EAEAC,sBAAsBA,CAAOC,UAA2B,EAAK;IAC3D,MAAM,IAAIV,aAAa,CACrB,0DACF,CAAC;EACH;EAEAW,oBAAoBA,CAClBC,KAAa,EACbC,YAAsC,EACtB;IAChB,MAAM,IAAIb,aAAa,CACrB,sDACF,CAAC;EACH;EAEAc,iBAAiBA,CAAA,EAAG;IAClB,MAAM,IAAId,aAAa,CACrB,mDACF,CAAC;EACH;AACF","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ /* eslint-disable reanimated/use-reanimated-error */
2
+ 'use strict';
3
+
4
+ import { WorkletsTurboModule } from "../specs/index.js";
5
+ import { getValueUnpackerCode } from "../valueUnpacker.js";
6
+ import { WorkletsError } from "../WorkletsError.js";
7
+ export function createNativeWorkletsModule() {
8
+ return new NativeWorklets();
9
+ }
10
+ class NativeWorklets {
11
+ #workletsModuleProxy;
12
+ constructor() {
13
+ if (global.__workletsModuleProxy === undefined) {
14
+ const valueUnpackerCode = getValueUnpackerCode();
15
+ WorkletsTurboModule?.installTurboModule(valueUnpackerCode);
16
+ }
17
+ if (global.__workletsModuleProxy === undefined) {
18
+ throw new WorkletsError(`Native part of Worklets doesn't seem to be initialized.
19
+ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#native-part-of-reanimated-doesnt-seem-to-be-initialized for more details.`);
20
+ }
21
+ this.#workletsModuleProxy = global.__workletsModuleProxy;
22
+ }
23
+ makeShareableClone(value, shouldPersistRemote, nativeStateSource) {
24
+ return this.#workletsModuleProxy.makeShareableClone(value, shouldPersistRemote, nativeStateSource);
25
+ }
26
+ scheduleOnUI(shareable) {
27
+ return this.#workletsModuleProxy.scheduleOnUI(shareable);
28
+ }
29
+ executeOnUIRuntimeSync(shareable) {
30
+ return this.#workletsModuleProxy.executeOnUIRuntimeSync(shareable);
31
+ }
32
+ createWorkletRuntime(name, initializer) {
33
+ return this.#workletsModuleProxy.createWorkletRuntime(name, initializer);
34
+ }
35
+ scheduleOnRuntime(workletRuntime, shareableWorklet) {
36
+ return this.#workletsModuleProxy.scheduleOnRuntime(workletRuntime, shareableWorklet);
37
+ }
38
+ }
39
+ //# sourceMappingURL=NativeWorklets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WorkletsTurboModule","getValueUnpackerCode","WorkletsError","createNativeWorkletsModule","NativeWorklets","workletsModuleProxy","constructor","global","__workletsModuleProxy","undefined","valueUnpackerCode","installTurboModule","makeShareableClone","value","shouldPersistRemote","nativeStateSource","scheduleOnUI","shareable","executeOnUIRuntimeSync","createWorkletRuntime","name","initializer","scheduleOnRuntime","workletRuntime","shareableWorklet"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.ts"],"mappings":"AAAA;AACA,YAAY;;AAEZ,SAASA,mBAAmB,QAAQ,mBAAU;AAC9C,SAASC,oBAAoB,QAAQ,qBAAkB;AACvD,SAASC,aAAa,QAAQ,qBAAkB;AAMhD,OAAO,SAASC,0BAA0BA,CAAA,EAAoB;EAC5D,OAAO,IAAIC,cAAc,CAAC,CAAC;AAC7B;AAEA,MAAMA,cAAc,CAAC;EACnB,CAACC,mBAAmB;EAEpBC,WAAWA,CAAA,EAAG;IACZ,IAAIC,MAAM,CAACC,qBAAqB,KAAKC,SAAS,EAAE;MAC9C,MAAMC,iBAAiB,GAAGT,oBAAoB,CAAC,CAAC;MAChDD,mBAAmB,EAAEW,kBAAkB,CAACD,iBAAiB,CAAC;IAC5D;IACA,IAAIH,MAAM,CAACC,qBAAqB,KAAKC,SAAS,EAAE;MAC9C,MAAM,IAAIP,aAAa,CACrB;AACR,6JACM,CAAC;IACH;IACA,IAAI,CAAC,CAACG,mBAAmB,GAAGE,MAAM,CAACC,qBAAqB;EAC1D;EAEAI,kBAAkBA,CAChBC,KAAa,EACbC,mBAA4B,EAC5BC,iBAA0B,EAC1B;IACA,OAAO,IAAI,CAAC,CAACV,mBAAmB,CAACO,kBAAkB,CACjDC,KAAK,EACLC,mBAAmB,EACnBC,iBACF,CAAC;EACH;EAEAC,YAAYA,CAASC,SAA+B,EAAE;IACpD,OAAO,IAAI,CAAC,CAACZ,mBAAmB,CAACW,YAAY,CAACC,SAAS,CAAC;EAC1D;EAEAC,sBAAsBA,CACpBD,SAA+B,EACtB;IACT,OAAO,IAAI,CAAC,CAACZ,mBAAmB,CAACa,sBAAsB,CAACD,SAAS,CAAC;EACpE;EAEAE,oBAAoBA,CAACC,IAAY,EAAEC,WAAqC,EAAE;IACxE,OAAO,IAAI,CAAC,CAAChB,mBAAmB,CAACc,oBAAoB,CAACC,IAAI,EAAEC,WAAW,CAAC;EAC1E;EAEAC,iBAAiBA,CACfC,cAA8B,EAC9BC,gBAAiC,EACjC;IACA,OAAO,IAAI,CAAC,CAACnB,mBAAmB,CAACiB,iBAAiB,CAChDC,cAAc,EACdC,gBACF,CAAC;EACH;AACF","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ export { WorkletsModule } from './workletsModuleInstance';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,0BAA0B","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ import { shouldBeUseWeb } from "../PlatformChecker.js";
4
+ import { createJSWorkletsModule } from "./JSWorklets.js";
5
+ import { createNativeWorkletsModule } from "./NativeWorklets.js";
6
+ export const WorkletsModule = shouldBeUseWeb() ? createJSWorkletsModule() : createNativeWorkletsModule();
7
+ //# sourceMappingURL=workletsModuleInstance.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ import { createJSWorkletsModule } from "./JSWorklets.js";
4
+ export const WorkletsModule = createJSWorkletsModule();
5
+ //# sourceMappingURL=workletsModuleInstance.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createJSWorkletsModule","WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/workletsModuleInstance.web.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,sBAAsB,QAAQ,iBAAc;AAErD,OAAO,MAAMC,cAAc,GAAGD,sBAAsB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ export {};
4
+ //# sourceMappingURL=workletsModuleProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["WorkletsModule/workletsModuleProxy.ts"],"mappings":"AAAA,YAAY;;AAAC","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * This is Jest implementation of `requestAnimationFrame` that is required by
5
+ * React Native for test purposes.
6
+ */
7
+ export function mockedRequestAnimationFrame(callback) {
8
+ return setTimeout(() => callback(performance.now()), 0);
9
+ }
10
+ //# sourceMappingURL=mockedRequestAnimationFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mockedRequestAnimationFrame","callback","setTimeout","performance","now"],"sourceRoot":"../../../src","sources":["animationFrameQueue/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,36 @@
1
+ 'use strict';
2
+
3
+ import { callMicrotasks } from "../threads.js";
4
+ export function setupRequestAnimationFrame() {
5
+ 'worklet';
6
+
7
+ // Jest mocks requestAnimationFrame API and it does not like if that mock gets overridden
8
+ // so we avoid doing requestAnimationFrame batching in Jest environment.
9
+ const nativeRequestAnimationFrame = global.requestAnimationFrame;
10
+ let animationFrameCallbacks = [];
11
+ let flushRequested = false;
12
+ global.__flushAnimationFrame = frameTimestamp => {
13
+ const currentCallbacks = animationFrameCallbacks;
14
+ animationFrameCallbacks = [];
15
+ currentCallbacks.forEach(f => f(frameTimestamp));
16
+ callMicrotasks();
17
+ };
18
+ global.requestAnimationFrame = callback => {
19
+ animationFrameCallbacks.push(callback);
20
+ if (!flushRequested) {
21
+ flushRequested = true;
22
+ nativeRequestAnimationFrame(timestamp => {
23
+ flushRequested = false;
24
+ global.__frameTimestamp = timestamp;
25
+ global.__flushAnimationFrame(timestamp);
26
+ global.__frameTimestamp = undefined;
27
+ });
28
+ }
29
+ // Reanimated currently does not support cancelling callbacks requested with
30
+ // requestAnimationFrame. We return -1 as identifier which isn't in line
31
+ // with the spec but it should give users better clue in case they actually
32
+ // attempt to store the value returned from rAF and use it for cancelling.
33
+ return -1;
34
+ };
35
+ }
36
+ //# sourceMappingURL=requestAnimationFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["callMicrotasks","setupRequestAnimationFrame","nativeRequestAnimationFrame","global","requestAnimationFrame","animationFrameCallbacks","flushRequested","__flushAnimationFrame","frameTimestamp","currentCallbacks","forEach","f","callback","push","timestamp","__frameTimestamp","undefined"],"sourceRoot":"../../../src","sources":["animationFrameQueue/requestAnimationFrame.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,eAAY;AAE3C,OAAO,SAASC,0BAA0BA,CAAA,EAAG;EAC3C,SAAS;;EAET;EACA;EACA,MAAMC,2BAA2B,GAAGC,MAAM,CAACC,qBAAqB;EAEhE,IAAIC,uBAA2D,GAAG,EAAE;EACpE,IAAIC,cAAc,GAAG,KAAK;EAE1BH,MAAM,CAACI,qBAAqB,GAAIC,cAAsB,IAAK;IACzD,MAAMC,gBAAgB,GAAGJ,uBAAuB;IAChDA,uBAAuB,GAAG,EAAE;IAC5BI,gBAAgB,CAACC,OAAO,CAAEC,CAAC,IAAKA,CAAC,CAACH,cAAc,CAAC,CAAC;IAClDR,cAAc,CAAC,CAAC;EAClB,CAAC;EAEDG,MAAM,CAACC,qBAAqB,GAC1BQ,QAAqC,IAC1B;IACXP,uBAAuB,CAACQ,IAAI,CAACD,QAAQ,CAAC;IACtC,IAAI,CAACN,cAAc,EAAE;MACnBA,cAAc,GAAG,IAAI;MACrBJ,2BAA2B,CAAEY,SAAS,IAAK;QACzCR,cAAc,GAAG,KAAK;QACtBH,MAAM,CAACY,gBAAgB,GAAGD,SAAS;QACnCX,MAAM,CAACI,qBAAqB,CAACO,SAAS,CAAC;QACvCX,MAAM,CAACY,gBAAgB,GAAGC,SAAS;MACrC,CAAC,CAAC;IACJ;IACA;IACA;IACA;IACA;IACA,OAAO,CAAC,CAAC;EACX,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ // signed type
4
+
5
+ export function createCustomError(name) {
6
+ const constructor = function CustomError(message) {
7
+ 'worklet';
8
+
9
+ const prefix = `[${name}]`;
10
+ // eslint-disable-next-line reanimated/use-worklets-error
11
+ const errorInstance = new Error(message ? `${prefix} ${message}` : prefix);
12
+ errorInstance.name = `${name}Error`;
13
+ return errorInstance;
14
+ };
15
+ Object.defineProperty(constructor, 'name', {
16
+ value: `${name}Error`
17
+ });
18
+ return constructor;
19
+ }
20
+
21
+ /** Registers custom errors in global scope. Use it only for Worklet runtimes. */
22
+ export function registerCustomError(constructor, name) {
23
+ 'worklet';
24
+
25
+ if (!_WORKLET) {
26
+ // eslint-disable-next-line reanimated/use-worklets-error
27
+ throw new Error('[Worklets] registerCustomError() must be called on a Worklet runtime');
28
+ }
29
+ global[`${name}Error`] = constructor;
30
+ }
31
+ const _workletStackDetails = new Map();
32
+ export function registerWorkletStackDetails(hash, stackDetails) {
33
+ _workletStackDetails.set(hash, stackDetails);
34
+ }
35
+ function getBundleOffset(error) {
36
+ const frame = error.stack?.split('\n')?.[0];
37
+ if (frame) {
38
+ const parsedFrame = /@([^@]+):(\d+):(\d+)/.exec(frame);
39
+ if (parsedFrame) {
40
+ const [, file, line, col] = parsedFrame;
41
+ return [file, Number(line), Number(col)];
42
+ }
43
+ }
44
+ return ['unknown', 0, 0];
45
+ }
46
+ function processStack(stack) {
47
+ const workletStackEntries = stack.match(/worklet_(\d+):(\d+):(\d+)/g);
48
+ let result = stack;
49
+ workletStackEntries?.forEach(match => {
50
+ const [, hash, origLine, origCol] = match.split(/:|_/).map(Number);
51
+ const errorDetails = _workletStackDetails.get(hash);
52
+ if (!errorDetails) {
53
+ return;
54
+ }
55
+ const [error, lineOffset, colOffset] = errorDetails;
56
+ const [bundleFile, bundleLine, bundleCol] = getBundleOffset(error);
57
+ const line = origLine + bundleLine + lineOffset;
58
+ const col = origCol + bundleCol + colOffset;
59
+ result = result.replace(match, `${bundleFile}:${line}:${col}`);
60
+ });
61
+ return result;
62
+ }
63
+ export function reportFatalErrorOnJS({
64
+ message,
65
+ stack,
66
+ moduleName
67
+ }) {
68
+ // eslint-disable-next-line reanimated/use-worklets-error
69
+ const error = new Error();
70
+ error.message = message;
71
+ error.stack = stack ? processStack(stack) : undefined;
72
+ error.name = `${moduleName}Error`;
73
+ // @ts-ignore React Native's ErrorUtils implementation extends the Error type with jsEngine field
74
+ error.jsEngine = moduleName;
75
+ // @ts-ignore the reportFatalError method is an internal method of ErrorUtils not exposed in the type definitions
76
+ global.ErrorUtils.reportFatalError(error);
77
+ }
78
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createCustomError","name","constructor","CustomError","message","prefix","errorInstance","Error","Object","defineProperty","value","registerCustomError","_WORKLET","global","_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","moduleName","undefined","jsEngine","ErrorUtils","reportFatalError"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":"AAAA,YAAY;;AAI6D;;AAQzE,OAAO,SAASA,iBAAiBA,CAC/BC,IAAW,EACoB;EAC/B,MAAMC,WAAW,GAAG,SAASC,WAAWA,CAACC,OAAgB,EAAE;IACzD,SAAS;;IACT,MAAMC,MAAM,GAAG,IAAIJ,IAAI,GAAG;IAC1B;IACA,MAAMK,aAAa,GAAG,IAAIC,KAAK,CAACH,OAAO,GAAG,GAAGC,MAAM,IAAID,OAAO,EAAE,GAAGC,MAAM,CAAC;IAC1EC,aAAa,CAACL,IAAI,GAAG,GAAGA,IAAI,OAAO;IACnC,OAAOK,aAAa;EACtB,CAAC;EAEDE,MAAM,CAACC,cAAc,CAACP,WAAW,EAAE,MAAM,EAAE;IAAEQ,KAAK,EAAE,GAAGT,IAAI;EAAQ,CAAC,CAAC;EAErE,OAAOC,WAAW;AACpB;;AAEA;AACA,OAAO,SAASS,mBAAmBA,CACjCT,WAA0C,EAC1CD,IAAW,EACX;EACA,SAAS;;EACT,IAAI,CAACW,QAAQ,EAAE;IACb;IACA,MAAM,IAAIL,KAAK,CACb,sEACF,CAAC;EACH;EACCM,MAAM,CAA6B,GAAGZ,IAAI,OAAO,CAAC,GAAGC,WAAW;AACnE;AAEA,MAAMY,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;EACnC3C,OAAO;EACPmB,KAAK;EACLyB;AAKF,CAAC,EAAE;EACD;EACA,MAAM3B,KAAK,GAAG,IAAId,KAAK,CAAC,CAAC;EACzBc,KAAK,CAACjB,OAAO,GAAGA,OAAO;EACvBiB,KAAK,CAACE,KAAK,GAAGA,KAAK,GAAGQ,YAAY,CAACR,KAAK,CAAC,GAAG0B,SAAS;EACrD5B,KAAK,CAACpB,IAAI,GAAG,GAAG+C,UAAU,OAAO;EACjC;EACA3B,KAAK,CAAC6B,QAAQ,GAAGF,UAAU;EAC3B;EACAnC,MAAM,CAACsC,UAAU,CAACC,gBAAgB,CAAC/B,KAAK,CAAC;AAC3C","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ 'use strict';
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 { createCustomError, registerCustomError } from "./errors.js";
10
+ export { logger, LogLevel, registerLoggerConfig, updateLoggerConfig } from "./logger/index.js";
11
+ export { createWorkletRuntime, runOnRuntime } from "./runtimes.js";
12
+ export { shareableMappingCache } from "./shareableMappingCache.js";
13
+ export { makeShareable, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive } from "./shareables.js";
14
+ export { callMicrotasks, executeOnUIRuntimeSync, runOnJS, runOnUI, runOnUIImmediately } from "./threads.js";
15
+ export { isWorkletFunction } from "./workletFunction.js";
16
+ export { WorkletsModule } from "./WorkletsModule/index.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["initializeUIRuntime","WorkletsModule","createCustomError","registerCustomError","logger","LogLevel","registerLoggerConfig","updateLoggerConfig","createWorkletRuntime","runOnRuntime","shareableMappingCache","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","callMicrotasks","executeOnUIRuntimeSync","runOnJS","runOnUI","runOnUIImmediately","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,SAASC,iBAAiB,EAAEC,mBAAmB,QAAQ,aAAU;AAEjE,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,kBAAkB,QACb,cAAW;AAClB,SAASC,iBAAiB,QAAQ,sBAAmB;AAErD,SAASlB,cAAc,QAAQ,2BAAkB","ignoreList":[]}
@@ -0,0 +1,158 @@
1
+ 'use strict';
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 { isChromeDebugger, isJest, isWeb, shouldBeUseWeb } from "./PlatformChecker.js";
8
+ import { executeOnUIRuntimeSync, runOnJS, setupMicrotasks } from "./threads.js";
9
+ import { registerWorkletsError, WorkletsError } from "./WorkletsError.js";
10
+ const IS_JEST = isJest();
11
+ const SHOULD_BE_USE_WEB = shouldBeUseWeb();
12
+ const IS_CHROME_DEBUGGER = isChromeDebugger();
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
+ // Register WorkletsError and logger config in the UI runtime global scope.
39
+ // (we are using `executeOnUIRuntimeSync` here to make sure that the changes
40
+ // are applied before any async operations are executed on the UI runtime)
41
+ executeOnUIRuntimeSync(registerWorkletsError)();
42
+ executeOnUIRuntimeSync(registerLoggerConfig)(DEFAULT_LOGGER_CONFIG);
43
+ executeOnUIRuntimeSync(overrideLogFunctionImplementation)();
44
+ }
45
+
46
+ // callGuard is only used with debug builds
47
+ export function callGuardDEV(fn, ...args) {
48
+ 'worklet';
49
+
50
+ try {
51
+ return fn(...args);
52
+ } catch (e) {
53
+ if (global.__ErrorUtils) {
54
+ global.__ErrorUtils.reportFatalError(e);
55
+ } else {
56
+ throw e;
57
+ }
58
+ }
59
+ }
60
+ export function setupCallGuard() {
61
+ 'worklet';
62
+
63
+ global.__callGuardDEV = callGuardDEV;
64
+ global.__ErrorUtils = {
65
+ reportFatalError: error => {
66
+ runOnJS(reportFatalErrorOnJS)({
67
+ message: error.message,
68
+ moduleName: 'Worklets',
69
+ stack: error.stack
70
+ });
71
+ }
72
+ };
73
+ }
74
+
75
+ /**
76
+ * Currently there seems to be a bug in the JSI layer which causes a crash when
77
+ * we try to copy some of the console methods, i.e. `clear` or `dirxml`.
78
+ *
79
+ * The crash happens only in React Native 0.75. It's not reproducible in neither
80
+ * 0.76 nor 0.74. It also happens only in the configuration of a debug app and
81
+ * production bundle.
82
+ *
83
+ * I haven't yet discovered what exactly causes the crash. It's tied to the
84
+ * console methods sometimes being `HostFunction`s. Therefore, as a workaround
85
+ * we don't copy the methods as they are in the original console object, we copy
86
+ * JavaScript wrappers instead.
87
+ */
88
+ function createMemorySafeCapturableConsole() {
89
+ const consoleCopy = Object.fromEntries(Object.entries(console).map(([methodName, method]) => {
90
+ const methodWrapper = function methodWrapper(...args) {
91
+ return method(...args);
92
+ };
93
+ if (method.name) {
94
+ /**
95
+ * Set the original method name as the wrapper name if available.
96
+ *
97
+ * It might be unnecessary but if we want to fully mimic the console
98
+ * object we should take into the account the fact some code might rely
99
+ * on the method name.
100
+ */
101
+ Object.defineProperty(methodWrapper, 'name', {
102
+ value: method.name,
103
+ writable: false
104
+ });
105
+ }
106
+ return [methodName, methodWrapper];
107
+ }));
108
+ return consoleCopy;
109
+ }
110
+
111
+ // We really have to create a copy of console here. Function runOnJS we use on elements inside
112
+ // this object makes it not configurable
113
+ const capturableConsole = createMemorySafeCapturableConsole();
114
+ export function setupConsole() {
115
+ 'worklet';
116
+
117
+ if (!IS_CHROME_DEBUGGER) {
118
+ // @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
119
+ global.console = {
120
+ /* eslint-disable @typescript-eslint/unbound-method */
121
+ assert: runOnJS(capturableConsole.assert),
122
+ debug: runOnJS(capturableConsole.debug),
123
+ log: runOnJS(capturableConsole.log),
124
+ warn: runOnJS(capturableConsole.warn),
125
+ error: runOnJS(capturableConsole.error),
126
+ info: runOnJS(capturableConsole.info)
127
+ /* eslint-enable @typescript-eslint/unbound-method */
128
+ };
129
+ }
130
+ }
131
+ export function initializeUIRuntime(WorkletsModule) {
132
+ if (isWeb()) {
133
+ return;
134
+ }
135
+ if (!WorkletsModule) {
136
+ throw new WorkletsError('Worklets are trying to initialize the UI runtime without a valid WorkletsModule');
137
+ }
138
+ if (IS_JEST) {
139
+ // requestAnimationFrame react-native jest's setup is incorrect as it polyfills
140
+ // the method directly using setTimeout, therefore the callback doesn't get the
141
+ // expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/packages/react-native/jest/setup.js#L28
142
+ // We override this setup here to make sure that callbacks get the proper timestamps
143
+ // when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame
144
+ // @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number
145
+ globalThis.requestAnimationFrame = mockedRequestAnimationFrame;
146
+ }
147
+ if (!SHOULD_BE_USE_WEB) {
148
+ executeOnUIRuntimeSync(() => {
149
+ 'worklet';
150
+
151
+ setupCallGuard();
152
+ setupConsole();
153
+ setupMicrotasks();
154
+ setupRequestAnimationFrame();
155
+ })();
156
+ }
157
+ }
158
+ //# sourceMappingURL=initializers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mockedRequestAnimationFrame","setupRequestAnimationFrame","reportFatalErrorOnJS","DEFAULT_LOGGER_CONFIG","logToLogBoxAndConsole","registerLoggerConfig","replaceLoggerImplementation","isChromeDebugger","isJest","isWeb","shouldBeUseWeb","executeOnUIRuntimeSync","runOnJS","setupMicrotasks","registerWorkletsError","WorkletsError","IS_JEST","SHOULD_BE_USE_WEB","IS_CHROME_DEBUGGER","overrideLogFunctionImplementation","data","global","_WORKLET","_log","console","log","_getAnimationTimestamp","performance","now","callGuardDEV","fn","args","e","__ErrorUtils","reportFatalError","setupCallGuard","__callGuardDEV","error","message","moduleName","stack","createMemorySafeCapturableConsole","consoleCopy","Object","fromEntries","entries","map","methodName","method","methodWrapper","name","defineProperty","value","writable","capturableConsole","setupConsole","assert","debug","warn","info","initializeUIRuntime","WorkletsModule","globalThis","requestAnimationFrame"],"sourceRoot":"../../src","sources":["initializers.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Copied from: react-native/Libraries/LogBox/Data/LogBoxData.js
5
+ * react-native/Libraries/LogBox/Data/parseLogBoxLog.js
6
+ */
7
+ import { LogBox as RNLogBox } from 'react-native';
8
+ const LogBox = RNLogBox;
9
+ const noop = () => {
10
+ // do nothing
11
+ };
12
+
13
+ // Do nothing when addLogBoxLog is called if LogBox is not available
14
+ export const addLogBoxLog = LogBox?.addLog?.bind(LogBox) ?? noop;
15
+ //# sourceMappingURL=LogBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LogBox","RNLogBox","noop","addLogBoxLog","addLog","bind"],"sourceRoot":"../../../src","sources":["logger/LogBox.ts"],"mappings":"AAAA,YAAY;;AACZ;AACA;AACA;AACA;AAGA,SAASA,MAAM,IAAIC,QAAQ,QAAQ,cAAc;AAwCjD,MAAMD,MAAM,GAAGC,QAA0B;AAEzC,MAAMC,IAAI,GAAGA,CAAA,KAAM;EACjB;AAAA,CACD;;AAED;AACA,OAAO,MAAMC,YAAY,GAAGH,MAAM,EAAEI,MAAM,EAAEC,IAAI,CAACL,MAAM,CAAC,IAAIE,IAAI","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ export * from "./LogBox.js";
4
+ export * from "./logger.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["logger/index.ts"],"mappings":"AAAA,YAAY;;AACZ,cAAc,aAAU;AACxB,cAAc,aAAU","ignoreList":[]}