@amazon-devices/react-native-worklets 1.0.0-rn-83

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 (348) 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/JSIWorkletsModuleProxy.cpp +712 -0
  4. package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h +88 -0
  5. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +89 -0
  6. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +80 -0
  7. package/Common/cpp/worklets/Public/AsyncQueue.h +14 -0
  8. package/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +94 -0
  9. package/Common/cpp/worklets/Registries/EventHandlerRegistry.h +51 -0
  10. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +8 -0
  11. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +40 -0
  12. package/Common/cpp/worklets/Resources/SynchronizableUnpacker.cpp +49 -0
  13. package/Common/cpp/worklets/Resources/Unpackers.h +6 -0
  14. package/Common/cpp/worklets/Resources/ValueUnpacker.cpp +53 -0
  15. package/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp +62 -0
  16. package/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h +46 -0
  17. package/Common/cpp/worklets/RunLoop/EventLoop.cpp +112 -0
  18. package/Common/cpp/worklets/RunLoop/EventLoop.h +52 -0
  19. package/Common/cpp/worklets/SharedItems/Serializable.cpp +545 -0
  20. package/Common/cpp/worklets/SharedItems/Serializable.h +473 -0
  21. package/Common/cpp/worklets/SharedItems/Synchronizable.cpp +67 -0
  22. package/Common/cpp/worklets/SharedItems/Synchronizable.h +59 -0
  23. package/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp +81 -0
  24. package/Common/cpp/worklets/SharedItems/SynchronizableAccess.h +45 -0
  25. package/Common/cpp/worklets/Tools/Defs.h +10 -0
  26. package/Common/cpp/worklets/Tools/FeatureFlags.cpp +15 -0
  27. package/Common/cpp/worklets/Tools/FeatureFlags.h +44 -0
  28. package/Common/cpp/worklets/Tools/JSISerializer.cpp +342 -0
  29. package/Common/cpp/worklets/Tools/JSISerializer.h +51 -0
  30. package/Common/cpp/worklets/Tools/JSLogger.cpp +68 -0
  31. package/Common/cpp/worklets/Tools/JSLogger.h +37 -0
  32. package/Common/cpp/worklets/Tools/JSScheduler.cpp +24 -0
  33. package/Common/cpp/worklets/Tools/JSScheduler.h +39 -0
  34. package/Common/cpp/worklets/Tools/PlatformLogger.h +16 -0
  35. package/Common/cpp/worklets/Tools/SingleInstanceChecker.h +82 -0
  36. package/Common/cpp/worklets/Tools/ThreadSafeQueue.h +49 -0
  37. package/Common/cpp/worklets/Tools/UIScheduler.cpp +19 -0
  38. package/Common/cpp/worklets/Tools/UIScheduler.h +26 -0
  39. package/Common/cpp/worklets/Tools/VersionUtils.cpp +75 -0
  40. package/Common/cpp/worklets/Tools/VersionUtils.h +28 -0
  41. package/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +29 -0
  42. package/Common/cpp/worklets/Tools/WorkletEventHandler.h +41 -0
  43. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +46 -0
  44. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +208 -0
  45. package/Common/cpp/worklets/Tools/WorkletsSystraceSection.h +161 -0
  46. package/Common/cpp/worklets/Tools/WorkletsVersion.cpp +54 -0
  47. package/Common/cpp/worklets/Tools/WorkletsVersion.h +20 -0
  48. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +38 -0
  49. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +21 -0
  50. package/Common/cpp/worklets/WorkletRuntime/RuntimeData.cpp +3 -0
  51. package/Common/cpp/worklets/WorkletRuntime/RuntimeData.h +12 -0
  52. package/Common/cpp/worklets/WorkletRuntime/RuntimeInitialization.md +191 -0
  53. package/Common/cpp/worklets/WorkletRuntime/RuntimeKind.h +16 -0
  54. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp +105 -0
  55. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h +63 -0
  56. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp +23 -0
  57. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h +16 -0
  58. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp +119 -0
  59. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +134 -0
  60. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +244 -0
  61. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +102 -0
  62. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +36 -0
  63. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +308 -0
  64. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +26 -0
  65. package/LICENSE +7 -0
  66. package/README.md +31 -0
  67. package/RNWorklets.podspec +94 -0
  68. package/SystemBundles/cc12deac6e91c435b76698c8445aed85612f2f88e733218d14f88a35d06fb0f4.bundle +10512 -0
  69. package/SystemBundles/cc12deac6e91c435b76698c8445aed85612f2f88e733218d14f88a35d06fb0f4.map +3771 -0
  70. package/SystemModules/amzn__react-native-worklets-1.modules.txt +39 -0
  71. package/SystemModules/amzn__react-native-worklets-1.private.modules.txt +61 -0
  72. package/SystemModules/keplerscript-system-bundle-config.json +7 -0
  73. package/android/CMakeLists.txt +124 -0
  74. package/android/build.gradle +350 -0
  75. package/android/gradle.properties +5 -0
  76. package/android/proguard-rules.pro +3 -0
  77. package/android/spotless.gradle +9 -0
  78. package/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java +149 -0
  79. package/android/src/legacyBundling/com/swmansion/worklets/WorkletsModule.java +122 -0
  80. package/android/src/main/AndroidManifest.xml +2 -0
  81. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp +63 -0
  82. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.h +43 -0
  83. package/android/src/main/cpp/worklets/android/AnimationFrameCallback.h +34 -0
  84. package/android/src/main/cpp/worklets/android/PlatformLogger.cpp +29 -0
  85. package/android/src/main/cpp/worklets/android/WorkletsModule.cpp +115 -0
  86. package/android/src/main/cpp/worklets/android/WorkletsModule.h +78 -0
  87. package/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp +13 -0
  88. package/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.java +60 -0
  89. package/android/src/main/java/com/swmansion/worklets/JSCallInvokerResolver.java +27 -0
  90. package/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThread.java +16 -0
  91. package/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThreadBase.java +73 -0
  92. package/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java +48 -0
  93. package/android/src/main/java/com/swmansion/worklets/runloop/AnimationFrameCallback.java +19 -0
  94. package/android/src/main/java/com/swmansion/worklets/runloop/AnimationFrameQueue.java +113 -0
  95. package/apple/worklets/apple/AnimationFrameQueue.h +15 -0
  96. package/apple/worklets/apple/AnimationFrameQueue.mm +135 -0
  97. package/apple/worklets/apple/AssertJavaScriptQueue.h +14 -0
  98. package/apple/worklets/apple/AssertTurboModuleManagerQueue.h +16 -0
  99. package/apple/worklets/apple/IOSUIScheduler.h +15 -0
  100. package/apple/worklets/apple/IOSUIScheduler.mm +29 -0
  101. package/apple/worklets/apple/PlatformLogger.mm +31 -0
  102. package/apple/worklets/apple/SlowAnimations.h +8 -0
  103. package/apple/worklets/apple/SlowAnimations.mm +45 -0
  104. package/apple/worklets/apple/WorkletsDisplayLink.h +21 -0
  105. package/apple/worklets/apple/WorkletsMessageThread.h +16 -0
  106. package/apple/worklets/apple/WorkletsMessageThread.mm +31 -0
  107. package/apple/worklets/apple/WorkletsModule.h +28 -0
  108. package/apple/worklets/apple/WorkletsModule.mm +121 -0
  109. package/bundleMode/index.d.ts +3 -0
  110. package/bundleMode/index.js +59 -0
  111. package/compatibility.json +11 -0
  112. package/kepler-compatibility.json +5 -0
  113. package/kepler-transformed-package-info.json +3 -0
  114. package/lib/module/PlatformChecker/PlatformChecker.js +8 -0
  115. package/lib/module/PlatformChecker/PlatformChecker.js.map +1 -0
  116. package/lib/module/PlatformChecker/index.js +18 -0
  117. package/lib/module/PlatformChecker/index.js.map +1 -0
  118. package/lib/module/WorkletsError.js +29 -0
  119. package/lib/module/WorkletsError.js.map +1 -0
  120. package/lib/module/WorkletsModule/JSWorklets.js +111 -0
  121. package/lib/module/WorkletsModule/JSWorklets.js.map +1 -0
  122. package/lib/module/WorkletsModule/NativeWorklets.js +126 -0
  123. package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -0
  124. package/lib/module/WorkletsModule/index.js +4 -0
  125. package/lib/module/WorkletsModule/index.js.map +1 -0
  126. package/lib/module/WorkletsModule/workletsModuleInstance.js +7 -0
  127. package/lib/module/WorkletsModule/workletsModuleInstance.js.map +1 -0
  128. package/lib/module/WorkletsModule/workletsModuleInstance.web.js +5 -0
  129. package/lib/module/WorkletsModule/workletsModuleInstance.web.js.map +1 -0
  130. package/lib/module/WorkletsModule/workletsModuleProxy.js +4 -0
  131. package/lib/module/WorkletsModule/workletsModuleProxy.js.map +1 -0
  132. package/lib/module/bundleUnpacker.js +47 -0
  133. package/lib/module/bundleUnpacker.js.map +1 -0
  134. package/lib/module/callGuard.js +30 -0
  135. package/lib/module/callGuard.js.map +1 -0
  136. package/lib/module/deprecated.js +20 -0
  137. package/lib/module/deprecated.js.map +1 -0
  138. package/lib/module/errors.js +69 -0
  139. package/lib/module/errors.js.map +1 -0
  140. package/lib/module/featureFlags/index.js +48 -0
  141. package/lib/module/featureFlags/index.js.map +1 -0
  142. package/lib/module/featureFlags/staticFlags.json +4 -0
  143. package/lib/module/index.js +26 -0
  144. package/lib/module/index.js.map +1 -0
  145. package/lib/module/initializers.js +221 -0
  146. package/lib/module/initializers.js.map +1 -0
  147. package/lib/module/isSynchronizable.js +6 -0
  148. package/lib/module/isSynchronizable.js.map +1 -0
  149. package/lib/module/logger.js +15 -0
  150. package/lib/module/logger.js.map +1 -0
  151. package/lib/module/privateGlobals.d.js +7 -0
  152. package/lib/module/privateGlobals.d.js.map +1 -0
  153. package/lib/module/publicGlobals.js +6 -0
  154. package/lib/module/publicGlobals.js.map +1 -0
  155. package/lib/module/runLoop/common/setImmediatePolyfill.js +15 -0
  156. package/lib/module/runLoop/common/setImmediatePolyfill.js.map +1 -0
  157. package/lib/module/runLoop/common/setIntervalPolyfill.js +26 -0
  158. package/lib/module/runLoop/common/setIntervalPolyfill.js.map +1 -0
  159. package/lib/module/runLoop/uiRuntime/mockedRequestAnimationFrame.js +10 -0
  160. package/lib/module/runLoop/uiRuntime/mockedRequestAnimationFrame.js.map +1 -0
  161. package/lib/module/runLoop/uiRuntime/requestAnimationFrame.js +52 -0
  162. package/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map +1 -0
  163. package/lib/module/runLoop/uiRuntime/setTimeoutPolyfill.js +32 -0
  164. package/lib/module/runLoop/uiRuntime/setTimeoutPolyfill.js.map +1 -0
  165. package/lib/module/runLoop/workletRuntime/index.js +19 -0
  166. package/lib/module/runLoop/workletRuntime/index.js.map +1 -0
  167. package/lib/module/runLoop/workletRuntime/queueMicrotask.js +11 -0
  168. package/lib/module/runLoop/workletRuntime/queueMicrotask.js.map +1 -0
  169. package/lib/module/runLoop/workletRuntime/requestAnimationFramePolyfill.js +48 -0
  170. package/lib/module/runLoop/workletRuntime/requestAnimationFramePolyfill.js.map +1 -0
  171. package/lib/module/runLoop/workletRuntime/setTimeout.js +28 -0
  172. package/lib/module/runLoop/workletRuntime/setTimeout.js.map +1 -0
  173. package/lib/module/runLoop/workletRuntime/taskQueue.js +37 -0
  174. package/lib/module/runLoop/workletRuntime/taskQueue.js.map +1 -0
  175. package/lib/module/runtimeKind.js +39 -0
  176. package/lib/module/runtimeKind.js.map +1 -0
  177. package/lib/module/runtimes.js +100 -0
  178. package/lib/module/runtimes.js.map +1 -0
  179. package/lib/module/serializable.js +568 -0
  180. package/lib/module/serializable.js.map +1 -0
  181. package/lib/module/serializableMappingCache.js +37 -0
  182. package/lib/module/serializableMappingCache.js.map +1 -0
  183. package/lib/module/specs/NativeWorkletsModule.js +5 -0
  184. package/lib/module/specs/NativeWorkletsModule.js.map +1 -0
  185. package/lib/module/specs/NativeWorkletsModule.kepler.js +7 -0
  186. package/lib/module/specs/NativeWorkletsModule.kepler.js.map +1 -0
  187. package/lib/module/specs/index.js +10 -0
  188. package/lib/module/specs/index.js.map +1 -0
  189. package/lib/module/synchronizable.js +9 -0
  190. package/lib/module/synchronizable.js.map +1 -0
  191. package/lib/module/synchronizableUnpacker.js +42 -0
  192. package/lib/module/synchronizableUnpacker.js.map +1 -0
  193. package/lib/module/threads.js +347 -0
  194. package/lib/module/threads.js.map +1 -0
  195. package/lib/module/utils/checkCppVersion.js +30 -0
  196. package/lib/module/utils/checkCppVersion.js.map +1 -0
  197. package/lib/module/utils/jsVersion.js +9 -0
  198. package/lib/module/utils/jsVersion.js.map +1 -0
  199. package/lib/module/valueUnpacker.js +60 -0
  200. package/lib/module/valueUnpacker.js.map +1 -0
  201. package/lib/module/workletFunction.js +37 -0
  202. package/lib/module/workletFunction.js.map +1 -0
  203. package/lib/module/workletRuntimeEntry.js +32 -0
  204. package/lib/module/workletRuntimeEntry.js.map +1 -0
  205. package/lib/module/workletTypes.js +12 -0
  206. package/lib/module/workletTypes.js.map +1 -0
  207. package/lib/typescript/PlatformChecker/PlatformChecker.d.ts +5 -0
  208. package/lib/typescript/PlatformChecker/PlatformChecker.d.ts.map +1 -0
  209. package/lib/typescript/PlatformChecker/index.d.ts +10 -0
  210. package/lib/typescript/PlatformChecker/index.d.ts.map +1 -0
  211. package/lib/typescript/WorkletsError.d.ts +15 -0
  212. package/lib/typescript/WorkletsError.d.ts.map +1 -0
  213. package/lib/typescript/WorkletsModule/JSWorklets.d.ts +3 -0
  214. package/lib/typescript/WorkletsModule/JSWorklets.d.ts.map +1 -0
  215. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts +3 -0
  216. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -0
  217. package/lib/typescript/WorkletsModule/index.d.ts +3 -0
  218. package/lib/typescript/WorkletsModule/index.d.ts.map +1 -0
  219. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts +2 -0
  220. package/lib/typescript/WorkletsModule/workletsModuleInstance.d.ts.map +1 -0
  221. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts +2 -0
  222. package/lib/typescript/WorkletsModule/workletsModuleInstance.web.d.ts.map +1 -0
  223. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +37 -0
  224. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +1 -0
  225. package/lib/typescript/bundleUnpacker.d.ts +7 -0
  226. package/lib/typescript/bundleUnpacker.d.ts.map +1 -0
  227. package/lib/typescript/callGuard.d.ts +4 -0
  228. package/lib/typescript/callGuard.d.ts.map +1 -0
  229. package/lib/typescript/deprecated.d.ts +20 -0
  230. package/lib/typescript/deprecated.d.ts.map +1 -0
  231. package/lib/typescript/errors.d.ts +16 -0
  232. package/lib/typescript/errors.d.ts.map +1 -0
  233. package/lib/typescript/featureFlags/index.d.ts +23 -0
  234. package/lib/typescript/featureFlags/index.d.ts.map +1 -0
  235. package/lib/typescript/index.d.ts +17 -0
  236. package/lib/typescript/index.d.ts.map +1 -0
  237. package/lib/typescript/initializers.d.ts +17 -0
  238. package/lib/typescript/initializers.d.ts.map +1 -0
  239. package/lib/typescript/isSynchronizable.d.ts +3 -0
  240. package/lib/typescript/isSynchronizable.d.ts.map +1 -0
  241. package/lib/typescript/logger.d.ts +5 -0
  242. package/lib/typescript/logger.d.ts.map +1 -0
  243. package/lib/typescript/publicGlobals.d.ts +31 -0
  244. package/lib/typescript/publicGlobals.d.ts.map +1 -0
  245. package/lib/typescript/runLoop/common/setImmediatePolyfill.d.ts +2 -0
  246. package/lib/typescript/runLoop/common/setImmediatePolyfill.d.ts.map +1 -0
  247. package/lib/typescript/runLoop/common/setIntervalPolyfill.d.ts +2 -0
  248. package/lib/typescript/runLoop/common/setIntervalPolyfill.d.ts.map +1 -0
  249. package/lib/typescript/runLoop/uiRuntime/mockedRequestAnimationFrame.d.ts +6 -0
  250. package/lib/typescript/runLoop/uiRuntime/mockedRequestAnimationFrame.d.ts.map +1 -0
  251. package/lib/typescript/runLoop/uiRuntime/requestAnimationFrame.d.ts +2 -0
  252. package/lib/typescript/runLoop/uiRuntime/requestAnimationFrame.d.ts.map +1 -0
  253. package/lib/typescript/runLoop/uiRuntime/setTimeoutPolyfill.d.ts +2 -0
  254. package/lib/typescript/runLoop/uiRuntime/setTimeoutPolyfill.d.ts.map +1 -0
  255. package/lib/typescript/runLoop/workletRuntime/index.d.ts +2 -0
  256. package/lib/typescript/runLoop/workletRuntime/index.d.ts.map +1 -0
  257. package/lib/typescript/runLoop/workletRuntime/queueMicrotask.d.ts +2 -0
  258. package/lib/typescript/runLoop/workletRuntime/queueMicrotask.d.ts.map +1 -0
  259. package/lib/typescript/runLoop/workletRuntime/requestAnimationFramePolyfill.d.ts +2 -0
  260. package/lib/typescript/runLoop/workletRuntime/requestAnimationFramePolyfill.d.ts.map +1 -0
  261. package/lib/typescript/runLoop/workletRuntime/setTimeout.d.ts +2 -0
  262. package/lib/typescript/runLoop/workletRuntime/setTimeout.d.ts.map +1 -0
  263. package/lib/typescript/runLoop/workletRuntime/taskQueue.d.ts +10 -0
  264. package/lib/typescript/runLoop/workletRuntime/taskQueue.d.ts.map +1 -0
  265. package/lib/typescript/runtimeKind.d.ts +25 -0
  266. package/lib/typescript/runtimeKind.d.ts.map +1 -0
  267. package/lib/typescript/runtimes.d.ts +77 -0
  268. package/lib/typescript/runtimes.d.ts.map +1 -0
  269. package/lib/typescript/serializable.d.ts +20 -0
  270. package/lib/typescript/serializable.d.ts.map +1 -0
  271. package/lib/typescript/serializableMappingCache.d.ts +16 -0
  272. package/lib/typescript/serializableMappingCache.d.ts.map +1 -0
  273. package/lib/typescript/specs/NativeWorkletsModule.d.ts +7 -0
  274. package/lib/typescript/specs/NativeWorkletsModule.d.ts.map +1 -0
  275. package/lib/typescript/specs/NativeWorkletsModule.kepler.d.ts +7 -0
  276. package/lib/typescript/specs/NativeWorkletsModule.kepler.d.ts.map +1 -0
  277. package/lib/typescript/specs/index.d.ts +3 -0
  278. package/lib/typescript/specs/index.d.ts.map +1 -0
  279. package/lib/typescript/synchronizable.d.ts +15 -0
  280. package/lib/typescript/synchronizable.d.ts.map +1 -0
  281. package/lib/typescript/synchronizableUnpacker.d.ts +4 -0
  282. package/lib/typescript/synchronizableUnpacker.d.ts.map +1 -0
  283. package/lib/typescript/threads.d.ts +138 -0
  284. package/lib/typescript/threads.d.ts.map +1 -0
  285. package/lib/typescript/utils/checkCppVersion.d.ts +3 -0
  286. package/lib/typescript/utils/checkCppVersion.d.ts.map +1 -0
  287. package/lib/typescript/utils/jsVersion.d.ts +7 -0
  288. package/lib/typescript/utils/jsVersion.d.ts.map +1 -0
  289. package/lib/typescript/valueUnpacker.d.ts +6 -0
  290. package/lib/typescript/valueUnpacker.d.ts.map +1 -0
  291. package/lib/typescript/workletFunction.d.ts +27 -0
  292. package/lib/typescript/workletFunction.d.ts.map +1 -0
  293. package/lib/typescript/workletRuntimeEntry.d.ts +14 -0
  294. package/lib/typescript/workletRuntimeEntry.d.ts.map +1 -0
  295. package/lib/typescript/workletTypes.d.ts +61 -0
  296. package/lib/typescript/workletTypes.d.ts.map +1 -0
  297. package/package.json +153 -0
  298. package/plugin/index.js +1761 -0
  299. package/react-native.config.js +21 -0
  300. package/scripts/validate-react-native-version.js +43 -0
  301. package/scripts/worklets_utils.rb +94 -0
  302. package/src/PlatformChecker/PlatformChecker.ts +7 -0
  303. package/src/PlatformChecker/index.ts +30 -0
  304. package/src/WorkletsError.ts +36 -0
  305. package/src/WorkletsModule/JSWorklets.ts +200 -0
  306. package/src/WorkletsModule/NativeWorklets.ts +256 -0
  307. package/src/WorkletsModule/index.ts +7 -0
  308. package/src/WorkletsModule/workletsModuleInstance.ts +9 -0
  309. package/src/WorkletsModule/workletsModuleInstance.web.ts +5 -0
  310. package/src/WorkletsModule/workletsModuleProxy.ts +126 -0
  311. package/src/bundleUnpacker.ts +75 -0
  312. package/src/callGuard.ts +33 -0
  313. package/src/deprecated.ts +32 -0
  314. package/src/errors.ts +80 -0
  315. package/src/featureFlags/index.ts +72 -0
  316. package/src/featureFlags/staticFlags.json +4 -0
  317. package/src/index.ts +53 -0
  318. package/src/initializers.ts +262 -0
  319. package/src/isSynchronizable.ts +13 -0
  320. package/src/logger.ts +16 -0
  321. package/src/privateGlobals.d.ts +79 -0
  322. package/src/publicGlobals.ts +39 -0
  323. package/src/runLoop/common/setImmediatePolyfill.ts +20 -0
  324. package/src/runLoop/common/setIntervalPolyfill.ts +38 -0
  325. package/src/runLoop/uiRuntime/mockedRequestAnimationFrame.ts +11 -0
  326. package/src/runLoop/uiRuntime/requestAnimationFrame.ts +66 -0
  327. package/src/runLoop/uiRuntime/setTimeoutPolyfill.ts +40 -0
  328. package/src/runLoop/workletRuntime/index.ts +18 -0
  329. package/src/runLoop/workletRuntime/queueMicrotask.ts +13 -0
  330. package/src/runLoop/workletRuntime/requestAnimationFramePolyfill.ts +61 -0
  331. package/src/runLoop/workletRuntime/setTimeout.ts +37 -0
  332. package/src/runLoop/workletRuntime/taskQueue.ts +44 -0
  333. package/src/runtimeKind.ts +37 -0
  334. package/src/runtimes.ts +193 -0
  335. package/src/serializable.ts +801 -0
  336. package/src/serializableMappingCache.ts +42 -0
  337. package/src/specs/NativeWorkletsModule.kepler.ts +11 -0
  338. package/src/specs/NativeWorkletsModule.ts +9 -0
  339. package/src/specs/index.ts +13 -0
  340. package/src/synchronizable.ts +32 -0
  341. package/src/synchronizableUnpacker.ts +67 -0
  342. package/src/threads.ts +452 -0
  343. package/src/utils/checkCppVersion.ts +34 -0
  344. package/src/utils/jsVersion.ts +7 -0
  345. package/src/valueUnpacker.ts +90 -0
  346. package/src/workletFunction.ts +42 -0
  347. package/src/workletRuntimeEntry.ts +35 -0
  348. package/src/workletTypes.ts +81 -0
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ import { SHOULD_BE_USE_WEB } from '../PlatformChecker';
4
+ import { createJSWorkletsModule } from './JSWorklets';
5
+ import { createNativeWorkletsModule } from './NativeWorklets';
6
+
7
+ export const WorkletsModule = SHOULD_BE_USE_WEB
8
+ ? createJSWorkletsModule()
9
+ : createNativeWorkletsModule();
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ import { createJSWorkletsModule } from './JSWorklets';
4
+
5
+ export const WorkletsModule = createJSWorkletsModule();
@@ -0,0 +1,126 @@
1
+ 'use strict';
2
+
3
+ import type { SynchronizableRef } from '../synchronizable';
4
+ import type { SerializableRef, WorkletRuntime } from '../workletTypes';
5
+
6
+ /** Type of `__workletsModuleProxy` injected with JSI. */
7
+ export interface WorkletsModuleProxy {
8
+ createSerializable<TValue>(
9
+ value: TValue,
10
+ shouldPersistRemote: boolean,
11
+ nativeStateSource?: object
12
+ ): SerializableRef<TValue>;
13
+
14
+ createSerializableImport<TValue>(
15
+ source: string,
16
+ imported: string
17
+ ): SerializableRef<TValue>;
18
+
19
+ createSerializableString(str: string): SerializableRef<string>;
20
+
21
+ createSerializableNumber(num: number): SerializableRef<number>;
22
+
23
+ createSerializableBoolean(bool: boolean): SerializableRef<boolean>;
24
+
25
+ createSerializableBigInt(bigInt: bigint): SerializableRef<bigint>;
26
+
27
+ createSerializableUndefined(): SerializableRef<undefined>;
28
+
29
+ createSerializableNull(): SerializableRef<null>;
30
+
31
+ createSerializableTurboModuleLike<
32
+ TProps extends object,
33
+ TProto extends object,
34
+ >(
35
+ props: TProps,
36
+ proto: TProto
37
+ ): SerializableRef<TProps>;
38
+
39
+ createSerializableObject<T extends object>(
40
+ obj: T,
41
+ shouldRetainRemote: boolean,
42
+ nativeStateSource?: object
43
+ ): SerializableRef<T>;
44
+
45
+ createSerializableHostObject<T extends object>(obj: T): SerializableRef<T>;
46
+
47
+ createSerializableArray(
48
+ array: unknown[],
49
+ shouldRetainRemote: boolean
50
+ ): SerializableRef<unknown[]>;
51
+
52
+ createSerializableMap<TKey, TValue>(
53
+ keys: TKey[],
54
+ values: TValue[]
55
+ ): SerializableRef<Map<TKey, TValue>>;
56
+
57
+ createSerializableSet<TValues>(
58
+ values: TValues[]
59
+ ): SerializableRef<Set<TValues>>;
60
+
61
+ createSerializableInitializer(obj: object): SerializableRef<object>;
62
+
63
+ createSerializableFunction<TArgs extends unknown[], TReturn>(
64
+ func: (...args: TArgs) => TReturn
65
+ ): SerializableRef<TReturn>;
66
+
67
+ createSerializableWorklet(
68
+ worklet: object,
69
+ shouldPersistRemote: boolean
70
+ ): SerializableRef<object>;
71
+
72
+ scheduleOnUI<TValue>(serializable: SerializableRef<TValue>): void;
73
+
74
+ executeOnUIRuntimeSync<TValue, TReturn>(
75
+ serializable: SerializableRef<TValue>
76
+ ): TReturn;
77
+
78
+ createWorkletRuntime(
79
+ name: string,
80
+ initializer: SerializableRef<() => void>,
81
+ useDefaultQueue: boolean,
82
+ customQueue: object | undefined,
83
+ enableEventLoop: boolean
84
+ ): WorkletRuntime;
85
+
86
+ scheduleOnRuntime<TValue>(
87
+ workletRuntime: WorkletRuntime,
88
+ worklet: SerializableRef<TValue>
89
+ ): void;
90
+
91
+ reportFatalErrorOnJS(
92
+ message: string,
93
+ stack: string,
94
+ name: string,
95
+ jsEngine: string
96
+ ): void;
97
+
98
+ createSynchronizable<TValue>(value: TValue): SynchronizableRef<TValue>;
99
+
100
+ synchronizableGetDirty<TValue>(
101
+ synchronizableRef: SynchronizableRef<TValue>
102
+ ): TValue;
103
+
104
+ synchronizableGetBlocking<TValue>(
105
+ synchronizableRef: SynchronizableRef<TValue>
106
+ ): TValue;
107
+
108
+ synchronizableSetBlocking<TValue>(
109
+ synchronizableRef: SynchronizableRef<TValue>,
110
+ value: SerializableRef<TValue>
111
+ ): void;
112
+
113
+ synchronizableLock<TValue>(
114
+ synchronizableRef: SynchronizableRef<TValue>
115
+ ): void;
116
+
117
+ synchronizableUnlock<TValue>(
118
+ synchronizableRef: SynchronizableRef<TValue>
119
+ ): void;
120
+
121
+ getStaticFeatureFlag(name: string): boolean;
122
+
123
+ setDynamicFeatureFlag(name: string, value: boolean): void;
124
+ }
125
+
126
+ export type IWorkletsModule = WorkletsModuleProxy;
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+ import { logger } from './logger';
3
+ import { WorkletsError } from './WorkletsError';
4
+ import type { WorkletFactory, WorkletFunction } from './workletTypes';
5
+
6
+ const handleCache = new WeakMap<WorkletFunction, unknown>();
7
+
8
+ export function bundleValueUnpacker(
9
+ objectToUnpack: ObjectToUnpack,
10
+ category?: string,
11
+ remoteFunctionName?: string
12
+ ): unknown {
13
+ const workletHash = objectToUnpack.__workletHash;
14
+ if (workletHash !== undefined) {
15
+ return getWorklet(workletHash, objectToUnpack.__closure);
16
+ } else if (objectToUnpack.__init !== undefined) {
17
+ let value = handleCache.get(objectToUnpack);
18
+ if (value === undefined) {
19
+ value = objectToUnpack.__init();
20
+ handleCache.set(objectToUnpack, value);
21
+ }
22
+ return value;
23
+ } else if (category === 'RemoteFunction') {
24
+ const remoteFunctionHolder = () => {
25
+ const label = remoteFunctionName
26
+ ? `function \`${remoteFunctionName}\``
27
+ : 'anonymous function';
28
+ throw new WorkletsError(`Tried to synchronously call a non-worklet ${label} on the UI thread.
29
+ 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.`);
30
+ };
31
+ remoteFunctionHolder.__remoteFunction = objectToUnpack;
32
+ return remoteFunctionHolder;
33
+ } else {
34
+ throw new WorkletsError(
35
+ `Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString(
36
+ objectToUnpack
37
+ )}".`
38
+ );
39
+ }
40
+ }
41
+
42
+ function getWorklet(
43
+ workletHash: number,
44
+ closureVariables: Record<string, unknown>
45
+ ): WorkletFunction | undefined {
46
+ let worklet;
47
+ if (__DEV__) {
48
+ try {
49
+ worklet = getWorkletFromMetroRequire(workletHash, closureVariables);
50
+ } catch (_e) {
51
+ logger.error(
52
+ 'Unable to resolve worklet with hash ' +
53
+ workletHash +
54
+ '. Try reloading the app.'
55
+ );
56
+ }
57
+ } else {
58
+ worklet = getWorkletFromMetroRequire(workletHash, closureVariables);
59
+ }
60
+ return worklet;
61
+ }
62
+
63
+ const metroRequire = globalThis.__r;
64
+
65
+ function getWorkletFromMetroRequire(
66
+ workletHash: number,
67
+ closureVariables: Record<string, unknown>
68
+ ): WorkletFunction {
69
+ const factory = metroRequire(workletHash).default as WorkletFactory;
70
+ return factory(closureVariables);
71
+ }
72
+
73
+ interface ObjectToUnpack extends WorkletFunction {
74
+ _recur: unknown;
75
+ }
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ import type { RNError } from './errors';
4
+
5
+ /** Used only with debug builds. */
6
+ export function callGuardDEV<Args extends unknown[], ReturnValue>(
7
+ fn: (...args: Args) => ReturnValue,
8
+ ...args: Args
9
+ ): ReturnValue | void {
10
+ 'worklet';
11
+ try {
12
+ return fn(...args);
13
+ } catch (error) {
14
+ if (globalThis.__workletsModuleProxy) {
15
+ const { message, stack, name, jsEngine } = error as RNError;
16
+ globalThis.__workletsModuleProxy.reportFatalErrorOnJS(
17
+ message,
18
+ stack ?? '',
19
+ name ?? 'WorkletsError',
20
+ jsEngine ?? 'Worklets'
21
+ );
22
+ } else {
23
+ throw error;
24
+ }
25
+ }
26
+ }
27
+
28
+ export function setupCallGuard() {
29
+ 'worklet';
30
+ if (!globalThis.__callGuardDEV) {
31
+ globalThis.__callGuardDEV = callGuardDEV;
32
+ }
33
+ }
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ import {
4
+ createSerializable,
5
+ isSerializableRef,
6
+ makeShareable,
7
+ makeShareableCloneOnUIRecursive,
8
+ } from './serializable';
9
+ import { serializableMappingCache } from './serializableMappingCache';
10
+ import type { SerializableRef } from './workletTypes';
11
+
12
+ /** @deprecated Use {@link SerializableRef} instead. */
13
+ export type ShareableRef<T> = SerializableRef<T>;
14
+
15
+ export { makeShareable, makeShareableCloneOnUIRecursive };
16
+
17
+ /** @deprecated It will be removed in the next major version. */
18
+ export type MakeShareableClone = <T>(
19
+ value: T,
20
+ shouldPersistRemote?: boolean,
21
+ depth?: number
22
+ ) => ShareableRef<T>;
23
+
24
+ /** @deprecated Use {@link createSerializable} instead. */
25
+ export const makeShareableCloneRecursive: MakeShareableClone =
26
+ createSerializable;
27
+
28
+ /** @deprecated Use {@link isSerializableRef} instead. */
29
+ export const isShareableRef = isSerializableRef;
30
+
31
+ /** @deprecated Use {@link serializableMappingCache} instead. */
32
+ export const shareableMappingCache = serializableMappingCache;
package/src/errors.ts ADDED
@@ -0,0 +1,80 @@
1
+ 'use strict';
2
+
3
+ import { WorkletsError } from './WorkletsError';
4
+ import type { WorkletStackDetails } from './workletTypes';
5
+
6
+ const _workletStackDetails = new Map<number, WorkletStackDetails>();
7
+
8
+ export function registerWorkletStackDetails(
9
+ hash: number,
10
+ stackDetails: WorkletStackDetails
11
+ ) {
12
+ _workletStackDetails.set(hash, stackDetails);
13
+ }
14
+
15
+ function getBundleOffset(error: Error): [string, number, number] {
16
+ const frame = error.stack?.split('\n')?.[0];
17
+ if (frame) {
18
+ const parsedFrame = /@([^@]+):(\d+):(\d+)/.exec(frame);
19
+ if (parsedFrame) {
20
+ const [, file, line, col] = parsedFrame;
21
+ return [file, Number(line), Number(col)];
22
+ }
23
+ }
24
+ return ['unknown', 0, 0];
25
+ }
26
+
27
+ function processStack(stack?: string): string | undefined {
28
+ if (stack === '' || stack === undefined) {
29
+ return undefined;
30
+ }
31
+ const workletStackEntries = stack.match(/worklet_(\d+):(\d+):(\d+)/g);
32
+ let result = stack;
33
+ workletStackEntries?.forEach((match) => {
34
+ const [, hash, origLine, origCol] = match.split(/:|_/).map(Number);
35
+ const errorDetails = _workletStackDetails.get(hash);
36
+ if (!errorDetails) {
37
+ return;
38
+ }
39
+ const [error, lineOffset, colOffset] = errorDetails;
40
+ const [bundleFile, bundleLine, bundleCol] = getBundleOffset(error);
41
+ const line = origLine + bundleLine + lineOffset;
42
+ const col = origCol + bundleCol + colOffset;
43
+
44
+ result = result.replace(match, `${bundleFile}:${line}:${col}`);
45
+ });
46
+ return result;
47
+ }
48
+
49
+ export interface RNError extends Error {
50
+ jsEngine: string;
51
+ }
52
+
53
+ /**
54
+ * Remote error is an error coming from a Worklet Runtime that we bubble up to
55
+ * the RN Runtime.
56
+ */
57
+ export function reportFatalRemoteError(
58
+ { message, stack, name, jsEngine }: RNError,
59
+ force: boolean
60
+ ): void {
61
+ const error = new WorkletsError() as RNError;
62
+ error.message = message;
63
+ error.stack = processStack(stack);
64
+ error.name = name;
65
+ error.jsEngine = jsEngine;
66
+ if (force) {
67
+ throw error;
68
+ } else {
69
+ // @ts-expect-error React Native's `ErrorUtils` are hidden from the global scope.
70
+ globalThis.ErrorUtils.reportFatalError(error);
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Registers `reportFatalRemoteError` function in global scope to allow to
76
+ * invoke it from C++.
77
+ */
78
+ export function registerReportFatalRemoteError() {
79
+ globalThis.__reportFatalRemoteError = reportFatalRemoteError;
80
+ }
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+ import { logger } from '../logger';
3
+ import { WorkletsModule } from '../WorkletsModule';
4
+ import type StaticFeatureFlagsJSON from './staticFlags.json';
5
+
6
+ type DynamicFlagsType = {
7
+ EXAMPLE_DYNAMIC_FLAG: boolean;
8
+ init(): void;
9
+ setFlag(name: DynamicFlagName, value: boolean): void;
10
+ };
11
+ type DynamicFlagName = keyof Omit<Omit<DynamicFlagsType, 'setFlag'>, 'init'>;
12
+
13
+ export const DynamicFlags: DynamicFlagsType = {
14
+ EXAMPLE_DYNAMIC_FLAG: true,
15
+
16
+ init() {
17
+ Object.keys(DynamicFlags).forEach((key) => {
18
+ if (key !== 'init' && key !== 'setFlag') {
19
+ WorkletsModule.setDynamicFeatureFlag(
20
+ key,
21
+ DynamicFlags[key as DynamicFlagName]
22
+ );
23
+ }
24
+ });
25
+ },
26
+ setFlag(name, value) {
27
+ if (name in DynamicFlags) {
28
+ DynamicFlags[name] = value;
29
+ WorkletsModule.setDynamicFeatureFlag(name, value);
30
+ } else {
31
+ logger.warn(
32
+ `The feature flag: '${name}' no longer exists, you can safely remove invocation of \`setDynamicFeatureFlag('${name}')\` from your code.`
33
+ );
34
+ }
35
+ },
36
+ };
37
+ DynamicFlags.init();
38
+ // Public API function to update a feature flag
39
+ export function setDynamicFeatureFlag(
40
+ name: DynamicFlagName,
41
+ value: boolean
42
+ ): void {
43
+ DynamicFlags.setFlag(name, value);
44
+ }
45
+
46
+ /**
47
+ * This constant is needed for typechecking and preserving static typechecks in
48
+ * generated .d.ts files. Without it, the static flags resolve to an object
49
+ * without specific keys.
50
+ */
51
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
+ const DefaultStaticFeatureFlags = {
53
+ RUNTIME_TEST_FLAG: false,
54
+ IOS_DYNAMIC_FRAMERATE_ENABLED: false,
55
+ } as const satisfies typeof StaticFeatureFlagsJSON;
56
+
57
+ type StaticFeatureFlagsSchema = {
58
+ -readonly [K in keyof typeof DefaultStaticFeatureFlags]: boolean;
59
+ };
60
+
61
+ const staticFeatureFlags: Partial<StaticFeatureFlagsSchema> = {};
62
+
63
+ export function getStaticFeatureFlag(
64
+ name: keyof StaticFeatureFlagsSchema
65
+ ): boolean {
66
+ if (name in staticFeatureFlags) {
67
+ return staticFeatureFlags[name]!;
68
+ }
69
+ const featureFlagValue = WorkletsModule.getStaticFeatureFlag(name);
70
+ staticFeatureFlags[name] = featureFlagValue;
71
+ return featureFlagValue;
72
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "RUNTIME_TEST_FLAG": false,
3
+ "IOS_DYNAMIC_FRAMERATE_ENABLED": true
4
+ }
package/src/index.ts ADDED
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ import './publicGlobals';
4
+
5
+ import { init } from './initializers';
6
+ import { bundleModeInit } from './workletRuntimeEntry';
7
+
8
+ init();
9
+
10
+ export type { MakeShareableClone, ShareableRef } from './deprecated';
11
+ export {
12
+ isShareableRef,
13
+ makeShareable,
14
+ makeShareableCloneOnUIRecursive,
15
+ makeShareableCloneRecursive,
16
+ shareableMappingCache,
17
+ } from './deprecated';
18
+ export { getStaticFeatureFlag, setDynamicFeatureFlag } from './featureFlags';
19
+ export { isSynchronizable } from './isSynchronizable';
20
+ export { getRuntimeKind, RuntimeKind } from './runtimeKind';
21
+ export { createWorkletRuntime, runOnRuntime } from './runtimes';
22
+ export { createSerializable, isSerializableRef } from './serializable';
23
+ export { serializableMappingCache } from './serializableMappingCache';
24
+ export type { Synchronizable } from './synchronizable';
25
+ export { createSynchronizable } from './synchronizable';
26
+ export {
27
+ callMicrotasks,
28
+ executeOnUIRuntimeSync,
29
+ runOnJS,
30
+ runOnUI,
31
+ runOnUIAsync,
32
+ runOnUISync,
33
+ scheduleOnRN,
34
+ scheduleOnUI,
35
+ // eslint-disable-next-line camelcase
36
+ unstable_eventLoopTask,
37
+ } from './threads';
38
+ export { isWorkletFunction } from './workletFunction';
39
+ export type { IWorkletsModule, WorkletsModuleProxy } from './WorkletsModule';
40
+ export { WorkletsModule } from './WorkletsModule';
41
+ export type {
42
+ SerializableRef,
43
+ WorkletFunction,
44
+ WorkletRuntime,
45
+ WorkletStackDetails,
46
+ } from './workletTypes';
47
+
48
+ // @ts-expect-error We must trick the bundler to include
49
+ // the `workletRuntimeEntry` file the way it cannot optimize it out.
50
+ if (globalThis._ALWAYS_FALSE) {
51
+ // Bundle mode.
52
+ bundleModeInit();
53
+ }