@shopify/react-native-skia 2.4.15 → 2.4.17

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 (226) hide show
  1. package/android/CMakeLists.txt +69 -0
  2. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +19 -7
  3. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +7 -0
  4. package/apple/RNSkApplePlatformContext.mm +4 -0
  5. package/cpp/api/JsiSkApi.h +31 -0
  6. package/cpp/api/JsiSkImageFactory.h +69 -1
  7. package/cpp/api/JsiSkImageFilter.h +1 -0
  8. package/cpp/api/JsiSkPath.h +1 -1
  9. package/cpp/jsi/RuntimeAwareCache.h +0 -2
  10. package/cpp/jsi2/EnumMapper.h +45 -0
  11. package/cpp/jsi2/JSIConverter.h +468 -0
  12. package/cpp/jsi2/NativeObject.h +598 -0
  13. package/cpp/jsi2/Promise.cpp +44 -0
  14. package/cpp/jsi2/Promise.h +35 -0
  15. package/cpp/rnskia/RNDawnContext.h +114 -0
  16. package/cpp/rnskia/RNSkManager.cpp +41 -1
  17. package/cpp/rnwgpu/ArrayBuffer.h +68 -0
  18. package/cpp/rnwgpu/api/Convertors.h +761 -0
  19. package/cpp/rnwgpu/api/External.h +12 -0
  20. package/cpp/rnwgpu/api/GPU.cpp +129 -0
  21. package/cpp/rnwgpu/api/GPU.h +57 -0
  22. package/cpp/rnwgpu/api/GPUAdapter.cpp +178 -0
  23. package/cpp/rnwgpu/api/GPUAdapter.h +59 -0
  24. package/cpp/rnwgpu/api/GPUAdapterInfo.h +57 -0
  25. package/cpp/rnwgpu/api/GPUBindGroup.cpp +3 -0
  26. package/cpp/rnwgpu/api/GPUBindGroup.h +51 -0
  27. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +52 -0
  28. package/cpp/rnwgpu/api/GPUBuffer.cpp +97 -0
  29. package/cpp/rnwgpu/api/GPUBuffer.h +87 -0
  30. package/cpp/rnwgpu/api/GPUCommandBuffer.h +45 -0
  31. package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +179 -0
  32. package/cpp/rnwgpu/api/GPUCommandEncoder.h +111 -0
  33. package/cpp/rnwgpu/api/GPUCompilationInfo.h +79 -0
  34. package/cpp/rnwgpu/api/GPUCompilationMessage.h +36 -0
  35. package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +60 -0
  36. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +85 -0
  37. package/cpp/rnwgpu/api/GPUComputePipeline.cpp +12 -0
  38. package/cpp/rnwgpu/api/GPUComputePipeline.h +60 -0
  39. package/cpp/rnwgpu/api/GPUDevice.cpp +434 -0
  40. package/cpp/rnwgpu/api/GPUDevice.h +174 -0
  41. package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +7 -0
  42. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +40 -0
  43. package/cpp/rnwgpu/api/GPUError.h +35 -0
  44. package/cpp/rnwgpu/api/GPUExtent3D.h +66 -0
  45. package/cpp/rnwgpu/api/GPUExternalTexture.h +45 -0
  46. package/cpp/rnwgpu/api/GPUFeatures.h +212 -0
  47. package/cpp/rnwgpu/api/GPUInternalError.h +31 -0
  48. package/cpp/rnwgpu/api/GPUOrigin2D.h +55 -0
  49. package/cpp/rnwgpu/api/GPUOrigin3D.h +62 -0
  50. package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +33 -0
  51. package/cpp/rnwgpu/api/GPUPipelineLayout.h +45 -0
  52. package/cpp/rnwgpu/api/GPUQuerySet.cpp +11 -0
  53. package/cpp/rnwgpu/api/GPUQuerySet.h +73 -0
  54. package/cpp/rnwgpu/api/GPUQueue.cpp +169 -0
  55. package/cpp/rnwgpu/api/GPUQueue.h +84 -0
  56. package/cpp/rnwgpu/api/GPURenderBundle.h +44 -0
  57. package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +131 -0
  58. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +110 -0
  59. package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +165 -0
  60. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +130 -0
  61. package/cpp/rnwgpu/api/GPURenderPipeline.cpp +13 -0
  62. package/cpp/rnwgpu/api/GPURenderPipeline.h +61 -0
  63. package/cpp/rnwgpu/api/GPUSampler.h +44 -0
  64. package/cpp/rnwgpu/api/GPUShaderModule.cpp +51 -0
  65. package/cpp/rnwgpu/api/GPUShaderModule.h +66 -0
  66. package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +129 -0
  67. package/cpp/rnwgpu/api/GPUSupportedLimits.h +131 -0
  68. package/cpp/rnwgpu/api/GPUTexture.cpp +47 -0
  69. package/cpp/rnwgpu/api/GPUTexture.h +150 -0
  70. package/cpp/rnwgpu/api/GPUTextureView.h +44 -0
  71. package/cpp/rnwgpu/api/GPUValidationError.h +32 -0
  72. package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +64 -0
  73. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +71 -0
  74. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +56 -0
  75. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +97 -0
  76. package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +57 -0
  77. package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +52 -0
  78. package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +56 -0
  79. package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +56 -0
  80. package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +59 -0
  81. package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +39 -0
  82. package/cpp/rnwgpu/api/descriptors/GPUColor.h +66 -0
  83. package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +58 -0
  84. package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +29 -0
  85. package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +45 -0
  86. package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +45 -0
  87. package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +56 -0
  88. package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +58 -0
  89. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +67 -0
  90. package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +103 -0
  91. package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +99 -0
  92. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +38 -0
  93. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +71 -0
  94. package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +73 -0
  95. package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +62 -0
  96. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +62 -0
  97. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +65 -0
  98. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +81 -0
  99. package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +54 -0
  100. package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +22 -0
  101. package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +54 -0
  102. package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +57 -0
  103. package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +69 -0
  104. package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +61 -0
  105. package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +55 -0
  106. package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +43 -0
  107. package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +45 -0
  108. package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +80 -0
  109. package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +81 -0
  110. package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +101 -0
  111. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +92 -0
  112. package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +58 -0
  113. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +103 -0
  114. package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +51 -0
  115. package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +45 -0
  116. package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +110 -0
  117. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +60 -0
  118. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +62 -0
  119. package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +25 -0
  120. package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +64 -0
  121. package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +59 -0
  122. package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +59 -0
  123. package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +91 -0
  124. package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +29 -0
  125. package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +91 -0
  126. package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +64 -0
  127. package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +53 -0
  128. package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +62 -0
  129. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +73 -0
  130. package/cpp/rnwgpu/api/descriptors/Unions.h +1984 -0
  131. package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
  132. package/cpp/rnwgpu/async/AsyncRunner.cpp +181 -0
  133. package/cpp/rnwgpu/async/AsyncRunner.h +56 -0
  134. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
  135. package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
  136. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
  137. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
  138. package/lib/commonjs/Platform/Platform.web.js +1 -2
  139. package/lib/commonjs/Platform/Platform.web.js.map +1 -1
  140. package/lib/commonjs/external/reanimated/buffers.js.map +1 -1
  141. package/lib/commonjs/external/reanimated/interpolators.d.ts +1 -4
  142. package/lib/commonjs/renderer/Canvas.js +4 -3
  143. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  144. package/lib/commonjs/renderer/components/Group.js +1 -2
  145. package/lib/commonjs/renderer/components/Group.js.map +1 -1
  146. package/lib/commonjs/renderer/components/shapes/FitBox.js +1 -2
  147. package/lib/commonjs/renderer/components/shapes/FitBox.js.map +1 -1
  148. package/lib/commonjs/skia/types/ContourMeasure.js.map +1 -1
  149. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +20 -0
  150. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  151. package/lib/commonjs/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
  152. package/lib/commonjs/skia/types/Skia.d.ts +17 -0
  153. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  154. package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
  155. package/lib/commonjs/skia/web/JsiSkImageFactory.js +6 -0
  156. package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
  157. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js +2 -2
  158. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js.map +1 -1
  159. package/lib/commonjs/skia/web/JsiSkia.js +6 -0
  160. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  161. package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js.map +1 -1
  162. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  163. package/lib/commonjs/sksg/Recorder/commands/PathEffects.js.map +1 -1
  164. package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -1
  165. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  166. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js +2 -0
  167. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  168. package/lib/commonjs/views/SkiaPictureView.web.js +4 -4
  169. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  170. package/lib/commonjs/web/WithSkiaWeb.js +1 -2
  171. package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
  172. package/lib/module/external/reanimated/buffers.js.map +1 -1
  173. package/lib/module/external/reanimated/interpolators.d.ts +1 -4
  174. package/lib/module/renderer/Canvas.js +3 -1
  175. package/lib/module/renderer/Canvas.js.map +1 -1
  176. package/lib/module/skia/types/ContourMeasure.js.map +1 -1
  177. package/lib/module/skia/types/Image/ImageFactory.d.ts +20 -0
  178. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  179. package/lib/module/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
  180. package/lib/module/skia/types/Skia.d.ts +17 -0
  181. package/lib/module/skia/types/Skia.js.map +1 -1
  182. package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
  183. package/lib/module/skia/web/JsiSkImageFactory.js +6 -0
  184. package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
  185. package/lib/module/skia/web/JsiSkParagraphStyle.js +2 -2
  186. package/lib/module/skia/web/JsiSkParagraphStyle.js.map +1 -1
  187. package/lib/module/skia/web/JsiSkia.js +6 -0
  188. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  189. package/lib/module/sksg/Recorder/commands/ColorFilters.js.map +1 -1
  190. package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  191. package/lib/module/sksg/Recorder/commands/PathEffects.js.map +1 -1
  192. package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -1
  193. package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  194. package/lib/module/specs/SkiaPictureViewNativeComponent.js +4 -0
  195. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  196. package/lib/module/views/SkiaPictureView.web.js +3 -2
  197. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  198. package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
  199. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
  200. package/lib/typescript/lib/module/renderer/Canvas.d.ts +1 -1
  201. package/lib/typescript/lib/module/skia/Skia.web.d.ts +2 -0
  202. package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
  203. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
  204. package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +1 -1
  205. package/lib/typescript/src/external/reanimated/interpolators.d.ts +1 -4
  206. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +20 -0
  207. package/lib/typescript/src/skia/types/Skia.d.ts +17 -0
  208. package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -0
  209. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  210. package/package.json +20 -16
  211. package/react-native-skia.podspec +52 -13
  212. package/scripts/install-skia.mjs +99 -48
  213. package/src/external/reanimated/buffers.ts +1 -1
  214. package/src/renderer/Canvas.tsx +3 -2
  215. package/src/skia/types/ContourMeasure.tsx +1 -2
  216. package/src/skia/types/Image/ImageFactory.ts +22 -0
  217. package/src/skia/types/RuntimeEffect/RuntimeEffect.ts +1 -2
  218. package/src/skia/types/Skia.ts +17 -0
  219. package/src/skia/web/JsiSkImageFactory.ts +8 -0
  220. package/src/skia/web/JsiSkia.ts +6 -0
  221. package/src/sksg/Recorder/commands/ColorFilters.ts +3 -2
  222. package/src/sksg/Recorder/commands/ImageFilters.ts +3 -2
  223. package/src/sksg/Recorder/commands/PathEffects.ts +3 -2
  224. package/src/sksg/Recorder/commands/Shaders.ts +3 -2
  225. package/src/specs/SkiaPictureViewNativeComponent.ts +7 -0
  226. package/src/views/SkiaPictureView.web.tsx +4 -1
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <memory>
5
+
6
+ #include <jsi/jsi.h>
7
+
8
+ namespace rnwgpu::async {
9
+
10
+ namespace jsi = facebook::jsi;
11
+
12
+ /**
13
+ * Abstract dispatcher used by the AsyncRunner to enqueue work back onto the
14
+ * JavaScript thread.
15
+ */
16
+ class AsyncDispatcher {
17
+ public:
18
+ using Work = std::function<void(jsi::Runtime &)>;
19
+
20
+ virtual ~AsyncDispatcher() = default;
21
+
22
+ /**
23
+ * Enqueue a unit of work that will be executed on the JavaScript thread.
24
+ */
25
+ virtual void post(Work work) = 0;
26
+ };
27
+
28
+ } // namespace rnwgpu::async
@@ -0,0 +1,181 @@
1
+ #include "AsyncRunner.h"
2
+
3
+ #include <chrono>
4
+ #include <stdexcept>
5
+ #include <utility>
6
+
7
+ #include "AsyncTaskHandle.h"
8
+
9
+ namespace rnwgpu::async {
10
+
11
+ // Static member definitions
12
+ std::mutex AsyncRunner::_runnersMutex;
13
+ std::unordered_map<jsi::Runtime *, std::shared_ptr<AsyncRunner>> AsyncRunner::_runners;
14
+
15
+ AsyncRunner::AsyncRunner(wgpu::Instance instance,
16
+ std::shared_ptr<AsyncDispatcher> dispatcher)
17
+ : _instance(std::move(instance)), _dispatcher(std::move(dispatcher)),
18
+ _pendingTasks(0), _pumpTasks(0), _tickScheduled(false),
19
+ _lastTickTimeNs(0) {
20
+ if (!_dispatcher) {
21
+ throw std::runtime_error("AsyncRunner requires a valid dispatcher.");
22
+ }
23
+ }
24
+
25
+ std::shared_ptr<AsyncRunner> AsyncRunner::get(jsi::Runtime &runtime) {
26
+ std::lock_guard<std::mutex> lock(_runnersMutex);
27
+ auto it = _runners.find(&runtime);
28
+ if (it == _runners.end()) {
29
+ return nullptr;
30
+ }
31
+ return it->second;
32
+ }
33
+
34
+ std::shared_ptr<AsyncRunner>
35
+ AsyncRunner::getOrCreate(jsi::Runtime &runtime, wgpu::Instance instance,
36
+ std::shared_ptr<AsyncDispatcher> dispatcher) {
37
+ std::lock_guard<std::mutex> lock(_runnersMutex);
38
+ auto it = _runners.find(&runtime);
39
+ if (it != _runners.end()) {
40
+ return it->second;
41
+ }
42
+
43
+ auto runner =
44
+ std::make_shared<AsyncRunner>(std::move(instance), std::move(dispatcher));
45
+ _runners[&runtime] = runner;
46
+ return runner;
47
+ }
48
+
49
+ AsyncTaskHandle AsyncRunner::postTask(const TaskCallback &callback,
50
+ bool keepPumping) {
51
+ auto handle = AsyncTaskHandle::create(shared_from_this(), keepPumping);
52
+ if (!handle.valid()) {
53
+ throw std::runtime_error("Failed to create AsyncTaskHandle.");
54
+ }
55
+
56
+ _pendingTasks.fetch_add(1, std::memory_order_acq_rel);
57
+ if (keepPumping) {
58
+ _pumpTasks.fetch_add(1, std::memory_order_acq_rel);
59
+ }
60
+ requestTick();
61
+
62
+ auto resolve = handle.createResolveFunction();
63
+ auto reject = handle.createRejectFunction();
64
+
65
+ try {
66
+ callback(resolve, reject);
67
+ } catch (const std::exception &exception) {
68
+ reject(exception.what());
69
+ } catch (...) {
70
+ reject("Unknown native error in AsyncRunner::postTask.");
71
+ }
72
+
73
+ return handle;
74
+ }
75
+
76
+ void AsyncRunner::requestTick() {
77
+ bool expected = false;
78
+ if (!_tickScheduled.compare_exchange_strong(expected, true,
79
+ std::memory_order_acq_rel)) {
80
+ return;
81
+ }
82
+
83
+ auto self = shared_from_this();
84
+ _dispatcher->post([self](jsi::Runtime &runtime) {
85
+ auto tickCallback = jsi::Function::createFromHostFunction(
86
+ runtime, jsi::PropNameID::forAscii(runtime, "AsyncRunnerTick"), 0,
87
+ [self](jsi::Runtime &runtime, const jsi::Value & /*thisValue*/,
88
+ const jsi::Value * /*args*/, size_t /*count*/) -> jsi::Value {
89
+ self->tick(runtime);
90
+ return jsi::Value::undefined();
91
+ });
92
+
93
+ #if defined(ANDROID) || defined(__ANDROID__)
94
+ auto global = runtime.global();
95
+ auto setImmediateValue = global.getProperty(runtime, "setImmediate");
96
+ constexpr auto kMinTickInterval = std::chrono::milliseconds(4);
97
+ const int64_t nowNs =
98
+ std::chrono::duration_cast<std::chrono::nanoseconds>(
99
+ std::chrono::steady_clock::now().time_since_epoch())
100
+ .count();
101
+ const int64_t lastNs =
102
+ self->_lastTickTimeNs.load(std::memory_order_acquire);
103
+ int delayMs = 0;
104
+ if (lastNs > 0) {
105
+ const int64_t elapsedNs = nowNs - lastNs;
106
+ const int64_t minIntervalNs = kMinTickInterval.count() * 1000000LL;
107
+ if (elapsedNs < minIntervalNs) {
108
+ const int64_t remainingNs = minIntervalNs - elapsedNs;
109
+ delayMs = static_cast<int>((remainingNs + 999999) / 1000000);
110
+ }
111
+ }
112
+
113
+ auto tryScheduleTimeout = [&](int ms) {
114
+ auto setTimeoutValue = global.getProperty(runtime, "setTimeout");
115
+ if (!setTimeoutValue.isObject()) {
116
+ return false;
117
+ }
118
+ auto setTimeoutObj = setTimeoutValue.asObject(runtime);
119
+ if (!setTimeoutObj.isFunction(runtime)) {
120
+ return false;
121
+ }
122
+ auto setTimeoutFn = setTimeoutObj.asFunction(runtime);
123
+ jsi::Value callbackArg(runtime, tickCallback);
124
+ jsi::Value delayArg(static_cast<double>(ms));
125
+ setTimeoutFn.call(runtime, callbackArg, delayArg);
126
+ return true;
127
+ };
128
+
129
+ if (delayMs > 0) {
130
+ if (tryScheduleTimeout(delayMs)) {
131
+ return;
132
+ }
133
+ // If setTimeout unavailable fall through to immediate scheduling.
134
+ }
135
+
136
+ if (setImmediateValue.isObject()) {
137
+ auto setImmediateObj = setImmediateValue.asObject(runtime);
138
+ if (setImmediateObj.isFunction(runtime)) {
139
+ auto setImmediateFn = setImmediateObj.asFunction(runtime);
140
+ jsi::Value callbackArg(runtime, tickCallback);
141
+ setImmediateFn.call(runtime, callbackArg);
142
+ return;
143
+ }
144
+ }
145
+
146
+ int timeoutDelayMs = delayMs > 0 ? delayMs : 0;
147
+ if (tryScheduleTimeout(timeoutDelayMs)) {
148
+ return;
149
+ }
150
+
151
+ runtime.queueMicrotask(std::move(tickCallback));
152
+ #else
153
+ runtime.queueMicrotask(std::move(tickCallback));
154
+ #endif
155
+ });
156
+ }
157
+
158
+ void AsyncRunner::tick(jsi::Runtime & /*runtime*/) {
159
+ _tickScheduled.store(false, std::memory_order_release);
160
+ _instance.ProcessEvents();
161
+ const auto nowNs = std::chrono::duration_cast<std::chrono::nanoseconds>(
162
+ std::chrono::steady_clock::now().time_since_epoch())
163
+ .count();
164
+ _lastTickTimeNs.store(nowNs, std::memory_order_release);
165
+ if (_pumpTasks.load(std::memory_order_acquire) > 0) {
166
+ requestTick();
167
+ }
168
+ }
169
+
170
+ void AsyncRunner::onTaskSettled(bool keepPumping) {
171
+ _pendingTasks.fetch_sub(1, std::memory_order_acq_rel);
172
+ if (keepPumping) {
173
+ _pumpTasks.fetch_sub(1, std::memory_order_acq_rel);
174
+ }
175
+ }
176
+
177
+ std::shared_ptr<AsyncDispatcher> AsyncRunner::dispatcher() const {
178
+ return _dispatcher;
179
+ }
180
+
181
+ } // namespace rnwgpu::async
@@ -0,0 +1,56 @@
1
+ #pragma once
2
+
3
+ #include <atomic>
4
+ #include <cstdint>
5
+ #include <functional>
6
+ #include <memory>
7
+ #include <mutex>
8
+ #include <unordered_map>
9
+
10
+ #include <jsi/jsi.h>
11
+
12
+ #include "AsyncDispatcher.h"
13
+ #include "AsyncTaskHandle.h"
14
+
15
+ #include "webgpu/webgpu_cpp.h"
16
+
17
+ namespace jsi = facebook::jsi;
18
+
19
+ namespace rnwgpu::async {
20
+
21
+ class AsyncRunner : public std::enable_shared_from_this<AsyncRunner> {
22
+ public:
23
+ using TaskCallback =
24
+ std::function<void(const AsyncTaskHandle::ResolveFunction &,
25
+ const AsyncTaskHandle::RejectFunction &)>;
26
+
27
+ AsyncRunner(wgpu::Instance instance,
28
+ std::shared_ptr<AsyncDispatcher> dispatcher);
29
+
30
+ static std::shared_ptr<AsyncRunner> get(jsi::Runtime &runtime);
31
+ static std::shared_ptr<AsyncRunner>
32
+ getOrCreate(jsi::Runtime &runtime, wgpu::Instance instance,
33
+ std::shared_ptr<AsyncDispatcher> dispatcher);
34
+
35
+ AsyncTaskHandle postTask(const TaskCallback &callback,
36
+ bool keepPumping = true);
37
+
38
+ void requestTick();
39
+ void tick(jsi::Runtime &runtime);
40
+ void onTaskSettled(bool keepPumping);
41
+
42
+ std::shared_ptr<AsyncDispatcher> dispatcher() const;
43
+
44
+ private:
45
+ static std::mutex _runnersMutex;
46
+ static std::unordered_map<jsi::Runtime *, std::shared_ptr<AsyncRunner>> _runners;
47
+
48
+ wgpu::Instance _instance;
49
+ std::shared_ptr<AsyncDispatcher> _dispatcher;
50
+ std::atomic<size_t> _pendingTasks;
51
+ std::atomic<size_t> _pumpTasks;
52
+ std::atomic<bool> _tickScheduled;
53
+ std::atomic<int64_t> _lastTickTimeNs;
54
+ };
55
+
56
+ } // namespace rnwgpu::async
@@ -0,0 +1,181 @@
1
+ #include "AsyncTaskHandle.h"
2
+
3
+ #include <string>
4
+ #include <utility>
5
+
6
+ #include "jsi2/Promise.h"
7
+
8
+ #include "AsyncRunner.h"
9
+
10
+ namespace rnwgpu::async {
11
+
12
+ using Action = std::function<void(jsi::Runtime &, rnwgpu::Promise &)>;
13
+
14
+ struct AsyncTaskHandle::State
15
+ : public std::enable_shared_from_this<AsyncTaskHandle::State> {
16
+ State(std::shared_ptr<AsyncRunner> runner, bool keepPumping)
17
+ : runner(std::move(runner)), keepPumping(keepPumping) {}
18
+
19
+ void settle(Action action);
20
+ void attachPromise(const std::shared_ptr<rnwgpu::Promise> &promise);
21
+ void schedule(Action action);
22
+
23
+ ResolveFunction createResolveFunction();
24
+ RejectFunction createRejectFunction();
25
+
26
+ std::shared_ptr<rnwgpu::Promise> currentPromise();
27
+
28
+ std::mutex mutex;
29
+ std::weak_ptr<AsyncRunner> runner;
30
+ std::shared_ptr<rnwgpu::Promise> promise;
31
+ std::optional<Action> pendingAction;
32
+ bool settled = false;
33
+ std::shared_ptr<State> keepAlive;
34
+ bool keepPumping;
35
+ };
36
+
37
+ // MARK: - State helpers
38
+
39
+ void AsyncTaskHandle::State::settle(Action action) {
40
+ std::optional<Action> actionToSchedule;
41
+
42
+ {
43
+ std::lock_guard<std::mutex> lock(mutex);
44
+ if (settled) {
45
+ return;
46
+ }
47
+ settled = true;
48
+
49
+ if (promise) {
50
+ actionToSchedule = std::move(action);
51
+ } else {
52
+ pendingAction = std::move(action);
53
+ }
54
+ }
55
+
56
+ if (actionToSchedule.has_value()) {
57
+ schedule(std::move(*actionToSchedule));
58
+ }
59
+ }
60
+
61
+ void AsyncTaskHandle::State::attachPromise(
62
+ const std::shared_ptr<rnwgpu::Promise> &newPromise) {
63
+ std::optional<Action> actionToSchedule;
64
+ {
65
+ std::lock_guard<std::mutex> lock(mutex);
66
+ promise = newPromise;
67
+ keepAlive = shared_from_this();
68
+ if (pendingAction.has_value()) {
69
+ actionToSchedule = std::move(pendingAction);
70
+ pendingAction.reset();
71
+ }
72
+ }
73
+
74
+ if (actionToSchedule.has_value()) {
75
+ schedule(std::move(*actionToSchedule));
76
+ }
77
+ }
78
+
79
+ void AsyncTaskHandle::State::schedule(Action action) {
80
+ auto runnerRef = runner.lock();
81
+ if (!runnerRef) {
82
+ return;
83
+ }
84
+
85
+ auto promiseRef = currentPromise();
86
+ if (!promiseRef) {
87
+ runnerRef->onTaskSettled(keepPumping);
88
+ return;
89
+ }
90
+
91
+ auto dispatcherRef = runnerRef->dispatcher();
92
+ if (!dispatcherRef) {
93
+ runnerRef->onTaskSettled(keepPumping);
94
+ return;
95
+ }
96
+
97
+ dispatcherRef->post([self = shared_from_this(), action = std::move(action),
98
+ runnerRef, promiseRef](jsi::Runtime &runtime) mutable {
99
+ runnerRef->onTaskSettled(self->keepPumping);
100
+ action(runtime, *promiseRef);
101
+ std::lock_guard<std::mutex> lock(self->mutex);
102
+ self->keepAlive.reset();
103
+ });
104
+ }
105
+
106
+ AsyncTaskHandle::ResolveFunction
107
+ AsyncTaskHandle::State::createResolveFunction() {
108
+ auto weakSelf = std::weak_ptr<State>(shared_from_this());
109
+ return [weakSelf](ValueFactory factory) {
110
+ if (auto self = weakSelf.lock()) {
111
+ ValueFactory resolvedFactory =
112
+ factory ? std::move(factory) : [](jsi::Runtime &runtime) {
113
+ return jsi::Value::undefined();
114
+ };
115
+ self->settle(
116
+ [factory = std::move(resolvedFactory)](
117
+ jsi::Runtime &runtime, rnwgpu::Promise &promise) mutable {
118
+ auto value = factory(runtime);
119
+ promise.resolve(std::move(value));
120
+ });
121
+ }
122
+ };
123
+ }
124
+
125
+ AsyncTaskHandle::RejectFunction AsyncTaskHandle::State::createRejectFunction() {
126
+ auto weakSelf = std::weak_ptr<State>(shared_from_this());
127
+ return [weakSelf](std::string reason) {
128
+ if (auto self = weakSelf.lock()) {
129
+ self->settle([reason = std::move(reason)](jsi::Runtime & /*runtime*/,
130
+ rnwgpu::Promise &promise) {
131
+ promise.reject(reason);
132
+ });
133
+ }
134
+ };
135
+ }
136
+
137
+ std::shared_ptr<rnwgpu::Promise> AsyncTaskHandle::State::currentPromise() {
138
+ std::lock_guard<std::mutex> lock(mutex);
139
+ return promise;
140
+ }
141
+
142
+ // MARK: - AsyncTaskHandle
143
+
144
+ AsyncTaskHandle::AsyncTaskHandle() = default;
145
+
146
+ AsyncTaskHandle::AsyncTaskHandle(std::shared_ptr<State> state)
147
+ : _state(std::move(state)) {}
148
+
149
+ bool AsyncTaskHandle::valid() const { return _state != nullptr; }
150
+
151
+ AsyncTaskHandle
152
+ AsyncTaskHandle::create(const std::shared_ptr<AsyncRunner> &runner,
153
+ bool keepPumping) {
154
+ auto state = std::make_shared<State>(runner, keepPumping);
155
+ state->keepAlive = state;
156
+ return AsyncTaskHandle(std::move(state));
157
+ }
158
+
159
+ AsyncTaskHandle::ResolveFunction
160
+ AsyncTaskHandle::createResolveFunction() const {
161
+ if (!_state) {
162
+ return [](ValueFactory) {};
163
+ }
164
+ return _state->createResolveFunction();
165
+ }
166
+
167
+ AsyncTaskHandle::RejectFunction AsyncTaskHandle::createRejectFunction() const {
168
+ if (!_state) {
169
+ return [](std::string) {};
170
+ }
171
+ return _state->createRejectFunction();
172
+ }
173
+
174
+ void AsyncTaskHandle::attachPromise(
175
+ const std::shared_ptr<rnwgpu::Promise> &promise) const {
176
+ if (_state) {
177
+ _state->attachPromise(promise);
178
+ }
179
+ }
180
+
181
+ } // namespace rnwgpu::async
@@ -0,0 +1,55 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <memory>
5
+ #include <mutex>
6
+ #include <optional>
7
+ #include <string>
8
+
9
+ #include <jsi/jsi.h>
10
+
11
+ #include "AsyncDispatcher.h"
12
+
13
+ namespace rnwgpu {
14
+ class Promise;
15
+ }
16
+
17
+ namespace rnwgpu::async {
18
+
19
+ class AsyncRunner;
20
+
21
+ /**
22
+ * Represents a pending asynchronous WebGPU operation that can be converted into
23
+ * a JavaScript Promise.
24
+ */
25
+ class AsyncTaskHandle {
26
+ public:
27
+ struct State;
28
+
29
+ using ValueFactory =
30
+ std::function<facebook::jsi::Value(facebook::jsi::Runtime &)>;
31
+ using ResolveFunction = std::function<void(ValueFactory)>;
32
+ using RejectFunction = std::function<void(std::string)>;
33
+
34
+ AsyncTaskHandle();
35
+
36
+ /**
37
+ * Internal constructor used by AsyncRunner.
38
+ */
39
+ explicit AsyncTaskHandle(std::shared_ptr<State> state);
40
+
41
+ bool valid() const;
42
+
43
+ ResolveFunction createResolveFunction() const;
44
+ RejectFunction createRejectFunction() const;
45
+
46
+ void attachPromise(const std::shared_ptr<rnwgpu::Promise> &promise) const;
47
+
48
+ static AsyncTaskHandle create(const std::shared_ptr<AsyncRunner> &runner,
49
+ bool keepPumping);
50
+
51
+ private:
52
+ std::shared_ptr<State> _state;
53
+ };
54
+
55
+ } // namespace rnwgpu::async
@@ -0,0 +1,23 @@
1
+ #include "JSIMicrotaskDispatcher.h"
2
+
3
+ #include <utility>
4
+
5
+ namespace rnwgpu::async {
6
+
7
+ JSIMicrotaskDispatcher::JSIMicrotaskDispatcher(jsi::Runtime &runtime)
8
+ : _runtime(runtime) {}
9
+
10
+ void JSIMicrotaskDispatcher::post(Work work) {
11
+ auto microtask = jsi::Function::createFromHostFunction(
12
+ _runtime, jsi::PropNameID::forAscii(_runtime, "AsyncMicrotask"), 0,
13
+ [work = std::move(work)](
14
+ jsi::Runtime &runtime, const jsi::Value & /*thisValue*/,
15
+ const jsi::Value * /*args*/, size_t /*count*/) -> jsi::Value {
16
+ work(runtime);
17
+ return jsi::Value::undefined();
18
+ });
19
+
20
+ _runtime.queueMicrotask(std::move(microtask));
21
+ }
22
+
23
+ } // namespace rnwgpu::async
@@ -0,0 +1,22 @@
1
+ #pragma once
2
+
3
+ #include "AsyncDispatcher.h"
4
+
5
+ namespace rnwgpu::async {
6
+
7
+ /**
8
+ * Dispatcher implementation backed by `jsi::Runtime::queueMicrotask`.
9
+ */
10
+ class JSIMicrotaskDispatcher final
11
+ : public AsyncDispatcher,
12
+ public std::enable_shared_from_this<JSIMicrotaskDispatcher> {
13
+ public:
14
+ explicit JSIMicrotaskDispatcher(jsi::Runtime &runtime);
15
+
16
+ void post(Work work) override;
17
+
18
+ private:
19
+ jsi::Runtime &_runtime;
20
+ };
21
+
22
+ } // namespace rnwgpu::async
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Platform = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _types = require("../skia/types");
9
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
10
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
10
  // https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/modules/useElementLayout/index.js
12
11
  const DOM_LAYOUT_HANDLER_NAME = "__reactLayoutHandler";
13
12
  let resizeObserver = null;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_types","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DOM_LAYOUT_HANDLER_NAME","resizeObserver","getObserver","window","ResizeObserver","entries","forEach","entry","node","target","left","top","width","height","contentRect","onLayout","setTimeout","timeStamp","Date","now","nativeEvent","layout","x","y","currentTarget","bubbles","cancelable","defaultPrevented","eventPhase","isDefaultPrevented","Error","isPropagationStopped","persist","preventDefault","stopPropagation","isTrusted","type","useElementLayout","ref","observer","useLayoutEffect","current","observe","unobserve","View","children","style","rawStyle","useMemo","useRef","cssStyles","alignItems","backgroundColor","border","boxSizing","display","flexBasis","flexDirection","flexShrink","listStyle","margin","minHeight","minWidth","padding","position","textDecoration","zIndex","createElement","Platform","exports","OS","PixelRatio","devicePixelRatio","resolveAsset","source","isRNModule","getAssetByID","httpServerLocation","name","uri","findNodeHandle"],"sources":["Platform.web.tsx"],"sourcesContent":["import type { RefObject, CSSProperties } from \"react\";\nimport React, { useLayoutEffect, useMemo, useRef } from \"react\";\nimport type { LayoutChangeEvent, ViewComponent, ViewProps } from \"react-native\";\n\nimport type { DataModule } from \"../skia/types\";\nimport { isRNModule } from \"../skia/types\";\n\nimport type { IPlatform } from \"./IPlatform\";\n\n// https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/modules/useElementLayout/index.js\nconst DOM_LAYOUT_HANDLER_NAME = \"__reactLayoutHandler\";\ntype OnLayout = ((event: LayoutChangeEvent) => void) | undefined;\ntype Div = HTMLDivElement & {\n __reactLayoutHandler: OnLayout;\n};\n\nlet resizeObserver: ResizeObserver | null = null;\n\nconst getObserver = () => {\n if (resizeObserver == null) {\n resizeObserver = new window.ResizeObserver(function (entries) {\n entries.forEach((entry) => {\n const node = entry.target as Div;\n const { left, top, width, height } = entry.contentRect;\n const onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n if (typeof onLayout === \"function\") {\n // setTimeout 0 is taken from react-native-web (UIManager)\n setTimeout(\n () =>\n onLayout({\n timeStamp: Date.now(),\n nativeEvent: { layout: { x: left, y: top, width, height } },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n currentTarget: 0,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n target: 0,\n bubbles: false,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 0,\n isDefaultPrevented() {\n throw new Error(\"Method not supported on web.\");\n },\n isPropagationStopped() {\n throw new Error(\"Method not supported on web.\");\n },\n persist() {\n throw new Error(\"Method not supported on web.\");\n },\n preventDefault() {\n throw new Error(\"Method not supported on web.\");\n },\n stopPropagation() {\n throw new Error(\"Method not supported on web.\");\n },\n isTrusted: true,\n type: \"\",\n }),\n 0\n );\n }\n });\n });\n }\n return resizeObserver;\n};\n\nconst useElementLayout = (ref: RefObject<Div>, onLayout: OnLayout) => {\n const observer = getObserver();\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node !== null) {\n node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n }\n }, [ref, onLayout]);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node != null && observer != null) {\n if (typeof node[DOM_LAYOUT_HANDLER_NAME] === \"function\") {\n observer.observe(node);\n } else {\n observer.unobserve(node);\n }\n }\n return () => {\n if (node != null && observer != null) {\n observer.unobserve(node);\n }\n };\n }, [observer, ref]);\n};\n\nconst View = (({ children, onLayout, style: rawStyle }: ViewProps) => {\n const style = useMemo(() => (rawStyle ?? {}) as CSSProperties, [rawStyle]);\n const ref = useRef<Div>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useElementLayout(ref as any, onLayout);\n const cssStyles = useMemo(() => {\n return {\n alignItems: \"stretch\" as const,\n backgroundColor: \"transparent\" as const,\n border: \"0 solid black\" as const,\n boxSizing: \"border-box\" as const,\n display: \"flex\" as const,\n flexBasis: \"auto\" as const,\n flexDirection: \"column\" as const,\n flexShrink: 0,\n listStyle: \"none\" as const,\n margin: 0,\n minHeight: 0,\n minWidth: 0,\n padding: 0,\n position: \"relative\" as const,\n textDecoration: \"none\" as const,\n zIndex: 0,\n ...style,\n };\n }, [style]);\n\n return (\n <div ref={ref} style={cssStyles}>\n {children}\n </div>\n );\n}) as unknown as typeof ViewComponent;\n\nexport const Platform: IPlatform = {\n OS: \"web\",\n PixelRatio: typeof window !== \"undefined\" ? window.devicePixelRatio : 1, // window is not defined on node\n resolveAsset: (source: DataModule) => {\n if (isRNModule(source)) {\n if (typeof source === \"number\" && typeof require === \"function\") {\n const {\n getAssetByID,\n } = require(\"react-native/Libraries/Image/AssetRegistry\");\n const { httpServerLocation, name, type } = getAssetByID(source);\n const uri = `${httpServerLocation}/${name}.${type}`;\n return uri;\n }\n throw new Error(\n \"Asset source is a number - this is not supported on the web\"\n );\n }\n if (\"uri\" in source) {\n return source.uri;\n }\n return source.default;\n },\n findNodeHandle: () => {\n throw new Error(\"findNodeHandle is not supported on the web\");\n },\n View,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_types","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DOM_LAYOUT_HANDLER_NAME","resizeObserver","getObserver","window","ResizeObserver","entries","forEach","entry","node","target","left","top","width","height","contentRect","onLayout","setTimeout","timeStamp","Date","now","nativeEvent","layout","x","y","currentTarget","bubbles","cancelable","defaultPrevented","eventPhase","isDefaultPrevented","Error","isPropagationStopped","persist","preventDefault","stopPropagation","isTrusted","type","useElementLayout","ref","observer","useLayoutEffect","current","observe","unobserve","View","children","style","rawStyle","useMemo","useRef","cssStyles","alignItems","backgroundColor","border","boxSizing","display","flexBasis","flexDirection","flexShrink","listStyle","margin","minHeight","minWidth","padding","position","textDecoration","zIndex","createElement","Platform","exports","OS","PixelRatio","devicePixelRatio","resolveAsset","source","isRNModule","getAssetByID","httpServerLocation","name","uri","findNodeHandle"],"sources":["Platform.web.tsx"],"sourcesContent":["import type { RefObject, CSSProperties } from \"react\";\nimport React, { useLayoutEffect, useMemo, useRef } from \"react\";\nimport type { LayoutChangeEvent, ViewComponent, ViewProps } from \"react-native\";\n\nimport type { DataModule } from \"../skia/types\";\nimport { isRNModule } from \"../skia/types\";\n\nimport type { IPlatform } from \"./IPlatform\";\n\n// https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/modules/useElementLayout/index.js\nconst DOM_LAYOUT_HANDLER_NAME = \"__reactLayoutHandler\";\ntype OnLayout = ((event: LayoutChangeEvent) => void) | undefined;\ntype Div = HTMLDivElement & {\n __reactLayoutHandler: OnLayout;\n};\n\nlet resizeObserver: ResizeObserver | null = null;\n\nconst getObserver = () => {\n if (resizeObserver == null) {\n resizeObserver = new window.ResizeObserver(function (entries) {\n entries.forEach((entry) => {\n const node = entry.target as Div;\n const { left, top, width, height } = entry.contentRect;\n const onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n if (typeof onLayout === \"function\") {\n // setTimeout 0 is taken from react-native-web (UIManager)\n setTimeout(\n () =>\n onLayout({\n timeStamp: Date.now(),\n nativeEvent: { layout: { x: left, y: top, width, height } },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n currentTarget: 0,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n target: 0,\n bubbles: false,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 0,\n isDefaultPrevented() {\n throw new Error(\"Method not supported on web.\");\n },\n isPropagationStopped() {\n throw new Error(\"Method not supported on web.\");\n },\n persist() {\n throw new Error(\"Method not supported on web.\");\n },\n preventDefault() {\n throw new Error(\"Method not supported on web.\");\n },\n stopPropagation() {\n throw new Error(\"Method not supported on web.\");\n },\n isTrusted: true,\n type: \"\",\n }),\n 0\n );\n }\n });\n });\n }\n return resizeObserver;\n};\n\nconst useElementLayout = (ref: RefObject<Div>, onLayout: OnLayout) => {\n const observer = getObserver();\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node !== null) {\n node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n }\n }, [ref, onLayout]);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node != null && observer != null) {\n if (typeof node[DOM_LAYOUT_HANDLER_NAME] === \"function\") {\n observer.observe(node);\n } else {\n observer.unobserve(node);\n }\n }\n return () => {\n if (node != null && observer != null) {\n observer.unobserve(node);\n }\n };\n }, [observer, ref]);\n};\n\nconst View = (({ children, onLayout, style: rawStyle }: ViewProps) => {\n const style = useMemo(() => (rawStyle ?? {}) as CSSProperties, [rawStyle]);\n const ref = useRef<Div>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useElementLayout(ref as any, onLayout);\n const cssStyles = useMemo(() => {\n return {\n alignItems: \"stretch\" as const,\n backgroundColor: \"transparent\" as const,\n border: \"0 solid black\" as const,\n boxSizing: \"border-box\" as const,\n display: \"flex\" as const,\n flexBasis: \"auto\" as const,\n flexDirection: \"column\" as const,\n flexShrink: 0,\n listStyle: \"none\" as const,\n margin: 0,\n minHeight: 0,\n minWidth: 0,\n padding: 0,\n position: \"relative\" as const,\n textDecoration: \"none\" as const,\n zIndex: 0,\n ...style,\n };\n }, [style]);\n\n return (\n <div ref={ref} style={cssStyles}>\n {children}\n </div>\n );\n}) as unknown as typeof ViewComponent;\n\nexport const Platform: IPlatform = {\n OS: \"web\",\n PixelRatio: typeof window !== \"undefined\" ? window.devicePixelRatio : 1, // window is not defined on node\n resolveAsset: (source: DataModule) => {\n if (isRNModule(source)) {\n if (typeof source === \"number\" && typeof require === \"function\") {\n const {\n getAssetByID,\n } = require(\"react-native/Libraries/Image/AssetRegistry\");\n const { httpServerLocation, name, type } = getAssetByID(source);\n const uri = `${httpServerLocation}/${name}.${type}`;\n return uri;\n }\n throw new Error(\n \"Asset source is a number - this is not supported on the web\"\n );\n }\n if (\"uri\" in source) {\n return source.uri;\n }\n return source.default;\n },\n findNodeHandle: () => {\n throw new Error(\"findNodeHandle is not supported on the web\");\n },\n View,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_skia","_interpolators","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","useBufferValue","size","bufferInitializer","useMemo","Rea","makeMutable","Array","fill","map","useBuffer","modifier","_mod$__closure","values","mod","deps","Object","__closure","mapperId","startMapper","value","forEach","val","index","notifyChange","useEffect","stopMapper","useRectBuffer","Skia","XYWHRect","exports","useRSXformBuffer","RSXform","usePointBuffer","Point","useColorBuffer","Color"],"sources":["buffers.ts"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport type { WorkletFunction } from \"react-native-reanimated/lib/typescript/commonTypes\";\n\nimport type { SkColor, SkHostRect, SkPoint, SkRSXform } from \"../../skia/types\";\nimport { Skia } from \"../../skia\";\n\nimport { notifyChange } from \"./interpolators\";\nimport Rea from \"./ReanimatedProxy\";\n\ntype Modifier<T> = (input: T, index: number) => void;\n\nconst useBufferValue = <T>(size: number, bufferInitializer: () => T) => {\n return useMemo(\n () => Rea.makeMutable(new Array(size).fill(0).map(bufferInitializer)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [size]\n );\n};\n\nconst useBuffer = <T>(\n size: number,\n bufferInitializer: () => T,\n modifier: Modifier<T>\n) => {\n const values = useBufferValue(size, bufferInitializer);\n const mod = modifier as WorkletFunction;\n const deps = [size, ...Object.values(mod.__closure ?? {})];\n const mapperId = Rea.startMapper(() => {\n \"worklet\";\n values.value.forEach((val, index) => {\n modifier(val, index);\n });\n notifyChange(values);\n }, deps);\n\n useEffect(() => {\n return () => {\n Rea.stopMapper(mapperId);\n };\n }, [mapperId]);\n\n return values;\n};\n\nexport const useRectBuffer = (size: number, modifier: Modifier<SkHostRect>) =>\n useBuffer(size, () => Skia.XYWHRect(0, 0, 0, 0), modifier);\n\n// Usage for RSXform Buffer\nexport const useRSXformBuffer = (size: number, modifier: Modifier<SkRSXform>) =>\n useBuffer(size, () => Skia.RSXform(1, 0, 0, 0), modifier);\n\n// Usage for Point Buffer\nexport const usePointBuffer = (size: number, modifier: Modifier<SkPoint>) =>\n useBuffer(size, () => Skia.Point(0, 0), modifier);\n\n// Usage for Color Buffer\nexport const useColorBuffer = (size: number, modifier: Modifier<SkColor>) =>\n useBuffer(size, () => Skia.Color(\"black\"), modifier);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAAoC,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIpC,MAAMG,cAAc,GAAGA,CAAIC,IAAY,EAAEC,iBAA0B,KAAK;EACtE,OAAO,IAAAC,cAAO,EACZ,MAAMC,wBAAG,CAACC,WAAW,CAAC,IAAIC,KAAK,CAACL,IAAI,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAACN,iBAAiB,CAAC,CAAC;EACrE;EACA,CAACD,IAAI,CACP,CAAC;AACH,CAAC;AAED,MAAMQ,SAAS,GAAGA,CAChBR,IAAY,EACZC,iBAA0B,EAC1BQ,QAAqB,KAClB;EAAA,IAAAC,cAAA;EACH,MAAMC,MAAM,GAAGZ,cAAc,CAACC,IAAI,EAAEC,iBAAiB,CAAC;EACtD,MAAMW,GAAG,GAAGH,QAA2B;EACvC,MAAMI,IAAI,GAAG,CAACb,IAAI,EAAE,GAAGc,MAAM,CAACH,MAAM,EAAAD,cAAA,GAACE,GAAG,CAACG,SAAS,cAAAL,cAAA,cAAAA,cAAA,GAAI,CAAC,CAAC,CAAC,CAAC;EAC1D,MAAMM,QAAQ,GAAGb,wBAAG,CAACc,WAAW,CAAC,MAAM;IACrC,SAAS;;IACTN,MAAM,CAACO,KAAK,CAACC,OAAO,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;MACnCZ,QAAQ,CAACW,GAAG,EAAEC,KAAK,CAAC;IACtB,CAAC,CAAC;IACF,IAAAC,2BAAY,EAACX,MAAM,CAAC;EACtB,CAAC,EAAEE,IAAI,CAAC;EAER,IAAAU,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACXpB,wBAAG,CAACqB,UAAU,CAACR,QAAQ,CAAC;IAC1B,CAAC;EACH,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,OAAOL,MAAM;AACf,CAAC;AAEM,MAAMc,aAAa,GAAGA,CAACzB,IAAY,EAAES,QAA8B,KACxED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAElB,QAAQ,CAAC;;AAE5D;AAAAmB,OAAA,CAAAH,aAAA,GAAAA,aAAA;AACO,MAAMI,gBAAgB,GAAGA,CAAC7B,IAAY,EAAES,QAA6B,KAC1ED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAErB,QAAQ,CAAC;;AAE3D;AAAAmB,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AACO,MAAME,cAAc,GAAGA,CAAC/B,IAAY,EAAES,QAA2B,KACtED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEvB,QAAQ,CAAC;;AAEnD;AAAAmB,OAAA,CAAAG,cAAA,GAAAA,cAAA;AACO,MAAME,cAAc,GAAGA,CAACjC,IAAY,EAAES,QAA2B,KACtED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACQ,KAAK,CAAC,OAAO,CAAC,EAAEzB,QAAQ,CAAC;AAACmB,OAAA,CAAAK,cAAA,GAAAA,cAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_skia","_interpolators","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","useBufferValue","size","bufferInitializer","useMemo","Rea","makeMutable","Array","fill","map","useBuffer","modifier","_mod$__closure","values","mod","deps","Object","__closure","mapperId","startMapper","value","forEach","val","index","notifyChange","useEffect","stopMapper","useRectBuffer","Skia","XYWHRect","exports","useRSXformBuffer","RSXform","usePointBuffer","Point","useColorBuffer","Color"],"sources":["buffers.ts"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport type { WorkletFunction } from \"react-native-worklets\";\n\nimport type { SkColor, SkHostRect, SkPoint, SkRSXform } from \"../../skia/types\";\nimport { Skia } from \"../../skia\";\n\nimport { notifyChange } from \"./interpolators\";\nimport Rea from \"./ReanimatedProxy\";\n\ntype Modifier<T> = (input: T, index: number) => void;\n\nconst useBufferValue = <T>(size: number, bufferInitializer: () => T) => {\n return useMemo(\n () => Rea.makeMutable(new Array(size).fill(0).map(bufferInitializer)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [size]\n );\n};\n\nconst useBuffer = <T>(\n size: number,\n bufferInitializer: () => T,\n modifier: Modifier<T>\n) => {\n const values = useBufferValue(size, bufferInitializer);\n const mod = modifier as WorkletFunction;\n const deps = [size, ...Object.values(mod.__closure ?? {})];\n const mapperId = Rea.startMapper(() => {\n \"worklet\";\n values.value.forEach((val, index) => {\n modifier(val, index);\n });\n notifyChange(values);\n }, deps);\n\n useEffect(() => {\n return () => {\n Rea.stopMapper(mapperId);\n };\n }, [mapperId]);\n\n return values;\n};\n\nexport const useRectBuffer = (size: number, modifier: Modifier<SkHostRect>) =>\n useBuffer(size, () => Skia.XYWHRect(0, 0, 0, 0), modifier);\n\n// Usage for RSXform Buffer\nexport const useRSXformBuffer = (size: number, modifier: Modifier<SkRSXform>) =>\n useBuffer(size, () => Skia.RSXform(1, 0, 0, 0), modifier);\n\n// Usage for Point Buffer\nexport const usePointBuffer = (size: number, modifier: Modifier<SkPoint>) =>\n useBuffer(size, () => Skia.Point(0, 0), modifier);\n\n// Usage for Color Buffer\nexport const useColorBuffer = (size: number, modifier: Modifier<SkColor>) =>\n useBuffer(size, () => Skia.Color(\"black\"), modifier);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAAoC,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIpC,MAAMG,cAAc,GAAGA,CAAIC,IAAY,EAAEC,iBAA0B,KAAK;EACtE,OAAO,IAAAC,cAAO,EACZ,MAAMC,wBAAG,CAACC,WAAW,CAAC,IAAIC,KAAK,CAACL,IAAI,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAACN,iBAAiB,CAAC,CAAC;EACrE;EACA,CAACD,IAAI,CACP,CAAC;AACH,CAAC;AAED,MAAMQ,SAAS,GAAGA,CAChBR,IAAY,EACZC,iBAA0B,EAC1BQ,QAAqB,KAClB;EAAA,IAAAC,cAAA;EACH,MAAMC,MAAM,GAAGZ,cAAc,CAACC,IAAI,EAAEC,iBAAiB,CAAC;EACtD,MAAMW,GAAG,GAAGH,QAA2B;EACvC,MAAMI,IAAI,GAAG,CAACb,IAAI,EAAE,GAAGc,MAAM,CAACH,MAAM,EAAAD,cAAA,GAACE,GAAG,CAACG,SAAS,cAAAL,cAAA,cAAAA,cAAA,GAAI,CAAC,CAAC,CAAC,CAAC;EAC1D,MAAMM,QAAQ,GAAGb,wBAAG,CAACc,WAAW,CAAC,MAAM;IACrC,SAAS;;IACTN,MAAM,CAACO,KAAK,CAACC,OAAO,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;MACnCZ,QAAQ,CAACW,GAAG,EAAEC,KAAK,CAAC;IACtB,CAAC,CAAC;IACF,IAAAC,2BAAY,EAACX,MAAM,CAAC;EACtB,CAAC,EAAEE,IAAI,CAAC;EAER,IAAAU,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACXpB,wBAAG,CAACqB,UAAU,CAACR,QAAQ,CAAC;IAC1B,CAAC;EACH,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,OAAOL,MAAM;AACf,CAAC;AAEM,MAAMc,aAAa,GAAGA,CAACzB,IAAY,EAAES,QAA8B,KACxED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAElB,QAAQ,CAAC;;AAE5D;AAAAmB,OAAA,CAAAH,aAAA,GAAAA,aAAA;AACO,MAAMI,gBAAgB,GAAGA,CAAC7B,IAAY,EAAES,QAA6B,KAC1ED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAErB,QAAQ,CAAC;;AAE3D;AAAAmB,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AACO,MAAME,cAAc,GAAGA,CAAC/B,IAAY,EAAES,QAA2B,KACtED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEvB,QAAQ,CAAC;;AAEnD;AAAAmB,OAAA,CAAAG,cAAA,GAAAA,cAAA;AACO,MAAME,cAAc,GAAGA,CAACjC,IAAY,EAAES,QAA2B,KACtED,SAAS,CAACR,IAAI,EAAE,MAAM0B,UAAI,CAACQ,KAAK,CAAC,OAAO,CAAC,EAAEzB,QAAQ,CAAC;AAACmB,OAAA,CAAAK,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -4,7 +4,4 @@ export declare const notifyChange: <T>(value: SharedValue<T>) => void;
4
4
  export declare const usePathValue: (cb: (path: SkPath) => void, init?: SkPath) => SharedValue<SkPath>;
5
5
  export declare const useClock: () => SharedValue<number>;
6
6
  export declare const usePathInterpolation: (value: SharedValue<number>, input: number[], outputRange: SkPath[], options?: ExtrapolationType) => SharedValue<SkPath>;
7
- export declare const useVectorInterpolation: (value: SharedValue<number>, input: number[], outputRange: SkPoint[], options?: ExtrapolationType) => SharedValue<{
8
- x: number;
9
- y: number;
10
- }>;
7
+ export declare const useVectorInterpolation: (value: SharedValue<number>, input: number[], outputRange: SkPoint[], options?: ExtrapolationType) => SharedValue<SkPoint>;