@depup/react-native-worklets 0.11.3-depup.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 (457) hide show
  1. package/.worklets/dummy.md +1 -0
  2. package/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp +64 -0
  3. package/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h +38 -0
  4. package/Common/cpp/worklets/Compat/Holders.h +25 -0
  5. package/Common/cpp/worklets/Compat/StableApi.cpp +145 -0
  6. package/Common/cpp/worklets/Compat/StableApi.h +128 -0
  7. package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp +729 -0
  8. package/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h +126 -0
  9. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +81 -0
  10. package/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +76 -0
  11. package/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +95 -0
  12. package/Common/cpp/worklets/Registries/EventHandlerRegistry.h +44 -0
  13. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +10 -0
  14. package/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +43 -0
  15. package/Common/cpp/worklets/RunLoop/AsyncQueue.h +14 -0
  16. package/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp +69 -0
  17. package/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h +48 -0
  18. package/Common/cpp/worklets/RunLoop/EventLoop.cpp +103 -0
  19. package/Common/cpp/worklets/RunLoop/EventLoop.h +52 -0
  20. package/Common/cpp/worklets/SharedItems/MemoryManager.cpp +60 -0
  21. package/Common/cpp/worklets/SharedItems/MemoryManager.h +29 -0
  22. package/Common/cpp/worklets/SharedItems/Serializable.cpp +373 -0
  23. package/Common/cpp/worklets/SharedItems/Serializable.h +413 -0
  24. package/Common/cpp/worklets/SharedItems/SerializableFactory.cpp +172 -0
  25. package/Common/cpp/worklets/SharedItems/SerializableFactory.h +85 -0
  26. package/Common/cpp/worklets/SharedItems/SerializableRemoteFunction.cpp +71 -0
  27. package/Common/cpp/worklets/SharedItems/SerializableRemoteFunction.h +75 -0
  28. package/Common/cpp/worklets/SharedItems/Shareable.cpp +84 -0
  29. package/Common/cpp/worklets/SharedItems/Shareable.h +43 -0
  30. package/Common/cpp/worklets/SharedItems/Synchronizable.cpp +59 -0
  31. package/Common/cpp/worklets/SharedItems/Synchronizable.h +57 -0
  32. package/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp +78 -0
  33. package/Common/cpp/worklets/SharedItems/SynchronizableAccess.h +45 -0
  34. package/Common/cpp/worklets/SharedItems/UnpackerLoader.h +78 -0
  35. package/Common/cpp/worklets/Tools/FeatureFlags.cpp +18 -0
  36. package/Common/cpp/worklets/Tools/FeatureFlags.h +44 -0
  37. package/Common/cpp/worklets/Tools/JSISerializer.cpp +312 -0
  38. package/Common/cpp/worklets/Tools/JSISerializer.h +42 -0
  39. package/Common/cpp/worklets/Tools/JSLogger.cpp +92 -0
  40. package/Common/cpp/worklets/Tools/JSLogger.h +48 -0
  41. package/Common/cpp/worklets/Tools/JSScheduler.cpp +21 -0
  42. package/Common/cpp/worklets/Tools/JSScheduler.h +35 -0
  43. package/Common/cpp/worklets/Tools/PlatformLogger.h +16 -0
  44. package/Common/cpp/worklets/Tools/RNRuntimeStatus.h +27 -0
  45. package/Common/cpp/worklets/Tools/ScriptBuffer.h +56 -0
  46. package/Common/cpp/worklets/Tools/SingleInstanceChecker.h +75 -0
  47. package/Common/cpp/worklets/Tools/ThreadSafeQueue.h +49 -0
  48. package/Common/cpp/worklets/Tools/UIScheduler.cpp +19 -0
  49. package/Common/cpp/worklets/Tools/UIScheduler.h +22 -0
  50. package/Common/cpp/worklets/Tools/VersionUtils.cpp +61 -0
  51. package/Common/cpp/worklets/Tools/VersionUtils.h +24 -0
  52. package/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +34 -0
  53. package/Common/cpp/worklets/Tools/WorkletEventHandler.h +44 -0
  54. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +30 -0
  55. package/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +222 -0
  56. package/Common/cpp/worklets/Tools/WorkletsSystraceSection.h +116 -0
  57. package/Common/cpp/worklets/Tools/WorkletsVersion.cpp +46 -0
  58. package/Common/cpp/worklets/Tools/WorkletsVersion.h +18 -0
  59. package/Common/cpp/worklets/WorkletRuntime/BundleModeConfig.h +17 -0
  60. package/Common/cpp/worklets/WorkletRuntime/HermesProfiling.cpp +45 -0
  61. package/Common/cpp/worklets/WorkletRuntime/HermesProfiling.h +12 -0
  62. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +68 -0
  63. package/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +24 -0
  64. package/Common/cpp/worklets/WorkletRuntime/RuntimeBindings.h +59 -0
  65. package/Common/cpp/worklets/WorkletRuntime/RuntimeData.h +38 -0
  66. package/Common/cpp/worklets/WorkletRuntime/RuntimeHolder.h +19 -0
  67. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp +122 -0
  68. package/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h +75 -0
  69. package/Common/cpp/worklets/WorkletRuntime/ScriptLoader.h +116 -0
  70. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp +14 -0
  71. package/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h +15 -0
  72. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp +58 -0
  73. package/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +100 -0
  74. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +327 -0
  75. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +256 -0
  76. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +36 -0
  77. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +320 -0
  78. package/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +36 -0
  79. package/LICENSE +20 -0
  80. package/README.md +43 -0
  81. package/RNWorklets.podspec +94 -0
  82. package/android/CMakeLists.txt +108 -0
  83. package/android/build.gradle.kts +369 -0
  84. package/android/fix-prefab.gradle.kts +56 -0
  85. package/android/generate-stub-pch.gradle.kts +84 -0
  86. package/android/gradle.properties +25 -0
  87. package/android/proguard-rules.pro +3 -0
  88. package/android/settings.gradle.kts +21 -0
  89. package/android/src/main/AndroidManifest.xml +2 -0
  90. package/android/src/main/cpp/WorkletsPCH.h +26 -0
  91. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp +66 -0
  92. package/android/src/main/cpp/worklets/android/AndroidUIScheduler.h +38 -0
  93. package/android/src/main/cpp/worklets/android/AnimationFrameCallback.h +30 -0
  94. package/android/src/main/cpp/worklets/android/JScriptBufferWrapper.cpp +66 -0
  95. package/android/src/main/cpp/worklets/android/JScriptBufferWrapper.h +48 -0
  96. package/android/src/main/cpp/worklets/android/JWorkletRuntimeWrapper.cpp +51 -0
  97. package/android/src/main/cpp/worklets/android/JWorkletRuntimeWrapper.h +43 -0
  98. package/android/src/main/cpp/worklets/android/PlatformLogger.cpp +31 -0
  99. package/android/src/main/cpp/worklets/android/WorkletsModule.cpp +203 -0
  100. package/android/src/main/cpp/worklets/android/WorkletsModule.h +75 -0
  101. package/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp +19 -0
  102. package/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.kt +56 -0
  103. package/android/src/main/java/com/swmansion/worklets/ScriptBufferWrapper.kt +103 -0
  104. package/android/src/main/java/com/swmansion/worklets/WorkletsPackage.kt +42 -0
  105. package/android/src/main/java/com/swmansion/worklets/runloop/AnimationFrameCallback.kt +14 -0
  106. package/android/src/main/java/com/swmansion/worklets/runloop/AnimationFrameQueue.kt +112 -0
  107. package/android/src/networking/com/swmansion/worklets/WorkletRuntimeWrapper.kt +27 -0
  108. package/android/src/networking/com/swmansion/worklets/WorkletsHeaderUtil.kt +30 -0
  109. package/android/src/networking/com/swmansion/worklets/WorkletsModule.kt +187 -0
  110. package/android/src/networking/com/swmansion/worklets/WorkletsNetworkEventUtil.kt +272 -0
  111. package/android/src/networking/com/swmansion/worklets/WorkletsNetworking.kt +1124 -0
  112. package/android/src/networking/com/swmansion/worklets/WorkletsOkHttpCallUtil.kt +40 -0
  113. package/android/src/networking/com/swmansion/worklets/WorkletsProgressListener.kt +13 -0
  114. package/android/src/networking/com/swmansion/worklets/WorkletsProgressRequestBody.kt +98 -0
  115. package/android/src/networking/com/swmansion/worklets/WorkletsProgressResponseBody.kt +60 -0
  116. package/android/src/networking/com/swmansion/worklets/WorkletsProgressiveStringDecoder.kt +87 -0
  117. package/android/src/networking/com/swmansion/worklets/WorkletsRequestBodyUtil.kt +181 -0
  118. package/android/src/no-networking/com/swmansion/worklets/WorkletsModule.kt +143 -0
  119. package/apple/worklets/apple/AnimationFrameQueue.h +15 -0
  120. package/apple/worklets/apple/AnimationFrameQueue.mm +145 -0
  121. package/apple/worklets/apple/AssertJavaScriptQueue.h +14 -0
  122. package/apple/worklets/apple/AssertTurboModuleManagerQueue.h +12 -0
  123. package/apple/worklets/apple/IOSUIScheduler.h +14 -0
  124. package/apple/worklets/apple/IOSUIScheduler.mm +29 -0
  125. package/apple/worklets/apple/Networking/WorkletsNetworking.h +25 -0
  126. package/apple/worklets/apple/Networking/WorkletsNetworking.mm +707 -0
  127. package/apple/worklets/apple/PlatformLogger.mm +31 -0
  128. package/apple/worklets/apple/SlowAnimations.h +8 -0
  129. package/apple/worklets/apple/SlowAnimations.mm +45 -0
  130. package/apple/worklets/apple/WorkletsDisplayLink.h +21 -0
  131. package/apple/worklets/apple/WorkletsModule.h +28 -0
  132. package/apple/worklets/apple/WorkletsModule.mm +177 -0
  133. package/bundleMode/index.d.ts +6 -0
  134. package/bundleMode/index.js +182 -0
  135. package/bundleMode/shims/reactNativeShim.js +21 -0
  136. package/bundleMode/shims/turboModuleRegistryShim.js +47 -0
  137. package/changes.json +58 -0
  138. package/compatibility.json +29 -0
  139. package/jest/pluginTestUtils.ts +16 -0
  140. package/jest/resolver.js +18 -0
  141. package/lib/module/WorkletsModule/NativeWorklets.js +4 -0
  142. package/lib/module/WorkletsModule/NativeWorklets.js.map +1 -0
  143. package/lib/module/WorkletsModule/NativeWorklets.native.js +199 -0
  144. package/lib/module/WorkletsModule/NativeWorklets.native.js.map +1 -0
  145. package/lib/module/WorkletsModule/workletsModuleProxy.js +4 -0
  146. package/lib/module/WorkletsModule/workletsModuleProxy.js.map +1 -0
  147. package/lib/module/bundleMode/metroOverrides.native.js +26 -0
  148. package/lib/module/bundleMode/metroOverrides.native.js.map +1 -0
  149. package/lib/module/bundleMode/network.native.js +44 -0
  150. package/lib/module/bundleMode/network.native.js.map +1 -0
  151. package/lib/module/debug/bundleMode.js +6 -0
  152. package/lib/module/debug/bundleMode.js.map +1 -0
  153. package/lib/module/debug/bundleMode.native.js +11 -0
  154. package/lib/module/debug/bundleMode.native.js.map +1 -0
  155. package/lib/module/debug/checkCppVersion.js +29 -0
  156. package/lib/module/debug/checkCppVersion.js.map +1 -0
  157. package/lib/module/debug/errors.native.js +67 -0
  158. package/lib/module/debug/errors.native.js.map +1 -0
  159. package/lib/module/debug/jsVersion.js +9 -0
  160. package/lib/module/debug/jsVersion.js.map +1 -0
  161. package/lib/module/debug/logger.js +15 -0
  162. package/lib/module/debug/logger.js.map +1 -0
  163. package/lib/module/debug/slowAnimations.js +7 -0
  164. package/lib/module/debug/slowAnimations.js.map +1 -0
  165. package/lib/module/debug/slowAnimations.native.js +17 -0
  166. package/lib/module/debug/slowAnimations.native.js.map +1 -0
  167. package/lib/module/deprecated.js +27 -0
  168. package/lib/module/deprecated.js.map +1 -0
  169. package/lib/module/featureFlags/featureFlags.js +12 -0
  170. package/lib/module/featureFlags/featureFlags.js.map +1 -0
  171. package/lib/module/featureFlags/featureFlags.native.js +51 -0
  172. package/lib/module/featureFlags/featureFlags.native.js.map +1 -0
  173. package/lib/module/featureFlags/staticFlags.json +6 -0
  174. package/lib/module/featureFlags/types.js +16 -0
  175. package/lib/module/featureFlags/types.js.map +1 -0
  176. package/lib/module/guardImplementation.native.js +17 -0
  177. package/lib/module/guardImplementation.native.js.map +1 -0
  178. package/lib/module/index.js +26 -0
  179. package/lib/module/index.js.map +1 -0
  180. package/lib/module/initializers/initializers.js +24 -0
  181. package/lib/module/initializers/initializers.js.map +1 -0
  182. package/lib/module/initializers/initializers.native.js +195 -0
  183. package/lib/module/initializers/initializers.native.js.map +1 -0
  184. package/lib/module/memory/bundleUnpacker.native.js +38 -0
  185. package/lib/module/memory/bundleUnpacker.native.js.map +1 -0
  186. package/lib/module/memory/customSerializableUnpacker.native.js +20 -0
  187. package/lib/module/memory/customSerializableUnpacker.native.js.map +1 -0
  188. package/lib/module/memory/isShareable.js +8 -0
  189. package/lib/module/memory/isShareable.js.map +1 -0
  190. package/lib/module/memory/isSynchronizable.js +8 -0
  191. package/lib/module/memory/isSynchronizable.js.map +1 -0
  192. package/lib/module/memory/remoteFunctionUnpacker.native.js +18 -0
  193. package/lib/module/memory/remoteFunctionUnpacker.native.js.map +1 -0
  194. package/lib/module/memory/serializable.js +18 -0
  195. package/lib/module/memory/serializable.js.map +1 -0
  196. package/lib/module/memory/serializable.native.js +619 -0
  197. package/lib/module/memory/serializable.native.js.map +1 -0
  198. package/lib/module/memory/serializableMappingCache.js +11 -0
  199. package/lib/module/memory/serializableMappingCache.js.map +1 -0
  200. package/lib/module/memory/serializableMappingCache.native.js +29 -0
  201. package/lib/module/memory/serializableMappingCache.native.js.map +1 -0
  202. package/lib/module/memory/shareable.js +18 -0
  203. package/lib/module/memory/shareable.js.map +1 -0
  204. package/lib/module/memory/shareable.native.js +42 -0
  205. package/lib/module/memory/shareable.native.js.map +1 -0
  206. package/lib/module/memory/shareableGuestUnpacker.native.js +105 -0
  207. package/lib/module/memory/shareableGuestUnpacker.native.js.map +1 -0
  208. package/lib/module/memory/shareableHostUnpacker.native.js +20 -0
  209. package/lib/module/memory/shareableHostUnpacker.native.js.map +1 -0
  210. package/lib/module/memory/synchronizable.js +6 -0
  211. package/lib/module/memory/synchronizable.js.map +1 -0
  212. package/lib/module/memory/synchronizable.native.js +9 -0
  213. package/lib/module/memory/synchronizable.native.js.map +1 -0
  214. package/lib/module/memory/synchronizableUnpacker.native.js +47 -0
  215. package/lib/module/memory/synchronizableUnpacker.native.js.map +1 -0
  216. package/lib/module/memory/types.js +12 -0
  217. package/lib/module/memory/types.js.map +1 -0
  218. package/lib/module/memory/valueUnpacker.native.js +52 -0
  219. package/lib/module/memory/valueUnpacker.native.js.map +1 -0
  220. package/lib/module/mock.js +85 -0
  221. package/lib/module/mock.js.map +1 -0
  222. package/lib/module/package.json +1 -0
  223. package/lib/module/platformChecker.js +4 -0
  224. package/lib/module/platformChecker.js.map +1 -0
  225. package/lib/module/platformChecker.native.js +4 -0
  226. package/lib/module/platformChecker.native.js.map +1 -0
  227. package/lib/module/privateGlobals.d.js +7 -0
  228. package/lib/module/privateGlobals.d.js.map +1 -0
  229. package/lib/module/runLoop/common/setImmediatePolyfill.js +15 -0
  230. package/lib/module/runLoop/common/setImmediatePolyfill.js.map +1 -0
  231. package/lib/module/runLoop/common/setIntervalPolyfill.js +26 -0
  232. package/lib/module/runLoop/common/setIntervalPolyfill.js.map +1 -0
  233. package/lib/module/runLoop/uiRuntime/mockedRequestAnimationFrame.js +10 -0
  234. package/lib/module/runLoop/uiRuntime/mockedRequestAnimationFrame.js.map +1 -0
  235. package/lib/module/runLoop/uiRuntime/requestAnimationFrame.js +71 -0
  236. package/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map +1 -0
  237. package/lib/module/runLoop/uiRuntime/setTimeoutPolyfill.js +32 -0
  238. package/lib/module/runLoop/uiRuntime/setTimeoutPolyfill.js.map +1 -0
  239. package/lib/module/runLoop/workletRuntime/index.js +19 -0
  240. package/lib/module/runLoop/workletRuntime/index.js.map +1 -0
  241. package/lib/module/runLoop/workletRuntime/queueMicrotask.js +11 -0
  242. package/lib/module/runLoop/workletRuntime/queueMicrotask.js.map +1 -0
  243. package/lib/module/runLoop/workletRuntime/requestAnimationFramePolyfill.js +48 -0
  244. package/lib/module/runLoop/workletRuntime/requestAnimationFramePolyfill.js.map +1 -0
  245. package/lib/module/runLoop/workletRuntime/setTimeout.js +28 -0
  246. package/lib/module/runLoop/workletRuntime/setTimeout.js.map +1 -0
  247. package/lib/module/runLoop/workletRuntime/taskQueue.js +37 -0
  248. package/lib/module/runLoop/workletRuntime/taskQueue.js.map +1 -0
  249. package/lib/module/runtimeKind.js +92 -0
  250. package/lib/module/runtimeKind.js.map +1 -0
  251. package/lib/module/runtimes.js +36 -0
  252. package/lib/module/runtimes.js.map +1 -0
  253. package/lib/module/runtimes.native.js +379 -0
  254. package/lib/module/runtimes.native.js.map +1 -0
  255. package/lib/module/specs/NativeWorkletsModule.js +5 -0
  256. package/lib/module/specs/NativeWorkletsModule.js.map +1 -0
  257. package/lib/module/specs/index.js +10 -0
  258. package/lib/module/specs/index.js.map +1 -0
  259. package/lib/module/threads.js +60 -0
  260. package/lib/module/threads.js.map +1 -0
  261. package/lib/module/threads.native.js +295 -0
  262. package/lib/module/threads.native.js.map +1 -0
  263. package/lib/module/types.js +5 -0
  264. package/lib/module/types.js.map +1 -0
  265. package/lib/module/workletFunction.js +36 -0
  266. package/lib/module/workletFunction.js.map +1 -0
  267. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts +3 -0
  268. package/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +1 -0
  269. package/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts +3 -0
  270. package/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts.map +1 -0
  271. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +59 -0
  272. package/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +1 -0
  273. package/lib/typescript/bundleMode/metroOverrides.native.d.ts +9 -0
  274. package/lib/typescript/bundleMode/metroOverrides.native.d.ts.map +1 -0
  275. package/lib/typescript/bundleMode/network.native.d.ts +7 -0
  276. package/lib/typescript/bundleMode/network.native.d.ts.map +1 -0
  277. package/lib/typescript/debug/bundleMode.d.ts +2 -0
  278. package/lib/typescript/debug/bundleMode.d.ts.map +1 -0
  279. package/lib/typescript/debug/bundleMode.native.d.ts +2 -0
  280. package/lib/typescript/debug/bundleMode.native.d.ts.map +1 -0
  281. package/lib/typescript/debug/checkCppVersion.d.ts +3 -0
  282. package/lib/typescript/debug/checkCppVersion.d.ts.map +1 -0
  283. package/lib/typescript/debug/errors.native.d.ts +13 -0
  284. package/lib/typescript/debug/errors.native.d.ts.map +1 -0
  285. package/lib/typescript/debug/jsVersion.d.ts +7 -0
  286. package/lib/typescript/debug/jsVersion.d.ts.map +1 -0
  287. package/lib/typescript/debug/logger.d.ts +5 -0
  288. package/lib/typescript/debug/logger.d.ts.map +1 -0
  289. package/lib/typescript/debug/slowAnimations.d.ts +2 -0
  290. package/lib/typescript/debug/slowAnimations.d.ts.map +1 -0
  291. package/lib/typescript/debug/slowAnimations.native.d.ts +11 -0
  292. package/lib/typescript/debug/slowAnimations.native.d.ts.map +1 -0
  293. package/lib/typescript/deprecated.d.ts +19 -0
  294. package/lib/typescript/deprecated.d.ts.map +1 -0
  295. package/lib/typescript/featureFlags/featureFlags.d.ts +5 -0
  296. package/lib/typescript/featureFlags/featureFlags.d.ts.map +1 -0
  297. package/lib/typescript/featureFlags/featureFlags.native.d.ts +6 -0
  298. package/lib/typescript/featureFlags/featureFlags.native.d.ts.map +1 -0
  299. package/lib/typescript/featureFlags/types.d.ts +23 -0
  300. package/lib/typescript/featureFlags/types.d.ts.map +1 -0
  301. package/lib/typescript/guardImplementation.native.d.ts +3 -0
  302. package/lib/typescript/guardImplementation.native.d.ts.map +1 -0
  303. package/lib/typescript/index.d.ts +19 -0
  304. package/lib/typescript/index.d.ts.map +1 -0
  305. package/lib/typescript/initializers/initializers.d.ts +2 -0
  306. package/lib/typescript/initializers/initializers.d.ts.map +1 -0
  307. package/lib/typescript/initializers/initializers.native.d.ts +19 -0
  308. package/lib/typescript/initializers/initializers.native.d.ts.map +1 -0
  309. package/lib/typescript/memory/bundleUnpacker.native.d.ts +7 -0
  310. package/lib/typescript/memory/bundleUnpacker.native.d.ts.map +1 -0
  311. package/lib/typescript/memory/customSerializableUnpacker.native.d.ts +3 -0
  312. package/lib/typescript/memory/customSerializableUnpacker.native.d.ts.map +1 -0
  313. package/lib/typescript/memory/isShareable.d.ts +3 -0
  314. package/lib/typescript/memory/isShareable.d.ts.map +1 -0
  315. package/lib/typescript/memory/isSynchronizable.d.ts +3 -0
  316. package/lib/typescript/memory/isSynchronizable.d.ts.map +1 -0
  317. package/lib/typescript/memory/remoteFunctionUnpacker.native.d.ts +3 -0
  318. package/lib/typescript/memory/remoteFunctionUnpacker.native.d.ts.map +1 -0
  319. package/lib/typescript/memory/serializable.d.ts +7 -0
  320. package/lib/typescript/memory/serializable.d.ts.map +1 -0
  321. package/lib/typescript/memory/serializable.native.d.ts +37 -0
  322. package/lib/typescript/memory/serializable.native.d.ts.map +1 -0
  323. package/lib/typescript/memory/serializableMappingCache.d.ts +6 -0
  324. package/lib/typescript/memory/serializableMappingCache.d.ts.map +1 -0
  325. package/lib/typescript/memory/serializableMappingCache.native.d.ts +13 -0
  326. package/lib/typescript/memory/serializableMappingCache.native.d.ts.map +1 -0
  327. package/lib/typescript/memory/shareable.d.ts +15 -0
  328. package/lib/typescript/memory/shareable.d.ts.map +1 -0
  329. package/lib/typescript/memory/shareable.native.d.ts +15 -0
  330. package/lib/typescript/memory/shareable.native.d.ts.map +1 -0
  331. package/lib/typescript/memory/shareableGuestUnpacker.native.d.ts +4 -0
  332. package/lib/typescript/memory/shareableGuestUnpacker.native.d.ts.map +1 -0
  333. package/lib/typescript/memory/shareableHostUnpacker.native.d.ts +4 -0
  334. package/lib/typescript/memory/shareableHostUnpacker.native.d.ts.map +1 -0
  335. package/lib/typescript/memory/synchronizable.d.ts +3 -0
  336. package/lib/typescript/memory/synchronizable.d.ts.map +1 -0
  337. package/lib/typescript/memory/synchronizable.native.d.ts +3 -0
  338. package/lib/typescript/memory/synchronizable.native.d.ts.map +1 -0
  339. package/lib/typescript/memory/synchronizableUnpacker.native.d.ts +4 -0
  340. package/lib/typescript/memory/synchronizableUnpacker.native.d.ts.map +1 -0
  341. package/lib/typescript/memory/types.d.ts +136 -0
  342. package/lib/typescript/memory/types.d.ts.map +1 -0
  343. package/lib/typescript/memory/valueUnpacker.native.d.ts +7 -0
  344. package/lib/typescript/memory/valueUnpacker.native.d.ts.map +1 -0
  345. package/lib/typescript/mock.d.ts +2 -0
  346. package/lib/typescript/mock.d.ts.map +1 -0
  347. package/lib/typescript/package.json +1 -0
  348. package/lib/typescript/platformChecker.d.ts +2 -0
  349. package/lib/typescript/platformChecker.d.ts.map +1 -0
  350. package/lib/typescript/platformChecker.native.d.ts +2 -0
  351. package/lib/typescript/platformChecker.native.d.ts.map +1 -0
  352. package/lib/typescript/runLoop/common/setImmediatePolyfill.d.ts +2 -0
  353. package/lib/typescript/runLoop/common/setImmediatePolyfill.d.ts.map +1 -0
  354. package/lib/typescript/runLoop/common/setIntervalPolyfill.d.ts +2 -0
  355. package/lib/typescript/runLoop/common/setIntervalPolyfill.d.ts.map +1 -0
  356. package/lib/typescript/runLoop/uiRuntime/mockedRequestAnimationFrame.d.ts +6 -0
  357. package/lib/typescript/runLoop/uiRuntime/mockedRequestAnimationFrame.d.ts.map +1 -0
  358. package/lib/typescript/runLoop/uiRuntime/requestAnimationFrame.d.ts +2 -0
  359. package/lib/typescript/runLoop/uiRuntime/requestAnimationFrame.d.ts.map +1 -0
  360. package/lib/typescript/runLoop/uiRuntime/setTimeoutPolyfill.d.ts +2 -0
  361. package/lib/typescript/runLoop/uiRuntime/setTimeoutPolyfill.d.ts.map +1 -0
  362. package/lib/typescript/runLoop/workletRuntime/index.d.ts +2 -0
  363. package/lib/typescript/runLoop/workletRuntime/index.d.ts.map +1 -0
  364. package/lib/typescript/runLoop/workletRuntime/queueMicrotask.d.ts +2 -0
  365. package/lib/typescript/runLoop/workletRuntime/queueMicrotask.d.ts.map +1 -0
  366. package/lib/typescript/runLoop/workletRuntime/requestAnimationFramePolyfill.d.ts +2 -0
  367. package/lib/typescript/runLoop/workletRuntime/requestAnimationFramePolyfill.d.ts.map +1 -0
  368. package/lib/typescript/runLoop/workletRuntime/setTimeout.d.ts +2 -0
  369. package/lib/typescript/runLoop/workletRuntime/setTimeout.d.ts.map +1 -0
  370. package/lib/typescript/runLoop/workletRuntime/taskQueue.d.ts +10 -0
  371. package/lib/typescript/runLoop/workletRuntime/taskQueue.d.ts.map +1 -0
  372. package/lib/typescript/runtimeKind.d.ts +56 -0
  373. package/lib/typescript/runtimeKind.d.ts.map +1 -0
  374. package/lib/typescript/runtimes.d.ts +15 -0
  375. package/lib/typescript/runtimes.d.ts.map +1 -0
  376. package/lib/typescript/runtimes.native.d.ts +155 -0
  377. package/lib/typescript/runtimes.native.d.ts.map +1 -0
  378. package/lib/typescript/specs/NativeWorkletsModule.d.ts +9 -0
  379. package/lib/typescript/specs/NativeWorkletsModule.d.ts.map +1 -0
  380. package/lib/typescript/specs/index.d.ts +3 -0
  381. package/lib/typescript/specs/index.d.ts.map +1 -0
  382. package/lib/typescript/threads.d.ts +8 -0
  383. package/lib/typescript/threads.d.ts.map +1 -0
  384. package/lib/typescript/threads.native.d.ts +125 -0
  385. package/lib/typescript/threads.native.d.ts.map +1 -0
  386. package/lib/typescript/types.d.ts +136 -0
  387. package/lib/typescript/types.d.ts.map +1 -0
  388. package/lib/typescript/workletFunction.d.ts +26 -0
  389. package/lib/typescript/workletFunction.d.ts.map +1 -0
  390. package/package.json +220 -0
  391. package/plugin/index.d.ts +168 -0
  392. package/plugin/index.js +2188 -0
  393. package/scripts/validate-react-native-version.js +43 -0
  394. package/scripts/worklets_utils.rb +94 -0
  395. package/src/WorkletsModule/NativeWorklets.native.ts +461 -0
  396. package/src/WorkletsModule/NativeWorklets.ts +5 -0
  397. package/src/WorkletsModule/workletsModuleProxy.ts +247 -0
  398. package/src/bundleMode/metroOverrides.native.ts +33 -0
  399. package/src/bundleMode/network.native.ts +63 -0
  400. package/src/debug/bundleMode.native.ts +18 -0
  401. package/src/debug/bundleMode.ts +5 -0
  402. package/src/debug/checkCppVersion.ts +34 -0
  403. package/src/debug/errors.native.ts +74 -0
  404. package/src/debug/jsVersion.ts +8 -0
  405. package/src/debug/logger.ts +16 -0
  406. package/src/debug/slowAnimations.native.ts +15 -0
  407. package/src/debug/slowAnimations.ts +6 -0
  408. package/src/deprecated.ts +38 -0
  409. package/src/featureFlags/featureFlags.native.ts +70 -0
  410. package/src/featureFlags/featureFlags.ts +20 -0
  411. package/src/featureFlags/staticFlags.json +6 -0
  412. package/src/featureFlags/types.ts +32 -0
  413. package/src/guardImplementation.native.ts +26 -0
  414. package/src/index.ts +95 -0
  415. package/src/initializers/initializers.native.ts +218 -0
  416. package/src/initializers/initializers.ts +24 -0
  417. package/src/memory/bundleUnpacker.native.ts +59 -0
  418. package/src/memory/customSerializableUnpacker.native.ts +30 -0
  419. package/src/memory/isShareable.ts +16 -0
  420. package/src/memory/isSynchronizable.ts +14 -0
  421. package/src/memory/remoteFunctionUnpacker.native.ts +27 -0
  422. package/src/memory/serializable.native.ts +889 -0
  423. package/src/memory/serializable.ts +36 -0
  424. package/src/memory/serializableMappingCache.native.ts +37 -0
  425. package/src/memory/serializableMappingCache.ts +12 -0
  426. package/src/memory/shareable.native.ts +68 -0
  427. package/src/memory/shareable.ts +27 -0
  428. package/src/memory/shareableGuestUnpacker.native.ts +168 -0
  429. package/src/memory/shareableHostUnpacker.native.ts +31 -0
  430. package/src/memory/synchronizable.native.ts +17 -0
  431. package/src/memory/synchronizable.ts +9 -0
  432. package/src/memory/synchronizableUnpacker.native.ts +65 -0
  433. package/src/memory/types.ts +191 -0
  434. package/src/memory/valueUnpacker.native.ts +79 -0
  435. package/src/mock.ts +111 -0
  436. package/src/platformChecker.native.ts +3 -0
  437. package/src/platformChecker.ts +4 -0
  438. package/src/privateGlobals.d.ts +127 -0
  439. package/src/runLoop/common/setImmediatePolyfill.ts +20 -0
  440. package/src/runLoop/common/setIntervalPolyfill.ts +38 -0
  441. package/src/runLoop/uiRuntime/mockedRequestAnimationFrame.ts +11 -0
  442. package/src/runLoop/uiRuntime/requestAnimationFrame.ts +87 -0
  443. package/src/runLoop/uiRuntime/setTimeoutPolyfill.ts +40 -0
  444. package/src/runLoop/workletRuntime/index.ts +18 -0
  445. package/src/runLoop/workletRuntime/queueMicrotask.ts +13 -0
  446. package/src/runLoop/workletRuntime/requestAnimationFramePolyfill.ts +61 -0
  447. package/src/runLoop/workletRuntime/setTimeout.ts +37 -0
  448. package/src/runLoop/workletRuntime/taskQueue.ts +44 -0
  449. package/src/runtimeKind.ts +85 -0
  450. package/src/runtimes.native.ts +572 -0
  451. package/src/runtimes.ts +107 -0
  452. package/src/specs/NativeWorkletsModule.ts +11 -0
  453. package/src/specs/index.ts +13 -0
  454. package/src/threads.native.ts +408 -0
  455. package/src/threads.ts +110 -0
  456. package/src/types.ts +164 -0
  457. package/src/workletFunction.ts +41 -0
@@ -0,0 +1,203 @@
1
+ #include <worklets/Tools/ScriptBuffer.h>
2
+ #include <worklets/WorkletRuntime/BundleModeConfig.h>
3
+ #include <worklets/WorkletRuntime/RuntimeBindings.h>
4
+ #include <worklets/android/AnimationFrameCallback.h>
5
+ #include <worklets/android/WorkletsModule.h>
6
+
7
+ #ifdef WORKLETS_FETCH_PREVIEW_ENABLED
8
+ #include <folly/json/dynamic.h>
9
+ #include <jni.h>
10
+ #include <jsi/JSIDynamic.h>
11
+ #include <react/jni/JCallback.h>
12
+ #include <react/jni/ReadableNativeArray.h>
13
+ #include <react/jni/ReadableNativeMap.h>
14
+ #include <worklets/WorkletRuntime/WorkletRuntime.h>
15
+ #include <worklets/android/JWorkletRuntimeWrapper.h>
16
+
17
+ #include <vector>
18
+ #endif // WORKLETS_FETCH_PREVIEW_ENABLED
19
+
20
+ #include <memory>
21
+ #include <string>
22
+ #include <utility>
23
+
24
+ namespace worklets {
25
+
26
+ using namespace facebook;
27
+ using namespace react;
28
+
29
+ WorkletsModule::WorkletsModule(
30
+ jni::alias_ref<jhybridobject> jThis, // NOLINT //(performance-unnecessary-value-param)
31
+ const BundleModeConfig &bundleModeConfig,
32
+ jsi::Runtime *rnRuntime,
33
+ const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
34
+ const std::shared_ptr<UIScheduler> &uiScheduler)
35
+ : javaPart_(jni::make_global(jThis)),
36
+ rnRuntime_(rnRuntime),
37
+ rnRuntimeStatus_(std::make_shared<RNRuntimeStatus>()),
38
+ workletsModuleProxy_(std::make_shared<WorkletsModuleProxy>(
39
+ *rnRuntime,
40
+ jsCallInvoker,
41
+ uiScheduler,
42
+ getIsOnJSQueueThread(),
43
+ getRuntimeBindings(bundleModeConfig.enabled, *rnRuntime),
44
+ bundleModeConfig,
45
+ rnRuntimeStatus_)) {}
46
+
47
+ jni::local_ref<WorkletsModule::jhybriddata> WorkletsModule::initHybrid(
48
+ jni::alias_ref<jhybridobject> jThis, // NOLINT //(performance-unnecessary-value-param)
49
+ jboolean bundleModeEnabled,
50
+ jlong jsContext,
51
+ jni::alias_ref<facebook::react::CallInvokerHolder::javaobject> jsCallInvokerHolder,
52
+ jni::alias_ref<worklets::AndroidUIScheduler::javaobject> androidUIScheduler,
53
+ jni::alias_ref<JScriptBufferWrapper::javaobject>
54
+ jScriptBufferWrapper // NOLINT //(performance-unnecessary-value-param)
55
+ ) {
56
+ auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
57
+ auto rnRuntime = reinterpret_cast<jsi::Runtime *>(jsContext); // NOLINT //(performance-no-int-to-ptr)
58
+ auto uiScheduler = androidUIScheduler->cthis()->getUIScheduler();
59
+
60
+ std::shared_ptr<const ScriptBuffer> script = nullptr;
61
+ std::string sourceURL;
62
+ if (bundleModeEnabled) {
63
+ auto cxxWrapper = jScriptBufferWrapper->cthis();
64
+ script = cxxWrapper->getScript();
65
+ sourceURL = cxxWrapper->getSourceUrl();
66
+ }
67
+
68
+ return makeCxxInstance(
69
+ jThis,
70
+ BundleModeConfig{
71
+ .enabled = static_cast<bool>(bundleModeEnabled),
72
+ .script = script,
73
+ .sourceURL = sourceURL,
74
+ },
75
+ rnRuntime,
76
+ jsCallInvoker,
77
+ uiScheduler);
78
+ }
79
+
80
+ std::shared_ptr<RuntimeBindings> WorkletsModule::getRuntimeBindings(
81
+ const bool bundleModeEnabled,
82
+ jsi::Runtime &rnRuntime) {
83
+ return std::make_shared<RuntimeBindings>(RuntimeBindings{
84
+ .requestAnimationFrame = getRequestAnimationFrame(),
85
+ .nativeLoggingHook =
86
+ bundleModeEnabled ? extractNativeLoggingHookFromRNRuntime(rnRuntime) : RuntimeBindings::NativeLoggingHook{}
87
+ #ifdef WORKLETS_FETCH_PREVIEW_ENABLED
88
+ ,
89
+ .abortRequest = getAbortRequest(),
90
+ .clearCookies = getClearCookies(),
91
+ .sendRequest = getSendRequest()
92
+ #endif // WORKLETS_FETCH_PREVIEW_ENABLED
93
+ });
94
+ }
95
+
96
+ RuntimeBindings::RequestAnimationFrame WorkletsModule::getRequestAnimationFrame() {
97
+ return [javaPart = javaPart_](std::function<void(const double)> &&callback) -> void {
98
+ static const auto jRequestAnimationFrame =
99
+ javaPart->getClass()->getMethod<void(AnimationFrameCallback::javaobject)>("requestAnimationFrame");
100
+ jRequestAnimationFrame(javaPart.get(), AnimationFrameCallback::newObjectCxxArgs(std::move(callback)).get());
101
+ };
102
+ }
103
+
104
+ #ifdef WORKLETS_FETCH_PREVIEW_ENABLED
105
+ RuntimeBindings::AbortRequest WorkletsModule::getAbortRequest() {
106
+ return [javaPart = javaPart_](jsi::Runtime &rt, double requestId) -> void {
107
+ static const auto jAbortRequest = javaPart->getClass()->getMethod<void(int, double)>("abortRequest");
108
+ auto workletRuntime = WorkletRuntime::getWeakRuntimeFromJSIRuntime(rt).lock();
109
+ jAbortRequest(javaPart.get(), static_cast<int>(workletRuntime->getRuntimeId()), requestId);
110
+ };
111
+ }
112
+
113
+ RuntimeBindings::ClearCookies WorkletsModule::getClearCookies() {
114
+ return [javaPart = javaPart_](jsi::Runtime &rt, jsi::Function &&responseSender) {
115
+ static const auto jClearCookies = javaPart->getClass()->getMethod<void(JCallback::javaobject)>("clearCookies");
116
+ auto jsiFunction = std::make_shared<jsi::Function>(std::move(responseSender));
117
+ auto workletRuntime = WorkletRuntime::getWeakRuntimeFromJSIRuntime(rt);
118
+ auto callback = [jsiFunction, workletRuntime](folly::dynamic args) {
119
+ if (auto runtime = workletRuntime.lock()) {
120
+ runtime->schedule([jsiFunction, args = std::move(args)](jsi::Runtime &rt) {
121
+ std::vector<jsi::Value> jsArgs;
122
+ for (auto &arg : args) {
123
+ jsArgs.push_back(jsi::valueFromDynamic(rt, arg));
124
+ }
125
+ const jsi::Value *rawData = jsArgs.data();
126
+ size_t size = jsArgs.size();
127
+ jsiFunction->call(rt, rawData, size);
128
+ });
129
+ }
130
+ };
131
+ jClearCookies(javaPart.get(), JCxxCallbackImpl::newObjectCxxArgs(std::move(callback)).get());
132
+ };
133
+ }
134
+
135
+ RuntimeBindings::SendRequest WorkletsModule::getSendRequest() {
136
+ return [javaPart = javaPart_](
137
+ jsi::Runtime &rt,
138
+ jsi::String &method,
139
+ jsi::String &url,
140
+ double requestId,
141
+ jsi::Array &headers,
142
+ jsi::Object &data,
143
+ jsi::String &responseType,
144
+ bool incrementalUpdates,
145
+ double timeout,
146
+ bool withCredentials) {
147
+ static const auto jSendRequest = javaPart->getClass()
148
+ ->getMethod<void(
149
+ JWorkletRuntimeWrapper::javaobject,
150
+ std::string /* method */,
151
+ std::string /* url */,
152
+ double /* requestId */,
153
+ ReadableNativeArray::javaobject /* headers */,
154
+ ReadableNativeMap::javaobject /* data */,
155
+ std::string /* responseType */,
156
+ bool /* incrementalUpdates */,
157
+ double /* timeout */,
158
+ bool /* withCredentials */
159
+ )>("sendRequest");
160
+ auto workletRuntime = WorkletRuntime::getWeakRuntimeFromJSIRuntime(rt).lock();
161
+
162
+ jSendRequest(
163
+ javaPart.get(),
164
+ JWorkletRuntimeWrapper::makeJWorkletRuntimeWrapper(workletRuntime).get(),
165
+ method.utf8(rt),
166
+ url.utf8(rt),
167
+ requestId,
168
+ ReadableNativeArray::newObjectCxxArgs(jsi::dynamicFromValue(rt, jsi::Value(std::move(headers)))).get(),
169
+ ReadableNativeMap::newObjectCxxArgs(jsi::dynamicFromValue(rt, jsi::Value(std::move(data)))).get(),
170
+ responseType.utf8(rt),
171
+ incrementalUpdates,
172
+ timeout,
173
+ withCredentials);
174
+ };
175
+ }
176
+ #endif // WORKLETS_FETCH_PREVIEW_ENABLED
177
+
178
+ std::function<bool()> WorkletsModule::getIsOnJSQueueThread() {
179
+ return [javaPart = javaPart_]() -> bool {
180
+ static const auto jIsOnJSQueueThread = javaPart->getClass()->getMethod<jboolean()>("isOnJSQueueThread");
181
+ return jIsOnJSQueueThread(javaPart);
182
+ };
183
+ }
184
+
185
+ void WorkletsModule::invalidateCpp() {
186
+ rnRuntimeStatus_->setDead();
187
+ javaPart_.reset();
188
+ workletsModuleProxy_.reset();
189
+ }
190
+
191
+ void WorkletsModule::startCpp() {
192
+ workletsModuleProxy_->start();
193
+ }
194
+
195
+ void WorkletsModule::registerNatives() {
196
+ registerHybrid({
197
+ makeNativeMethod("initHybrid", WorkletsModule::initHybrid),
198
+ makeNativeMethod("invalidateCpp", WorkletsModule::invalidateCpp),
199
+ makeNativeMethod("startCpp", WorkletsModule::startCpp),
200
+ });
201
+ }
202
+
203
+ } // namespace worklets
@@ -0,0 +1,75 @@
1
+ #pragma once
2
+
3
+ #include <ReactCommon/CallInvokerHolder.h>
4
+ #include <fbjni/fbjni.h>
5
+ #include <jsi/jsi.h>
6
+ #include <worklets/NativeModules/WorkletsModuleProxy.h>
7
+ #include <worklets/Tools/RNRuntimeStatus.h>
8
+ #include <worklets/Tools/ScriptBuffer.h>
9
+ #include <worklets/WorkletRuntime/BundleModeConfig.h>
10
+ #include <worklets/WorkletRuntime/RuntimeBindings.h>
11
+ #include <worklets/android/AndroidUIScheduler.h>
12
+ #include <worklets/android/JScriptBufferWrapper.h>
13
+
14
+ #include <memory>
15
+ #include <string>
16
+
17
+ namespace worklets {
18
+
19
+ using namespace facebook;
20
+ using namespace facebook::jni;
21
+
22
+ class WorkletsModule : public jni::HybridClass<WorkletsModule> {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/swmansion/worklets/WorkletsModule;";
25
+
26
+ static jni::local_ref<jhybriddata> initHybrid(
27
+ jni::alias_ref<jhybridobject> jThis,
28
+ jboolean bundleModeEnabled,
29
+ jlong jsContext,
30
+ jni::alias_ref<facebook::react::CallInvokerHolder::javaobject> jsCallInvokerHolder,
31
+ jni::alias_ref<worklets::AndroidUIScheduler::javaobject> androidUIScheduler,
32
+ jni::alias_ref<JScriptBufferWrapper::javaobject> jScriptBufferWrapper);
33
+
34
+ static void registerNatives();
35
+
36
+ inline std::shared_ptr<WorkletsModuleProxy> getWorkletsModuleProxy() {
37
+ return workletsModuleProxy_;
38
+ }
39
+
40
+ private:
41
+ explicit WorkletsModule(
42
+ jni::alias_ref<jhybridobject> jThis,
43
+ const BundleModeConfig &bundleModeConfig,
44
+ jsi::Runtime *rnRuntime,
45
+ const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
46
+ const std::shared_ptr<UIScheduler> &uiScheduler);
47
+
48
+ void startCpp();
49
+
50
+ void invalidateCpp();
51
+
52
+ template <class Signature>
53
+ JMethod<Signature> getJniMethod(std::string const &methodName) {
54
+ return javaPart_->getClass()->getMethod<Signature>(methodName.c_str());
55
+ }
56
+
57
+ std::shared_ptr<RuntimeBindings> getRuntimeBindings(bool bundleModeEnabled, jsi::Runtime &rnRuntime);
58
+
59
+ RuntimeBindings::RequestAnimationFrame getRequestAnimationFrame();
60
+ #ifdef WORKLETS_FETCH_PREVIEW_ENABLED
61
+ RuntimeBindings::AbortRequest getAbortRequest();
62
+ RuntimeBindings::ClearCookies getClearCookies();
63
+ RuntimeBindings::SendRequest getSendRequest();
64
+ #endif // WORKLETS_FETCH_PREVIEW_ENABLED
65
+
66
+ std::function<bool()> getIsOnJSQueueThread();
67
+
68
+ friend HybridBase;
69
+ jni::global_ref<WorkletsModule::javaobject> javaPart_;
70
+ jsi::Runtime *rnRuntime_;
71
+ std::shared_ptr<RNRuntimeStatus> rnRuntimeStatus_;
72
+ std::shared_ptr<WorkletsModuleProxy> workletsModuleProxy_;
73
+ };
74
+
75
+ } // namespace worklets
@@ -0,0 +1,19 @@
1
+ #include <fbjni/fbjni.h>
2
+
3
+ #include <worklets/android/AndroidUIScheduler.h>
4
+ #include <worklets/android/AnimationFrameCallback.h>
5
+ #include <worklets/android/JScriptBufferWrapper.h>
6
+ #include <worklets/android/JWorkletRuntimeWrapper.h>
7
+ #include <worklets/android/WorkletsModule.h>
8
+
9
+ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
10
+ return facebook::jni::initialize(vm, [] {
11
+ worklets::WorkletsModule::registerNatives();
12
+ worklets::AndroidUIScheduler::registerNatives();
13
+ worklets::AnimationFrameCallback::registerNatives();
14
+ worklets::JScriptBufferWrapper::registerNatives();
15
+ #ifdef WORKLETS_FETCH_PREVIEW_ENABLED
16
+ worklets::JWorkletRuntimeWrapper::registerNatives();
17
+ #endif // WORKLETS_FETCH_PREVIEW_ENABLED
18
+ });
19
+ }
@@ -0,0 +1,56 @@
1
+ package com.swmansion.worklets
2
+
3
+ import com.facebook.jni.HybridData
4
+ import com.facebook.proguard.annotations.DoNotStrip
5
+ import com.facebook.react.bridge.GuardedRunnable
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.UiThreadUtil
8
+ import java.util.concurrent.atomic.AtomicBoolean
9
+
10
+ @Suppress("KotlinJniMissingFunction")
11
+ class AndroidUIScheduler(
12
+ context: ReactApplicationContext,
13
+ ) {
14
+ @field:DoNotStrip
15
+ private val mHybridData: HybridData = initHybrid()
16
+
17
+ private val mContext: ReactApplicationContext = context
18
+ private val mActive = AtomicBoolean(true)
19
+
20
+ private val mUIThreadRunnable =
21
+ Runnable {
22
+ // This callback is called on the UI thread, but the module is invalidated on the JS
23
+ // thread. Therefore, we must synchronize for reloads. Without synchronization the cpp part
24
+ // gets torn down while the UI thread is still executing it, leading to crashes.
25
+ synchronized(mActive) {
26
+ if (mActive.get()) {
27
+ triggerUI()
28
+ }
29
+ }
30
+ }
31
+
32
+ private external fun initHybrid(): HybridData
33
+
34
+ external fun triggerUI()
35
+
36
+ external fun invalidate()
37
+
38
+ @DoNotStrip
39
+ @Suppress("unused")
40
+ private fun scheduleTriggerOnUI() {
41
+ UiThreadUtil.runOnUiThread(
42
+ object : GuardedRunnable(mContext.exceptionHandler) {
43
+ override fun runGuarded() {
44
+ mUIThreadRunnable.run()
45
+ }
46
+ },
47
+ )
48
+ }
49
+
50
+ fun deactivate() {
51
+ synchronized(mActive) {
52
+ mActive.set(false)
53
+ invalidate()
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,103 @@
1
+ package com.swmansion.worklets
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.content.res.AssetManager
5
+ import android.os.Build
6
+ import com.facebook.jni.HybridData
7
+ import com.facebook.proguard.annotations.DoNotStrip
8
+ import com.facebook.proguard.annotations.DoNotStripAny
9
+ import java.io.IOException
10
+ import java.io.InputStream
11
+ import java.net.HttpURLConnection
12
+ import java.net.URL
13
+ import java.nio.charset.StandardCharsets
14
+
15
+ /** A wrapper around a JavaScript bundle that is backed by a native C++ object. */
16
+ @Suppress("KotlinJniMissingFunction")
17
+ @SuppressLint("MissingNativeLoadLibrary")
18
+ @DoNotStripAny
19
+ class ScriptBufferWrapper(
20
+ uri: String,
21
+ assetManager: AssetManager,
22
+ ) {
23
+ @field:DoNotStrip
24
+ private val mHybridData: HybridData
25
+
26
+ init {
27
+ val filePrefix = "file://"
28
+ val absPathPrefix = "/"
29
+ val assetsPrefix = "assets://"
30
+
31
+ mHybridData =
32
+ when {
33
+ uri.startsWith(filePrefix) -> {
34
+ val fileName = uri.substring(filePrefix.length)
35
+ initHybridFromFile(fileName)
36
+ }
37
+ uri.startsWith(assetsPrefix) -> {
38
+ val assetURL = uri.substring(assetsPrefix.length)
39
+ initHybridFromAssets(assetManager, assetURL)
40
+ }
41
+ uri.startsWith(absPathPrefix) -> {
42
+ initHybridFromFile(uri)
43
+ }
44
+ else -> {
45
+ val scriptContent =
46
+ try {
47
+ downloadScript(uri)
48
+ } catch (e: IOException) {
49
+ throw RuntimeException(e)
50
+ }
51
+ initHybridFromString(scriptContent, uri)
52
+ }
53
+ }
54
+ }
55
+
56
+ private external fun initHybridFromAssets(
57
+ assetManager: AssetManager,
58
+ assetURL: String,
59
+ ): HybridData
60
+
61
+ private external fun initHybridFromFile(fileName: String): HybridData
62
+
63
+ private external fun initHybridFromString(
64
+ script: String,
65
+ url: String,
66
+ ): HybridData
67
+
68
+ companion object {
69
+ private fun downloadScript(url: String): String {
70
+ val scriptUrl = URL(url)
71
+ val connection = scriptUrl.openConnection() as HttpURLConnection
72
+ try {
73
+ val content: ByteArray
74
+
75
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
76
+ content = connection.inputStream.readAllBytes()
77
+ } else {
78
+ content = readBytes(connection.inputStream)
79
+ }
80
+
81
+ return String(content, StandardCharsets.UTF_8)
82
+ } finally {
83
+ connection.disconnect()
84
+ }
85
+ }
86
+
87
+ /** Reads all bytes from an InputStream into a byte array for SDKs below 33. */
88
+ private fun readBytes(inputStream: InputStream): ByteArray {
89
+ val bufferSize = 4096
90
+ try {
91
+ val byteBuffer = java.io.ByteArrayOutputStream()
92
+ val buffer = ByteArray(bufferSize)
93
+ var len: Int
94
+ while (inputStream.read(buffer).also { len = it } != -1) {
95
+ byteBuffer.write(buffer, 0, len)
96
+ }
97
+ return byteBuffer.toByteArray()
98
+ } finally {
99
+ inputStream.close()
100
+ }
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,42 @@
1
+ package com.swmansion.worklets
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.ReactPackage
5
+ import com.facebook.react.bridge.NativeModule
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.module.annotations.ReactModule
8
+ import com.facebook.react.module.annotations.ReactModuleList
9
+ import com.facebook.react.module.model.ReactModuleInfo
10
+ import com.facebook.react.module.model.ReactModuleInfoProvider
11
+
12
+ @ReactModuleList(nativeModules = [WorkletsModule::class])
13
+ class WorkletsPackage :
14
+ BaseReactPackage(),
15
+ ReactPackage {
16
+ override fun getModule(
17
+ name: String,
18
+ reactContext: ReactApplicationContext,
19
+ ): NativeModule? = if (name == WorkletsModule.NAME) WorkletsModule(reactContext) else null
20
+
21
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
22
+ val moduleList: Array<Class<*>> = arrayOf(WorkletsModule::class.java)
23
+
24
+ val reactModuleInfoMap = HashMap<String, ReactModuleInfo>()
25
+ for (moduleClass in moduleList) {
26
+ val reactModule: ReactModule =
27
+ checkNotNull(moduleClass.getAnnotation(ReactModule::class.java))
28
+
29
+ reactModuleInfoMap[reactModule.name] =
30
+ ReactModuleInfo(
31
+ reactModule.name,
32
+ moduleClass.name,
33
+ reactModule.canOverrideExistingModule,
34
+ reactModule.needsEagerInit,
35
+ reactModule.isCxxModule,
36
+ true,
37
+ )
38
+ }
39
+
40
+ return ReactModuleInfoProvider { reactModuleInfoMap }
41
+ }
42
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.worklets.runloop
2
+
3
+ import com.facebook.jni.HybridData
4
+ import com.facebook.proguard.annotations.DoNotStrip
5
+
6
+ @DoNotStrip
7
+ @Suppress("KotlinJniMissingFunction")
8
+ class AnimationFrameCallback
9
+ @DoNotStrip
10
+ private constructor(
11
+ @field:DoNotStrip private val mHybridData: HybridData,
12
+ ) {
13
+ external fun onAnimationFrame(timestampMs: Double)
14
+ }
@@ -0,0 +1,112 @@
1
+ package com.swmansion.worklets.runloop
2
+
3
+ import android.os.SystemClock
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.modules.core.ReactChoreographer
6
+ import com.facebook.react.uimanager.GuardedFrameCallback
7
+ import java.util.concurrent.atomic.AtomicBoolean
8
+
9
+ class AnimationFrameQueue(
10
+ reactApplicationContext: ReactApplicationContext,
11
+ ) {
12
+ private var mFirstUptime = SystemClock.uptimeMillis()
13
+ private var mSlowAnimationsEnabled = false
14
+ private var lastFrameTimeMs = 0.0
15
+ private var mAnimationsDragFactor = 1
16
+
17
+ // ReactChoreographer is
18
+ // [thread safe](https://github.com/facebook/react-native/blob/main/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactChoreographer.kt#L21).
19
+ private val mReactChoreographer: ReactChoreographer = ReactChoreographer.getInstance()
20
+ private val mChoreographerCallback: GuardedFrameCallback =
21
+ object : GuardedFrameCallback(reactApplicationContext) {
22
+ override fun doFrameGuarded(frameTimeNanos: Long) {
23
+ executeQueue(frameTimeNanos)
24
+ }
25
+ }
26
+ private val mCallbackPosted = AtomicBoolean()
27
+ private val mPaused = AtomicBoolean()
28
+ private val mFrameCallbacks = mutableListOf<AnimationFrameCallback>()
29
+
30
+ fun resume() {
31
+ if (mPaused.getAndSet(false)) {
32
+ scheduleQueueExecution()
33
+ }
34
+ }
35
+
36
+ fun pause() {
37
+ synchronized(mPaused) {
38
+ if (!mPaused.getAndSet(true) && mCallbackPosted.getAndSet(false)) {
39
+ mReactChoreographer.removeFrameCallback(
40
+ ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE,
41
+ mChoreographerCallback,
42
+ )
43
+ }
44
+ }
45
+ }
46
+
47
+ fun requestAnimationFrame(animationFrameCallback: AnimationFrameCallback) {
48
+ synchronized(mFrameCallbacks) {
49
+ mFrameCallbacks.add(animationFrameCallback)
50
+ }
51
+ scheduleQueueExecution()
52
+ }
53
+
54
+ fun enableSlowAnimations(
55
+ slowAnimationsEnabled: Boolean,
56
+ animationsDragFactor: Int,
57
+ ) {
58
+ mSlowAnimationsEnabled = slowAnimationsEnabled
59
+ mAnimationsDragFactor = animationsDragFactor
60
+ if (slowAnimationsEnabled) {
61
+ mFirstUptime = SystemClock.uptimeMillis()
62
+ }
63
+ }
64
+
65
+ private fun scheduleQueueExecution() {
66
+ synchronized(mPaused) {
67
+ if (!mPaused.get() && !mCallbackPosted.getAndSet(true)) {
68
+ mReactChoreographer.postFrameCallback(
69
+ ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE,
70
+ mChoreographerCallback,
71
+ )
72
+ }
73
+ }
74
+ }
75
+
76
+ private fun executeQueue(frameTimeNanos: Long) {
77
+ val currentFrameTimeMs = calculateTimestamp(frameTimeNanos)
78
+ if (currentFrameTimeMs <= lastFrameTimeMs) {
79
+ // It is possible for ChoreographerCallback to be executed twice within the same frame
80
+ // due to frame drops. If this occurs, the additional callback execution should be ignored.
81
+ mCallbackPosted.set(false)
82
+ scheduleQueueExecution()
83
+ return
84
+ }
85
+
86
+ val frameCallbacks = pullCallbacks()
87
+ mCallbackPosted.set(false)
88
+
89
+ lastFrameTimeMs = currentFrameTimeMs
90
+ for (callback in frameCallbacks) {
91
+ callback.onAnimationFrame(currentFrameTimeMs)
92
+ }
93
+ }
94
+
95
+ private fun pullCallbacks(): List<AnimationFrameCallback> {
96
+ synchronized(mFrameCallbacks) {
97
+ val frameCallbacks = mFrameCallbacks.toList()
98
+ mFrameCallbacks.clear()
99
+ return frameCallbacks
100
+ }
101
+ }
102
+
103
+ private fun calculateTimestamp(frameTimeNanos: Long): Double {
104
+ val nanosecondsInMilliseconds = 1000000.0
105
+ var currentFrameTimeMs = frameTimeNanos / nanosecondsInMilliseconds
106
+ if (mSlowAnimationsEnabled) {
107
+ currentFrameTimeMs =
108
+ mFirstUptime + (currentFrameTimeMs - mFirstUptime) / mAnimationsDragFactor
109
+ }
110
+ return currentFrameTimeMs
111
+ }
112
+ }
@@ -0,0 +1,27 @@
1
+ package com.swmansion.worklets
2
+
3
+ import com.facebook.jni.HybridData
4
+ import com.facebook.jni.annotations.DoNotStrip
5
+ import com.facebook.react.bridge.Arguments
6
+ import com.facebook.react.bridge.WritableNativeArray
7
+
8
+ @DoNotStrip
9
+ @Suppress("KotlinJniMissingFunction")
10
+ class WorkletRuntimeWrapper
11
+ @DoNotStrip
12
+ private constructor(
13
+ @field:DoNotStrip private val mHybridData: HybridData,
14
+ ) {
15
+ fun emitDeviceEvent(
16
+ eventName: String,
17
+ params: Any?,
18
+ ) {
19
+ cxxEmitDeviceEvent(Arguments.fromJavaArgs(arrayOf(eventName, params)))
20
+ }
21
+
22
+ fun getRuntimeId(): Int = cxxGetRuntimeId()
23
+
24
+ private external fun cxxEmitDeviceEvent(args: WritableNativeArray)
25
+
26
+ private external fun cxxGetRuntimeId(): Int
27
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Based on HeaderUtil.kt from React Native
3
+ */
4
+
5
+ package com.swmansion.worklets
6
+
7
+ /**
8
+ * The class purpose is to weaken too strict OkHttp restriction on http headers. See:
9
+ * https://github.com/square/okhttp/issues/2016 Auth headers might have an Authentication
10
+ * information. It is better to get 401 from the server in this case, rather than non descriptive
11
+ * error as 401 could be handled to invalidate the wrong token in the client code.
12
+ */
13
+ internal class WorkletsHeaderUtil {
14
+ companion object {
15
+ @JvmStatic
16
+ fun stripHeaderName(name: String): String {
17
+ val builder = StringBuilder(name.length)
18
+ var modified = false
19
+ for (i in 0 until name.length) {
20
+ val c = name[i]
21
+ if (c > '\u0020' && c < '\u007f') {
22
+ builder.append(c)
23
+ } else {
24
+ modified = true
25
+ }
26
+ }
27
+ return if (modified) builder.toString() else name
28
+ }
29
+ }
30
+ }