@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,71 @@
1
+ #include <jsi/jsi.h>
2
+ #include <react/debug/react_native_assert.h>
3
+ #include <worklets/SharedItems/Serializable.h>
4
+ #include <worklets/SharedItems/SerializableRemoteFunction.h>
5
+ #include <worklets/WorkletRuntime/RuntimeManager.h>
6
+ #include <worklets/WorkletRuntime/WorkletRuntime.h>
7
+
8
+ #include <memory>
9
+
10
+ using namespace facebook;
11
+
12
+ namespace worklets {
13
+
14
+ namespace {
15
+
16
+ jsi::Function getRemoteFunctionUnpacker(jsi::Runtime &rt) {
17
+ auto remoteFunctionUnpacker = rt.global().getProperty(rt, "__remoteFunctionUnpacker");
18
+ react_native_assert(remoteFunctionUnpacker.isObject() && "remoteFunctionUnpacker not found");
19
+ return remoteFunctionUnpacker.asObject(rt).asFunction(rt);
20
+ }
21
+
22
+ } // namespace
23
+
24
+ SerializableRemoteFunction::~SerializableRemoteFunction() {
25
+ if (isHostedOnRNRuntime()) {
26
+ rnRuntimeStatus_->runWhileLocked([this](bool isDead) {
27
+ if (isDead) {
28
+ freeWithoutCallingDestructor(function_);
29
+ } else {
30
+ function_.reset();
31
+ }
32
+ });
33
+ } else {
34
+ cleanupRuntimeAware(hostRuntime_, function_);
35
+ }
36
+ }
37
+
38
+ jsi::Value SerializableRemoteFunction::toJSValue(jsi::Runtime &rt) {
39
+ if (&rt == hostRuntime_) {
40
+ return jsi::Value(rt, *function_);
41
+ } else {
42
+ const auto name = name_.empty() ? jsi::Value::undefined() : jsi::String::createFromUtf8(rt, name_);
43
+ auto holderFunction = getRemoteFunctionUnpacker(rt).call(rt, name).getObject(rt);
44
+ holderFunction.setNativeState(rt, std::make_shared<SerializableJSRef>(shared_from_this()));
45
+ return holderFunction;
46
+ }
47
+ }
48
+
49
+ // TODO: generalize it and merge with other scheduling methods
50
+ void SerializableRemoteFunction::resolveOrRejectPromise(
51
+ const std::shared_ptr<Serializable> &resolveValue,
52
+ const std::shared_ptr<RuntimeManager> &runtimeManager) {
53
+ if (isHostedOnRNRuntime()) {
54
+ jsScheduler_->scheduleOnJS([resolver = shared_from_this(), resolveValue](jsi::Runtime &rt) {
55
+ resolver->toJSValue(rt).getObject(rt).getFunction(rt).call(rt, resolveValue->toJSValue(rt));
56
+ });
57
+ } else {
58
+ const auto workletRuntime = runtimeManager->getRuntime(hostRuntimeId_);
59
+ // NOLINTNEXTLINE(readability/braces)
60
+ if (!workletRuntime) [[unlikely]] {
61
+ // Host runtime is dead, most likely we're the last owner of the Remote Function.
62
+ // Do nothing.
63
+ } else {
64
+ workletRuntime->schedule([resolver = shared_from_this(), resolveValue](jsi::Runtime &rt) {
65
+ resolver->toJSValue(rt).getObject(rt).getFunction(rt).call(rt, resolveValue->toJSValue(rt));
66
+ });
67
+ }
68
+ }
69
+ }
70
+
71
+ } // namespace worklets
@@ -0,0 +1,75 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <worklets/SharedItems/Serializable.h>
5
+ #include <worklets/Tools/JSScheduler.h>
6
+ #include <worklets/Tools/RNRuntimeStatus.h>
7
+
8
+ #include <memory>
9
+ #include <string>
10
+
11
+ namespace worklets {
12
+
13
+ class RuntimeManager;
14
+
15
+ class SerializableRemoteFunction : public Serializable,
16
+ public std::enable_shared_from_this<SerializableRemoteFunction> {
17
+ public:
18
+ /** Creates RN Runtime Remote Function. */
19
+ SerializableRemoteFunction(
20
+ jsi::Runtime &rnRuntime,
21
+ const std::string &name,
22
+ jsi::Function &&function,
23
+ const std::shared_ptr<JSScheduler> &jsScheduler,
24
+ const std::shared_ptr<RNRuntimeStatus> &rnRuntimeStatus)
25
+ : Serializable(ValueType::RemoteFunctionType),
26
+ hostRuntime_(&rnRuntime),
27
+ hostRuntimeId_(RuntimeData::rnRuntimeId),
28
+ function_(std::make_unique<jsi::Value>(rnRuntime, std::move(function))),
29
+ name_(name),
30
+ jsScheduler_(jsScheduler),
31
+ rnRuntimeStatus_(rnRuntimeStatus) {}
32
+
33
+ /** Creates Worklet Runtime Remote Function. */
34
+ SerializableRemoteFunction(
35
+ jsi::Runtime &workletRuntime,
36
+ const std::string &name,
37
+ jsi::Function &&function,
38
+ RuntimeData::RuntimeId hostRuntimeId)
39
+ : Serializable(ValueType::RemoteFunctionType),
40
+ hostRuntime_(&workletRuntime),
41
+ hostRuntimeId_(hostRuntimeId),
42
+ function_(std::make_unique<jsi::Value>(workletRuntime, std::move(function))),
43
+ name_(name),
44
+ jsScheduler_(nullptr),
45
+ rnRuntimeStatus_(nullptr) {}
46
+
47
+ ~SerializableRemoteFunction() override;
48
+
49
+ SerializableRemoteFunction(const SerializableRemoteFunction &) = delete;
50
+ SerializableRemoteFunction &operator=(const SerializableRemoteFunction &) = delete;
51
+
52
+ void resolveOrRejectPromise(
53
+ const std::shared_ptr<Serializable> &resolveValue,
54
+ const std::shared_ptr<RuntimeManager> &runtimeManager);
55
+
56
+ jsi::Value toJSValue(jsi::Runtime &rt) override;
57
+
58
+ [[nodiscard]] bool isHostedOnRNRuntime() const noexcept {
59
+ return hostRuntimeId_ == RuntimeData::rnRuntimeId;
60
+ }
61
+
62
+ [[nodiscard]] RuntimeData::RuntimeId getHostRuntimeId() const noexcept {
63
+ return hostRuntimeId_;
64
+ }
65
+
66
+ private:
67
+ jsi::Runtime *hostRuntime_;
68
+ const RuntimeData::RuntimeId hostRuntimeId_;
69
+ std::unique_ptr<jsi::Value> function_;
70
+ const std::string name_;
71
+ const std::shared_ptr<JSScheduler> jsScheduler_;
72
+ const std::shared_ptr<RNRuntimeStatus> rnRuntimeStatus_;
73
+ };
74
+
75
+ } // namespace worklets
@@ -0,0 +1,84 @@
1
+ #include <jsi/jsi.h>
2
+ #include <worklets/SharedItems/Serializable.h>
3
+ #include <worklets/SharedItems/Shareable.h>
4
+ #include <worklets/WorkletRuntime/WorkletRuntime.h>
5
+
6
+ #include <memory>
7
+ #include <mutex>
8
+ #include <utility>
9
+
10
+ namespace worklets {
11
+
12
+ jsi::Function Shareable::getShareableHostUnpacker(jsi::Runtime &rt) {
13
+ return rt.global().getPropertyAsFunction(rt, "__shareableHostUnpacker");
14
+ }
15
+
16
+ jsi::Function Shareable::getShareableGuestUnpacker(jsi::Runtime &rt) {
17
+ return rt.global().getPropertyAsFunction(rt, "__shareableGuestUnpacker");
18
+ }
19
+
20
+ Shareable::Shareable(
21
+ const std::shared_ptr<WorkletRuntime> &hostRuntime,
22
+ const std::shared_ptr<Serializable> &initial,
23
+ const bool initSynchronously,
24
+ const std::shared_ptr<Serializable> &decorateHost,
25
+ const std::shared_ptr<Serializable> &decorateGuest)
26
+ : Serializable(ValueType::ShareableType),
27
+ weakHostRuntime_(hostRuntime),
28
+ hostRuntimeId_(hostRuntime->getRuntimeId()),
29
+ hostJSIRuntime_(hostRuntime->getJSIRuntime()),
30
+ initial_(initial),
31
+ initSynchronously_(initSynchronously),
32
+ decorateHost_(decorateHost),
33
+ decorateGuest_(decorateGuest) {
34
+ if (initSynchronously) {
35
+ hostRuntime->runSync([this](jsi::Runtime &rt) { initHostValue(); });
36
+ }
37
+ }
38
+
39
+ Shareable::~Shareable() {
40
+ if (hostValue_) {
41
+ const auto strongHostRuntime = weakHostRuntime_.lock();
42
+ if (strongHostRuntime) {
43
+ hostValue_.reset();
44
+ } else {
45
+ freeWithoutCallingDestructor(hostValue_);
46
+ }
47
+ }
48
+ }
49
+
50
+ jsi::Value Shareable::toJSValue(jsi::Runtime &rt) {
51
+ if (&rt == &hostJSIRuntime_) {
52
+ return hostJSValue();
53
+ } else {
54
+ return guestJSValue(rt);
55
+ }
56
+ }
57
+
58
+ jsi::Value Shareable::hostJSValue() {
59
+ if (!initSynchronously_ && !hostValue_) {
60
+ std::lock_guard lock(initializationMutex_);
61
+ if (!hostValue_) {
62
+ initHostValue();
63
+ }
64
+ }
65
+
66
+ return jsi::Value(hostJSIRuntime_, *hostValue_);
67
+ }
68
+
69
+ jsi::Value Shareable::guestJSValue(jsi::Runtime &rt) {
70
+ const auto shareableUnpacker = getShareableGuestUnpacker(rt);
71
+ const auto ref = SerializableJSRef::newNativeStateObject(rt, shared_from_this());
72
+ return shareableUnpacker.call(rt, static_cast<double>(hostRuntimeId_), ref, decorateGuest_->toJSValue(rt));
73
+ }
74
+
75
+ void Shareable::initHostValue() {
76
+ const auto shareableUnpacker = getShareableHostUnpacker(hostJSIRuntime_);
77
+ const auto shareable = shareableUnpacker.call(
78
+ hostJSIRuntime_, initial_->toJSValue(hostJSIRuntime_), decorateHost_->toJSValue(hostJSIRuntime_));
79
+ hostValue_ = std::make_unique<jsi::Value>(hostJSIRuntime_, std::move(shareable));
80
+ initial_.reset();
81
+ decorateHost_.reset();
82
+ }
83
+
84
+ } // namespace worklets
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <worklets/SharedItems/Serializable.h>
5
+ #include <worklets/WorkletRuntime/WorkletRuntime.h>
6
+
7
+ #include <memory>
8
+
9
+ namespace worklets {
10
+
11
+ class Shareable : public Serializable, public std::enable_shared_from_this<Shareable> {
12
+ public:
13
+ static jsi::Function getShareableHostUnpacker(jsi::Runtime &rt);
14
+ static jsi::Function getShareableGuestUnpacker(jsi::Runtime &rt);
15
+
16
+ Shareable(
17
+ const std::shared_ptr<WorkletRuntime> &hostRuntime,
18
+ const std::shared_ptr<Serializable> &initial,
19
+ const bool initSynchronously,
20
+ const std::shared_ptr<Serializable> &decorateHost,
21
+ const std::shared_ptr<Serializable> &decorateGuest);
22
+
23
+ ~Shareable() override;
24
+
25
+ jsi::Value toJSValue(jsi::Runtime &rt) override;
26
+
27
+ private:
28
+ jsi::Value hostJSValue();
29
+ jsi::Value guestJSValue(jsi::Runtime &rt);
30
+ void initHostValue();
31
+
32
+ const std::weak_ptr<WorkletRuntime> weakHostRuntime_;
33
+ const RuntimeData::RuntimeId hostRuntimeId_;
34
+ jsi::Runtime &hostJSIRuntime_;
35
+ std::shared_ptr<Serializable> initial_;
36
+ const bool initSynchronously_;
37
+ std::mutex initializationMutex_;
38
+ std::unique_ptr<jsi::Value> hostValue_;
39
+ std::shared_ptr<Serializable> decorateHost_;
40
+ const std::shared_ptr<Serializable> decorateGuest_;
41
+ };
42
+
43
+ } // namespace worklets
@@ -0,0 +1,59 @@
1
+ #include <react/debug/react_native_assert.h>
2
+ #include <worklets/SharedItems/Synchronizable.h>
3
+
4
+ #include <memory>
5
+ #include <utility>
6
+
7
+ namespace worklets {
8
+
9
+ std::shared_ptr<Serializable> Synchronizable::getDirty() {
10
+ return value_;
11
+ }
12
+
13
+ std::shared_ptr<Serializable> Synchronizable::getBlocking() {
14
+ getBlockingBefore();
15
+ auto value = value_;
16
+ getBlockingAfter();
17
+ return value;
18
+ }
19
+
20
+ // TODO: Shared pointer members (unless they're atomic) can't be assigned
21
+ // in a non thread-safe manner, therefore `setDirty` has little sense now.
22
+ // void Synchronizable::setDirty(const std::shared_ptr<Serializable> &value) {
23
+ // setDirtyBefore();
24
+ // value_ = value;
25
+ // setDirtyAfter();
26
+ // }
27
+
28
+ void Synchronizable::setBlocking(const std::shared_ptr<Serializable> &value) {
29
+ setBlockingBefore();
30
+ value_ = value;
31
+ setBlockingAfter();
32
+ }
33
+
34
+ jsi::Value Synchronizable::toJSValue(jsi::Runtime &rt) {
35
+ auto synchronizableUnpacker = getSynchronizableUnpacker(rt);
36
+ auto ref = SerializableJSRef::newNativeStateObject(rt, this->shared_from_this());
37
+ return synchronizableUnpacker.call(rt, std::move(ref));
38
+ }
39
+
40
+ Synchronizable::Synchronizable(const std::shared_ptr<Serializable> &value)
41
+ : Serializable(ValueType::SynchronizableType), value_(value) {}
42
+
43
+ jsi::Function getSynchronizableUnpacker(jsi::Runtime &rt) {
44
+ auto synchronizableUnpacker = rt.global().getProperty(rt, "__synchronizableUnpacker");
45
+ react_native_assert(synchronizableUnpacker.isObject() && "synchronizableUnpacker not found");
46
+ return synchronizableUnpacker.asObject(rt).asFunction(rt);
47
+ }
48
+
49
+ std::shared_ptr<Synchronizable> extractSynchronizableOrThrow(jsi::Runtime &rt, const jsi::Value &value) {
50
+ auto serializable =
51
+ extractSerializableOrThrow(rt, value, "[Worklets] Expecting the object to be of type SerializableJSRef.");
52
+
53
+ auto synchronizable = std::dynamic_pointer_cast<Synchronizable>(serializable);
54
+ react_native_assert(synchronizable != nullptr && "[Worklets] Expected the object to be a Synchronizable.");
55
+
56
+ return synchronizable;
57
+ }
58
+
59
+ } // namespace worklets
@@ -0,0 +1,57 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <worklets/SharedItems/Serializable.h>
5
+ #include <worklets/SharedItems/SynchronizableAccess.h>
6
+
7
+ #include <memory>
8
+
9
+ using namespace facebook;
10
+
11
+ namespace worklets {
12
+
13
+ class Synchronizable : public SynchronizableAccess,
14
+ public Serializable,
15
+ public jsi::NativeState,
16
+ public std::enable_shared_from_this<Synchronizable> {
17
+ public:
18
+ /**
19
+ * Can run concurrently with getDirty, setDirty, getBlocking, setBlocking.
20
+ */
21
+ std::shared_ptr<Serializable> getDirty();
22
+
23
+ /**
24
+ * Can run concurrently with getDirty, getBlocking.
25
+ * Can't run concurrently with setDirty, setBlocking.
26
+ */
27
+ std::shared_ptr<Serializable> getBlocking();
28
+
29
+ // TODO: Shared pointer members (unless they're atomic) can't be assigned
30
+ // in a non thread-safe manner, therefore `setDirty` has little sense now.
31
+ /**
32
+ * Can run concurrently with getDirty, getBlocking.
33
+ * Can't run concurrently with setDirty, setBlocking.
34
+ */
35
+ // void setDirty(const std::shared_ptr<Serializable> &value);
36
+
37
+ /**
38
+ * Can run concurrently with getDirty.
39
+ * Can't run concurrently with getBlocking, setDirty, setBlocking.
40
+ */
41
+ void setBlocking(const std::shared_ptr<Serializable> &value);
42
+
43
+ jsi::Value toJSValue(jsi::Runtime &rt) override;
44
+
45
+ explicit Synchronizable(const std::shared_ptr<Serializable> &value);
46
+
47
+ ~Synchronizable() override = default;
48
+
49
+ private:
50
+ std::shared_ptr<Serializable> value_;
51
+ };
52
+
53
+ jsi::Function getSynchronizableUnpacker(jsi::Runtime &rt);
54
+
55
+ std::shared_ptr<Synchronizable> extractSynchronizableOrThrow(jsi::Runtime &rt, const jsi::Value &value);
56
+
57
+ }; // namespace worklets
@@ -0,0 +1,78 @@
1
+ #include <worklets/SharedItems/SynchronizableAccess.h>
2
+
3
+ #include <mutex>
4
+
5
+ namespace worklets {
6
+ void SynchronizableAccess::getBlockingBefore() {
7
+ std::unique_lock<std::mutex> lock(accessLock_);
8
+ queue_.wait(lock, [this]() {
9
+ return !blockingWriter_ /* && dirtyWriters_ == 0 */ && (!imperativelyLocked_ || imperativeOwner_ == pthread_self());
10
+ });
11
+ blockingReaders_++;
12
+ }
13
+
14
+ void SynchronizableAccess::getBlockingAfter() {
15
+ std::unique_lock<std::mutex> lock(accessLock_);
16
+ blockingReaders_--;
17
+ if (blockingReaders_ == 0) {
18
+ queue_.notify_all();
19
+ }
20
+ }
21
+
22
+ // TODO: Shared pointer members (unless they're atomic) can't be assigned
23
+ // in a non thread-safe manner, therefore `setDirty` has little sense now.
24
+ // void SynchronizableAccess::setDirtyBefore() {
25
+ // std::unique_lock<std::mutex> lock(accessLock_);
26
+ // queue_.wait(lock, [this]() {
27
+ // return !blockingWriter_ && blockingReaders_ == 0 &&
28
+ // (!imperativelyLocked_ || imperativeOwner_ == pthread_self());
29
+ // });
30
+ // dirtyWriters_++;
31
+ // }
32
+
33
+ // TODO: Shared pointer members (unless they're atomic) can't be assigned
34
+ // in a non thread-safe manner, therefore `setDirty` has little sense now.
35
+ // void SynchronizableAccess::setDirtyAfter() {
36
+ // std::unique_lock<std::mutex> lock(accessLock_);
37
+ // dirtyWriters_--;
38
+ // if (dirtyWriters_ == 0) {
39
+ // queue_.notify_all();
40
+ // }
41
+ // }
42
+
43
+ void SynchronizableAccess::setBlockingBefore() {
44
+ std::unique_lock<std::mutex> lock(accessLock_);
45
+ queue_.wait(lock, [this]() {
46
+ return !blockingWriter_ && blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ &&
47
+ (!imperativelyLocked_ || imperativeOwner_ == pthread_self());
48
+ });
49
+ blockingWriter_ = true;
50
+ }
51
+
52
+ void SynchronizableAccess::setBlockingAfter() {
53
+ std::unique_lock<std::mutex> lock(accessLock_);
54
+ blockingWriter_ = false;
55
+ queue_.notify_all();
56
+ }
57
+
58
+ void SynchronizableAccess::lock() {
59
+ std::unique_lock<std::mutex> lock(accessLock_);
60
+ queue_.wait(lock, [this]() {
61
+ return !blockingWriter_ && blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ &&
62
+ (!imperativelyLocked_ || imperativeOwner_ == pthread_self());
63
+ });
64
+ imperativelyLocked_ = true;
65
+ imperativeOwner_ = pthread_self();
66
+ }
67
+
68
+ void SynchronizableAccess::unlock() {
69
+ std::unique_lock<std::mutex> lock(accessLock_);
70
+ if (imperativeOwner_ != pthread_self()) {
71
+ return;
72
+ }
73
+ imperativelyLocked_ = false;
74
+ imperativeOwner_ = {};
75
+ queue_.notify_all();
76
+ }
77
+
78
+ } // namespace worklets
@@ -0,0 +1,45 @@
1
+ #pragma once
2
+
3
+ #include <condition_variable>
4
+ #include <mutex>
5
+
6
+ namespace worklets {
7
+
8
+ class SynchronizableAccess {
9
+ public:
10
+ /**
11
+ * Allows you to imperatively lock the synchronizable to perform a
12
+ * transaction.
13
+ */
14
+ void lock();
15
+
16
+ /**
17
+ * Unlocks the synchronizable after an imperative lock when the transaction is
18
+ * complete.
19
+ */
20
+ void unlock();
21
+
22
+ protected:
23
+ void getBlockingBefore();
24
+ void getBlockingAfter();
25
+
26
+ // TODO: Shared pointer members (unless they're atomic) can't be assigned
27
+ // in a non thread-safe manner, therefore `setDirty` has little sense now.
28
+ // void setDirtyBefore();
29
+ // void setDirtyAfter();
30
+
31
+ void setBlockingBefore();
32
+ void setBlockingAfter();
33
+
34
+ private:
35
+ int blockingReaders_{0};
36
+ // int dirtyWriters_{0};
37
+ bool blockingWriter_{false};
38
+ bool imperativelyLocked_{false};
39
+ pthread_t imperativeOwner_{};
40
+ std::mutex accessLock_;
41
+ std::recursive_mutex imperativeLock_;
42
+ std::condition_variable queue_;
43
+ };
44
+
45
+ } // namespace worklets
@@ -0,0 +1,78 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+ #include <worklets/Tools/ScriptBuffer.h>
5
+
6
+ #include <array>
7
+ #include <cstdint>
8
+ #include <memory>
9
+ #include <optional>
10
+ #include <stdexcept>
11
+ #include <string>
12
+ #include <vector>
13
+
14
+ namespace worklets {
15
+
16
+ struct CodeUnpacker {
17
+ std::string code;
18
+ std::string location;
19
+ std::string sourceMap;
20
+ };
21
+
22
+ struct BytecodeUnpacker {
23
+ std::vector<uint8_t> bytecode;
24
+ };
25
+
26
+ class UnpackerLoader {
27
+ public:
28
+ void loadCodeUnpackers(std::array<CodeUnpacker, 6> unpackers) {
29
+ codeUnpackers_ = std::move(unpackers);
30
+ }
31
+
32
+ void loadBytecodeUnpackers(std::array<BytecodeUnpacker, 6> unpackers) {
33
+ bytecodeUnpackers_ = std::move(unpackers);
34
+ }
35
+
36
+ void installUnpackers(facebook::jsi::Runtime &rt) const {
37
+ if (codeUnpackers_) {
38
+ for (const auto &unpacker : *codeUnpackers_) {
39
+ installUnpacker(rt, unpacker);
40
+ }
41
+ } else if (bytecodeUnpackers_) {
42
+ for (const auto &unpacker : *bytecodeUnpackers_) {
43
+ installUnpacker(rt, unpacker);
44
+ }
45
+ } else {
46
+ throw std::runtime_error("[Worklets] UnpackerLoader tried to install unpackers but they were not loaded.");
47
+ }
48
+ }
49
+
50
+ private:
51
+ static void installUnpacker(facebook::jsi::Runtime &rt, const CodeUnpacker &unpacker) {
52
+ #ifndef NDEBUG
53
+ if (!unpacker.sourceMap.empty()) {
54
+ rt.global()
55
+ .getPropertyAsFunction(rt, "evalWithSourceMap")
56
+ .call(rt, unpacker.code, unpacker.location, unpacker.sourceMap)
57
+ .getObject(rt)
58
+ .getFunction(rt)
59
+ .call(rt);
60
+ return;
61
+ }
62
+ #endif // NDEBUG
63
+ rt.evaluateJavaScript(std::make_shared<facebook::jsi::StringBuffer>(unpacker.code), unpacker.location)
64
+ .getObject(rt)
65
+ .getFunction(rt)
66
+ .call(rt);
67
+ }
68
+
69
+ static void installUnpacker(facebook::jsi::Runtime &rt, const BytecodeUnpacker &unpacker) {
70
+ auto buffer = std::make_shared<BytecodeBuffer>(unpacker.bytecode);
71
+ rt.evaluateJavaScript(buffer, "").getObject(rt).getFunction(rt).call(rt);
72
+ }
73
+
74
+ std::optional<std::array<CodeUnpacker, 6>> codeUnpackers_;
75
+ std::optional<std::array<BytecodeUnpacker, 6>> bytecodeUnpackers_;
76
+ };
77
+
78
+ } // namespace worklets
@@ -0,0 +1,18 @@
1
+ #include <worklets/Tools/FeatureFlags.h>
2
+
3
+ #include <string>
4
+ #include <unordered_map>
5
+
6
+ namespace worklets {
7
+
8
+ std::unordered_map<std::string, bool> DynamicFeatureFlags::flags_;
9
+
10
+ bool DynamicFeatureFlags::getFlag(const std::string &name) {
11
+ return flags_.contains(name) && flags_[name];
12
+ }
13
+
14
+ void DynamicFeatureFlags::setFlag(const std::string &name, bool value) {
15
+ flags_[name] = value;
16
+ }
17
+
18
+ } // namespace worklets
@@ -0,0 +1,44 @@
1
+ #pragma once
2
+ #include <string>
3
+ #include <unordered_map>
4
+
5
+ namespace worklets {
6
+
7
+ class StaticFeatureFlags {
8
+ public:
9
+ #ifdef WORKLETS_FEATURE_FLAGS
10
+
11
+ // Convert the value under x into a string
12
+ #define XTOSTRING(x) #x
13
+ // Evaluate the flag value; without this step, it would stringify the flag name
14
+ // itself instead of the flag value
15
+ #define TOSTRING(x) XTOSTRING(x)
16
+
17
+ static constexpr bool getFlag(const std::string_view &name) {
18
+ std::string nameStr = name.data();
19
+ std::string featureFlags = TOSTRING(WORKLETS_FEATURE_FLAGS);
20
+ if (featureFlags.find("[" + nameStr + ":") == std::string::npos) {
21
+ throw std::logic_error("Unable to recognize flag: " + nameStr);
22
+ }
23
+ return featureFlags.find("[" + nameStr + ":true]") != std::string::npos;
24
+ }
25
+
26
+ #else
27
+
28
+ static constexpr bool getFlag(const std::string_view &) {
29
+ return false;
30
+ }
31
+
32
+ #endif
33
+ };
34
+
35
+ class DynamicFeatureFlags {
36
+ public:
37
+ static bool getFlag(const std::string &name);
38
+ static void setFlag(const std::string &name, bool value);
39
+
40
+ private:
41
+ static std::unordered_map<std::string, bool> flags_;
42
+ };
43
+
44
+ } // namespace worklets