@lynx-js/react 0.108.0 → 0.109.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 (98) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.json +4 -4
  3. package/refresh/.turbo/turbo-build.log +1 -1
  4. package/runtime/jsx-dev-runtime/index.d.ts +13 -7
  5. package/runtime/jsx-runtime/index.d.ts +17 -7
  6. package/runtime/lib/gesture/processGesture.d.ts +2 -2
  7. package/runtime/lib/gesture/processGesture.js +14 -7
  8. package/runtime/lib/gesture/processGesture.js.map +1 -1
  9. package/runtime/lib/lifecycle/patch/isMainThreadHydrationFinished.d.ts +2 -0
  10. package/runtime/lib/lifecycle/patch/isMainThreadHydrationFinished.js +9 -0
  11. package/runtime/lib/lifecycle/patch/isMainThreadHydrationFinished.js.map +1 -0
  12. package/runtime/lib/lifecycle/patch/snapshotPatchApply.js +2 -2
  13. package/runtime/lib/lifecycle/patch/snapshotPatchApply.js.map +1 -1
  14. package/runtime/lib/lifecycle/patch/updateMainThread.js +4 -3
  15. package/runtime/lib/lifecycle/patch/updateMainThread.js.map +1 -1
  16. package/runtime/lib/lifecycle/reload.js +2 -0
  17. package/runtime/lib/lifecycle/reload.js.map +1 -1
  18. package/runtime/lib/snapshot/gesture.d.ts +1 -1
  19. package/runtime/lib/snapshot/gesture.js +4 -3
  20. package/runtime/lib/snapshot/gesture.js.map +1 -1
  21. package/runtime/lib/snapshot/ref.js.map +1 -1
  22. package/runtime/lib/snapshot/spread.d.ts +0 -6
  23. package/runtime/lib/snapshot/spread.js +4 -10
  24. package/runtime/lib/snapshot/spread.js.map +1 -1
  25. package/runtime/lib/snapshot/workletEvent.d.ts +2 -1
  26. package/runtime/lib/snapshot/workletEvent.js +4 -3
  27. package/runtime/lib/snapshot/workletEvent.js.map +1 -1
  28. package/runtime/lib/snapshot/workletRef.d.ts +4 -4
  29. package/runtime/lib/snapshot/workletRef.js +6 -4
  30. package/runtime/lib/snapshot/workletRef.js.map +1 -1
  31. package/runtime/lib/snapshot.d.ts +1 -0
  32. package/runtime/lib/snapshot.js +5 -4
  33. package/runtime/lib/snapshot.js.map +1 -1
  34. package/runtime/lib/worklet/runOnBackground.js +21 -12
  35. package/runtime/lib/worklet/runOnBackground.js.map +1 -1
  36. package/runtime/lib/worklet/workletRef.d.ts +1 -0
  37. package/runtime/lib/worklet/workletRef.js +14 -12
  38. package/runtime/lib/worklet/workletRef.js.map +1 -1
  39. package/runtime/src/gesture/processGesture.ts +23 -15
  40. package/runtime/src/lifecycle/patch/isMainThreadHydrationFinished.ts +10 -0
  41. package/runtime/src/lifecycle/patch/snapshotPatchApply.ts +8 -2
  42. package/runtime/src/lifecycle/patch/updateMainThread.ts +4 -3
  43. package/runtime/src/lifecycle/reload.ts +2 -0
  44. package/runtime/src/snapshot/gesture.ts +6 -4
  45. package/runtime/src/snapshot/ref.ts +2 -2
  46. package/runtime/src/snapshot/spread.ts +15 -5
  47. package/runtime/src/snapshot/workletEvent.ts +5 -3
  48. package/runtime/src/snapshot/workletRef.ts +17 -18
  49. package/runtime/src/snapshot.ts +6 -4
  50. package/runtime/src/worklet/runOnBackground.ts +37 -15
  51. package/runtime/src/worklet/workletRef.ts +15 -12
  52. package/testing-library/dist/vitest-global-setup.js +7 -0
  53. package/transform/dist/wasm.cjs +1 -1
  54. package/transform/index.d.ts +443 -14
  55. package/types/react.d.ts +1 -1
  56. package/worklet-runtime/dist/dev.js +133 -33
  57. package/worklet-runtime/dist/dev.js.map +4 -4
  58. package/worklet-runtime/dist/main.js +133 -33
  59. package/worklet-runtime/dist/main.js.map +4 -4
  60. package/worklet-runtime/lib/api/element.d.ts +3 -3
  61. package/worklet-runtime/lib/api/element.js +3 -3
  62. package/worklet-runtime/lib/api/element.js.map +1 -1
  63. package/worklet-runtime/lib/api/lepusQuerySelector.js +1 -3
  64. package/worklet-runtime/lib/api/lepusQuerySelector.js.map +1 -1
  65. package/worklet-runtime/lib/api/lynxApi.js +10 -10
  66. package/worklet-runtime/lib/api/lynxApi.js.map +1 -1
  67. package/worklet-runtime/lib/bindings/bindings.d.ts +1 -1
  68. package/worklet-runtime/lib/bindings/bindings.js +21 -8
  69. package/worklet-runtime/lib/bindings/bindings.js.map +1 -1
  70. package/worklet-runtime/lib/bindings/events.d.ts +4 -1
  71. package/worklet-runtime/lib/bindings/events.js.map +1 -1
  72. package/worklet-runtime/lib/bindings/index.d.ts +1 -1
  73. package/worklet-runtime/lib/bindings/index.js +1 -1
  74. package/worklet-runtime/lib/bindings/index.js.map +1 -1
  75. package/worklet-runtime/lib/bindings/loadRuntime.js +0 -2
  76. package/worklet-runtime/lib/bindings/loadRuntime.js.map +1 -1
  77. package/worklet-runtime/lib/bindings/types.d.ts +15 -5
  78. package/worklet-runtime/lib/bindings/types.js +3 -0
  79. package/worklet-runtime/lib/bindings/types.js.map +1 -1
  80. package/worklet-runtime/lib/delayRunOnBackground.d.ts +12 -0
  81. package/worklet-runtime/lib/delayRunOnBackground.js +23 -0
  82. package/worklet-runtime/lib/delayRunOnBackground.js.map +1 -0
  83. package/worklet-runtime/lib/delayWorkletEvent.js +2 -2
  84. package/worklet-runtime/lib/delayWorkletEvent.js.map +1 -1
  85. package/worklet-runtime/lib/global.d.ts +6 -3
  86. package/worklet-runtime/lib/hydrate.d.ts +11 -0
  87. package/worklet-runtime/lib/hydrate.js +86 -0
  88. package/worklet-runtime/lib/hydrate.js.map +1 -0
  89. package/worklet-runtime/lib/jsFunctionLifecycle.js +2 -2
  90. package/worklet-runtime/lib/jsFunctionLifecycle.js.map +1 -1
  91. package/worklet-runtime/lib/listeners.js.map +1 -1
  92. package/worklet-runtime/lib/utils/profile.d.ts +1 -1
  93. package/worklet-runtime/lib/utils/version.js +1 -1
  94. package/worklet-runtime/lib/workletRef.d.ts +6 -3
  95. package/worklet-runtime/lib/workletRef.js +33 -6
  96. package/worklet-runtime/lib/workletRef.js.map +1 -1
  97. package/worklet-runtime/lib/workletRuntime.js +12 -14
  98. package/worklet-runtime/lib/workletRuntime.js.map +1 -1
@@ -7,7 +7,7 @@
7
7
  // src/api/element.ts
8
8
  var _Element = class _Element {
9
9
  constructor(element) {
10
- // @ts-ignore set in constructor
10
+ // @ts-expect-error set in constructor
11
11
  __publicField(this, "element");
12
12
  Object.defineProperty(this, "element", {
13
13
  get() {
@@ -49,7 +49,7 @@
49
49
  __InvokeUIMethod(
50
50
  this.element,
51
51
  methodName,
52
- params || {},
52
+ params != null ? params : {},
53
53
  (res) => {
54
54
  if (res.code === 0) {
55
55
  resolve(res.data);
@@ -66,7 +66,7 @@
66
66
  return;
67
67
  }
68
68
  _Element.willFlush = true;
69
- Promise.resolve().then(() => {
69
+ void Promise.resolve().then(() => {
70
70
  _Element.willFlush = false;
71
71
  __FlushElementTree();
72
72
  });
@@ -78,9 +78,8 @@
78
78
  // src/api/lepusQuerySelector.ts
79
79
  var _PageElement = class _PageElement {
80
80
  static get() {
81
- if (_PageElement.pageElement === void 0) {
82
- _PageElement.pageElement = __GetPageElement();
83
- }
81
+ var _a;
82
+ (_a = _PageElement.pageElement) != null ? _a : _PageElement.pageElement = __GetPageElement();
84
83
  return _PageElement.pageElement;
85
84
  }
86
85
  };
@@ -100,7 +99,8 @@
100
99
 
101
100
  // src/utils/version.ts
102
101
  function isSdkVersionGt(major, minor) {
103
- const lynxSdkVersion = SystemInfo.lynxSdkVersion || "1.0";
102
+ var _a;
103
+ const lynxSdkVersion = (_a = SystemInfo.lynxSdkVersion) != null ? _a : "1.0";
104
104
  const version = lynxSdkVersion.split(".");
105
105
  return Number(version[0]) > major || Number(version[0]) == major && Number(version[1]) > minor;
106
106
  }
@@ -147,8 +147,16 @@
147
147
  function initWorkletRef() {
148
148
  return impl = {
149
149
  _workletRefMap: {},
150
+ /**
151
+ * Map of worklet refs that are created during first screen rendering.
152
+ * These refs are created with negative IDs and need to be hydrated
153
+ * when the app starts. The map is cleared after hydration is complete
154
+ * to free up memory.
155
+ */
156
+ _firstScreenWorkletRefMap: {},
150
157
  updateWorkletRef,
151
- updateWorkletRefInitValueChanges
158
+ updateWorkletRefInitValueChanges,
159
+ clearFirstScreenWorkletRefMap
152
160
  };
153
161
  }
154
162
  var createWorkletRef = (id, value) => {
@@ -157,8 +165,17 @@
157
165
  _wvid: id
158
166
  };
159
167
  };
160
- var getFromWorkletRefMap = (id) => {
161
- const value = impl._workletRefMap[id];
168
+ var getFromWorkletRefMap = (refImpl) => {
169
+ const id = refImpl._wvid;
170
+ let value;
171
+ if (id < 0) {
172
+ value = impl._firstScreenWorkletRefMap[id];
173
+ if (!value) {
174
+ value = impl._firstScreenWorkletRefMap[id] = createWorkletRef(id, refImpl._initValue);
175
+ }
176
+ } else {
177
+ value = impl._workletRefMap[id];
178
+ }
162
179
  if (false) {
163
180
  throw new Error("Worklet: ref is not initialized: " + id);
164
181
  }
@@ -168,16 +185,20 @@
168
185
  delete impl._workletRefMap[id];
169
186
  }
170
187
  function updateWorkletRef(handle, element) {
171
- getFromWorkletRefMap(handle._wvid).current = element ? new Element(element) : null;
188
+ getFromWorkletRefMap(handle).current = element ? new Element(element) : null;
172
189
  }
173
190
  function updateWorkletRefInitValueChanges(patch) {
174
191
  profile("updateWorkletRefInitValueChanges", () => {
175
192
  patch.forEach(([id, value]) => {
176
- var _a, _b;
177
- (_b = (_a = impl._workletRefMap)[id]) != null ? _b : _a[id] = createWorkletRef(id, value);
193
+ if (!impl._workletRefMap[id]) {
194
+ impl._workletRefMap[id] = createWorkletRef(id, value);
195
+ }
178
196
  });
179
197
  });
180
198
  }
199
+ function clearFirstScreenWorkletRefMap() {
200
+ impl._firstScreenWorkletRefMap = {};
201
+ }
181
202
 
182
203
  // src/listeners.ts
183
204
  function initEventListeners() {
@@ -204,10 +225,34 @@
204
225
  );
205
226
  }
206
227
 
207
- // src/delayWorkletEvent.ts
228
+ // src/delayRunOnBackground.ts
208
229
  var impl2;
209
- function initEventDelay() {
230
+ function initRunOnBackgroundDelay() {
210
231
  return impl2 = {
232
+ delayedBackgroundFunctionArray: [],
233
+ delayRunOnBackground,
234
+ runDelayedBackgroundFunctions
235
+ };
236
+ }
237
+ function delayRunOnBackground(fnObj, task) {
238
+ var _a;
239
+ impl2.delayedBackgroundFunctionArray.push({ task });
240
+ const delayIndices = (_a = fnObj._delayIndices) != null ? _a : fnObj._delayIndices = [];
241
+ delayIndices.push(impl2.delayedBackgroundFunctionArray.length - 1);
242
+ }
243
+ function runDelayedBackgroundFunctions() {
244
+ for (const details of impl2.delayedBackgroundFunctionArray) {
245
+ if (details.jsFnHandle) {
246
+ details.task(details.jsFnHandle._jsFnId, details.jsFnHandle._execId);
247
+ }
248
+ }
249
+ impl2.delayedBackgroundFunctionArray.length = 0;
250
+ }
251
+
252
+ // src/delayWorkletEvent.ts
253
+ var impl3;
254
+ function initEventDelay() {
255
+ return impl3 = {
211
256
  _delayedWorkletParamsMap: /* @__PURE__ */ new Map(),
212
257
  runDelayedWorklet,
213
258
  clearDelayedWorklets
@@ -215,7 +260,7 @@
215
260
  }
216
261
  function delayExecUntilJsReady(hash, params) {
217
262
  profile("delayExecUntilJsReady: " + hash, () => {
218
- const map = impl2._delayedWorkletParamsMap;
263
+ const map = impl3._delayedWorkletParamsMap;
219
264
  const paramVec = map.get(hash);
220
265
  if (paramVec) {
221
266
  paramVec.push(params);
@@ -226,7 +271,7 @@
226
271
  }
227
272
  function runDelayedWorklet(worklet, element) {
228
273
  profile("commitDelayedWorklet", () => {
229
- const paramsVec = impl2._delayedWorkletParamsMap.get(
274
+ const paramsVec = impl3._delayedWorkletParamsMap.get(
230
275
  worklet._wkltId
231
276
  );
232
277
  if (paramsVec === void 0) {
@@ -234,8 +279,9 @@
234
279
  }
235
280
  const leftParamsVec = [];
236
281
  paramsVec.forEach((params) => {
237
- var _a, _b;
238
- if (((_b = (_a = params[0]) == null ? void 0 : _a.currentTarget) == null ? void 0 : _b.elementRefptr) === element) {
282
+ var _a;
283
+ const firstParam = params[0];
284
+ if (((_a = firstParam == null ? void 0 : firstParam.currentTarget) == null ? void 0 : _a.elementRefptr) === element) {
239
285
  setTimeout(() => {
240
286
  profile("runDelayedWorklet", () => {
241
287
  runWorklet(worklet, params);
@@ -245,14 +291,67 @@
245
291
  leftParamsVec.push(params);
246
292
  }
247
293
  });
248
- impl2._delayedWorkletParamsMap.set(
294
+ impl3._delayedWorkletParamsMap.set(
249
295
  worklet._wkltId,
250
296
  leftParamsVec
251
297
  );
252
298
  });
253
299
  }
254
300
  function clearDelayedWorklets() {
255
- impl2._delayedWorkletParamsMap.clear();
301
+ impl3._delayedWorkletParamsMap.clear();
302
+ }
303
+
304
+ // src/hydrate.ts
305
+ function hydrateCtx(ctx, firstScreenCtx) {
306
+ profile("hydrateCtx", () => {
307
+ hydrateCtxImpl(ctx, firstScreenCtx, ctx._execId);
308
+ });
309
+ }
310
+ function hydrateCtxImpl(ctx, firstScreenCtx, execId) {
311
+ if (!ctx || typeof ctx !== "object" || !firstScreenCtx || typeof firstScreenCtx !== "object") return;
312
+ const ctxObj = ctx;
313
+ const firstScreenCtxObj = firstScreenCtx;
314
+ if (ctxObj["_wkltId"] && ctxObj["_wkltId"] !== firstScreenCtxObj["_wkltId"]) {
315
+ return;
316
+ }
317
+ for (const key in ctx) {
318
+ if (key === "_wvid") {
319
+ hydrateMainThreadRef(ctxObj[key], firstScreenCtxObj);
320
+ } else if (key === "_jsFn") {
321
+ hydrateDelayRunOnBackgroundTasks(
322
+ ctxObj[key],
323
+ firstScreenCtxObj[key],
324
+ execId
325
+ );
326
+ } else {
327
+ const firstScreenValue = typeof firstScreenCtxObj[key] === "function" ? firstScreenCtxObj[key].ctx : firstScreenCtxObj[key];
328
+ hydrateCtxImpl(ctxObj[key], firstScreenValue, execId);
329
+ }
330
+ }
331
+ }
332
+ function hydrateMainThreadRef(refId, value) {
333
+ if ("_initValue" in value) {
334
+ return;
335
+ }
336
+ const ref = lynxWorkletImpl._refImpl._workletRefMap[refId];
337
+ if (ref.current instanceof Element) {
338
+ return;
339
+ }
340
+ ref.current = value.current;
341
+ }
342
+ function hydrateDelayRunOnBackgroundTasks(fnObjs, firstScreenFnObjs, execId) {
343
+ for (const fnName in fnObjs) {
344
+ const fnObj = fnObjs[fnName];
345
+ const firstScreenFnObj = firstScreenFnObjs[fnName];
346
+ if (!(firstScreenFnObj == null ? void 0 : firstScreenFnObj._delayIndices)) {
347
+ continue;
348
+ }
349
+ for (const index of firstScreenFnObj._delayIndices) {
350
+ const details = lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[index];
351
+ fnObj._execId = execId;
352
+ details.jsFnHandle = fnObj;
353
+ }
354
+ }
256
355
  }
257
356
 
258
357
  // src/jsFunctionLifecycle.ts
@@ -265,9 +364,10 @@
265
364
  this.registry = new FinalizationRegistry(this.removeRef.bind(this));
266
365
  }
267
366
  addRef(execId, objToRef) {
367
+ var _a;
268
368
  this.execIdRefCount.set(
269
369
  execId,
270
- (this.execIdRefCount.get(execId) || 0) + 1
370
+ ((_a = this.execIdRefCount.get(execId)) != null ? _a : 0) + 1
271
371
  );
272
372
  this.registry.register(objToRef, execId);
273
373
  }
@@ -281,7 +381,7 @@
281
381
  this.execIdSetToFire.add(execId);
282
382
  if (!this.willFire) {
283
383
  this.willFire = true;
284
- Promise.resolve().then(() => {
384
+ void Promise.resolve().then(() => {
285
385
  this.fire();
286
386
  });
287
387
  }
@@ -305,8 +405,10 @@
305
405
  function initWorklet() {
306
406
  globalThis.lynxWorkletImpl = {
307
407
  _workletMap: {},
308
- _eventDelayImpl: initEventDelay(),
309
- _refImpl: initWorkletRef()
408
+ _refImpl: initWorkletRef(),
409
+ _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),
410
+ _hydrateCtx: hydrateCtx,
411
+ _eventDelayImpl: initEventDelay()
310
412
  };
311
413
  if (isRunOnBackgroundEnabled()) {
312
414
  globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();
@@ -338,11 +440,7 @@
338
440
  "transformWorkletParams",
339
441
  () => transformWorklet(params || [], false)
340
442
  );
341
- let result;
342
- profile("runWorklet", () => {
343
- result = worklet(...params_);
344
- });
345
- return result;
443
+ return profile("runWorklet", () => worklet(...params_));
346
444
  }
347
445
  function validateWorklet(ctx) {
348
446
  return typeof ctx === "object" && ctx !== null && ("_wkltId" in ctx || "_lepusWorkletHash" in ctx);
@@ -365,15 +463,16 @@
365
463
  }
366
464
  return worklet.main;
367
465
  }
368
- var transformWorkletInner = (obj, depth, ctx) => {
466
+ var transformWorkletInner = (value, depth, ctx) => {
369
467
  var _a;
370
468
  const limit = 1e3;
371
469
  if (++depth >= limit) {
372
470
  throw new Error("Depth of value exceeds limit of " + limit + ".");
373
471
  }
374
- if (typeof obj !== "object" || obj === null) {
472
+ if (typeof value !== "object" || value === null) {
375
473
  return;
376
474
  }
475
+ const obj = value;
377
476
  for (const key in obj) {
378
477
  const subObj = obj[key];
379
478
  if (typeof subObj !== "object" || subObj === null) {
@@ -390,13 +489,14 @@
390
489
  const isWorkletRef = "_wvid" in subObj;
391
490
  if (isWorkletRef) {
392
491
  obj[key] = getFromWorkletRefMap(
393
- subObj._wvid
492
+ subObj
394
493
  );
395
494
  continue;
396
495
  }
397
496
  const isWorklet = "_wkltId" in subObj;
398
497
  if (isWorklet) {
399
498
  obj[key] = lynxWorkletImpl._workletMap[subObj._wkltId].bind({ ...subObj });
499
+ obj[key].ctx = subObj;
400
500
  continue;
401
501
  }
402
502
  const isJsFn = "_jsFnId" in subObj;
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/api/element.ts", "../src/api/lepusQuerySelector.ts", "../src/utils/version.ts", "../src/api/lynxApi.ts", "../src/utils/profile.ts", "../src/workletRef.ts", "../src/listeners.ts", "../src/delayWorkletEvent.ts", "../src/jsFunctionLifecycle.ts", "../src/workletRuntime.ts", "../src/index.ts"],
3
+ "sources": ["../src/api/element.ts", "../src/api/lepusQuerySelector.ts", "../src/utils/version.ts", "../src/api/lynxApi.ts", "../src/utils/profile.ts", "../src/workletRef.ts", "../src/listeners.ts", "../src/delayRunOnBackground.ts", "../src/delayWorkletEvent.ts", "../src/hydrate.ts", "../src/jsFunctionLifecycle.ts", "../src/workletRuntime.ts", "../src/index.ts"],
4
4
  "sourceRoot": "/home/runner/work/lynx-stack/lynx-stack/packages/react/worklet-runtime/src",
5
- "sourcesContent": ["// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport class Element {\n private static willFlush = false;\n\n // @ts-ignore set in constructor\n private readonly element: ElementNode;\n\n constructor(element: ElementNode) {\n // In Lynx versions prior to and including 2.15,\n // a crash occurs when printing or transferring refCounted across threads.\n // Bypass this problem by hiding the element object.\n Object.defineProperty(this, 'element', {\n get() {\n return element;\n },\n });\n }\n\n public setAttribute(name: string, value: any): void {\n __SetAttribute(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperty(name: string, value: string): void {\n __AddInlineStyle(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperties(styles: Record<string, string>): void {\n for (const key in styles) {\n __AddInlineStyle(this.element, key, styles[key]);\n }\n this.flushElementTree();\n }\n\n public getAttribute(attributeName: string): any {\n return __GetAttributeByName(this.element, attributeName);\n }\n\n public getAttributeNames(): string[] {\n return __GetAttributeNames(this.element);\n }\n\n public querySelector(selector: string): Element | null {\n const ref = __QuerySelector(this.element, selector, {});\n return ref ? new Element(ref) : null;\n }\n\n public querySelectorAll(selector: string): Element[] {\n return __QuerySelectorAll(this.element, selector, {}).map((element) => {\n return new Element(element);\n });\n }\n\n public invoke(\n methodName: string,\n params?: Record<string, any>,\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n __InvokeUIMethod(\n this.element,\n methodName,\n params || {},\n (res: { code: number; data: any }) => {\n if (res.code === 0) {\n resolve(res.data);\n } else {\n reject(new Error('UI method invoke: ' + JSON.stringify(res)));\n }\n },\n );\n this.flushElementTree();\n });\n }\n\n private flushElementTree() {\n if (Element.willFlush) {\n return;\n }\n Element.willFlush = true;\n Promise.resolve().then(() => {\n Element.willFlush = false;\n __FlushElementTree();\n });\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './element.js';\n\nclass PageElement {\n private static pageElement: ElementNode | undefined;\n\n static get() {\n if (PageElement.pageElement === undefined) {\n PageElement.pageElement = __GetPageElement();\n }\n return PageElement.pageElement;\n }\n}\n\nexport function querySelector(cssSelector: string): Element | null {\n const element = __QuerySelector(PageElement.get(), cssSelector, {});\n return element ? new Element(element) : null;\n}\n\nexport function querySelectorAll(cssSelector: string): Element[] {\n return __QuerySelectorAll(PageElement.get(), cssSelector, {}).map(\n (element) => {\n return new Element(element);\n },\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function isSdkVersionGt(major: number, minor: number): boolean {\n const lynxSdkVersion: string = SystemInfo.lynxSdkVersion || '1.0';\n const version = lynxSdkVersion.split('.');\n return (\n Number(version[0]) > major\n || (Number(version[0]) == major && Number(version[1]) > minor)\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { querySelector, querySelectorAll } from './lepusQuerySelector.js';\nimport { isSdkVersionGt } from '../utils/version.js';\n\nfunction initApiEnv(): void {\n // @ts-ignore\n lynx.querySelector = querySelector;\n // @ts-ignore\n lynx.querySelectorAll = querySelectorAll;\n // @ts-ignore\n globalThis.setTimeout = lynx.setTimeout;\n // @ts-ignore\n globalThis.setInterval = lynx.setInterval;\n // @ts-ignore\n globalThis.clearTimeout = lynx.clearTimeout;\n // In lynx 2.14 `clearInterval` is mistakenly spelled as `clearTimeInterval`. This is fixed in lynx 2.15.\n // @ts-ignore\n globalThis.clearInterval = lynx.clearInterval ?? lynx.clearTimeInterval;\n\n {\n // @ts-ignore\n const requestAnimationFrame = lynx.requestAnimationFrame;\n // @ts-ignore\n lynx.requestAnimationFrame = globalThis.requestAnimationFrame = (\n callback: () => {},\n ) => {\n if (!isSdkVersionGt(2, 15)) {\n throw new Error(\n 'requestAnimationFrame in main thread script requires Lynx sdk version 2.16',\n );\n }\n return requestAnimationFrame(callback);\n };\n }\n\n // @ts-ignore\n globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame;\n}\n\nexport { initApiEnv };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function profile<Ret, Fn extends (...args: any[]) => Ret>(\n sliceName: string,\n f: Fn,\n): Ret {\n /* v8 ignore next 9 */\n // TODO: change it to __PROFILE__\n if (__DEV__) {\n console.profile(sliceName);\n try {\n return f();\n } finally {\n console.profileEnd();\n }\n } else {\n return f();\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { WorkletRef, WorkletRefId, WorkletRefImpl } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface RefImpl {\n _workletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n updateWorkletRef(\n handle: WorkletRefImpl<Element>,\n element: ElementNode | null,\n ): void;\n updateWorkletRefInitValueChanges(patch: [number, unknown][]): void;\n}\n\nlet impl: RefImpl | undefined;\n\nfunction initWorkletRef(): RefImpl {\n return (impl = {\n _workletRefMap: {},\n updateWorkletRef,\n updateWorkletRefInitValueChanges,\n });\n}\n\nconst createWorkletRef = <T>(\n id: WorkletRefId,\n value: T,\n): WorkletRef<T> => {\n return {\n current: value,\n _wvid: id,\n };\n};\n\nconst getFromWorkletRefMap = (\n id: WorkletRefId,\n): WorkletRef<unknown> => {\n const value = impl!._workletRefMap[id];\n /* v8 ignore next 3 */\n if (__DEV__ && value === undefined) {\n throw new Error('Worklet: ref is not initialized: ' + id);\n }\n return value!;\n};\n\nfunction removeValueFromWorkletRefMap(id: WorkletRefId): void {\n delete impl!._workletRefMap[id];\n}\n\n/**\n * Create an element instance of the given element node, then set worklet value to it.\n * This is called in `snapshotContextUpdateWorkletRef`.\n * @param handle handle of the worklet value.\n * @param element the element node.\n */\nfunction updateWorkletRef(\n handle: WorkletRefImpl<Element>,\n element: ElementNode | null,\n): void {\n getFromWorkletRefMap(handle._wvid).current = element\n ? new Element(element)\n : null;\n}\n\nfunction updateWorkletRefInitValueChanges(\n patch: [WorkletRefId, unknown][],\n): void {\n profile('updateWorkletRefInitValueChanges', () => {\n patch.forEach(([id, value]) => {\n impl!._workletRefMap[id] ??= createWorkletRef(id, value);\n });\n });\n}\n\nexport {\n type RefImpl,\n initWorkletRef,\n getFromWorkletRefMap,\n removeValueFromWorkletRefMap,\n updateWorkletRefInitValueChanges,\n};\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport type { RunWorkletCtxData, RunWorkletCtxRetData } from './bindings/events.js';\nimport type { ClosureValueType } from './bindings/types.js';\nimport { removeValueFromWorkletRefMap } from './workletRef.js';\n\nfunction initEventListeners(): void {\n const jsContext = lynx.getJSContext();\n jsContext.addEventListener(\n WorkletEvents.runWorkletCtx,\n (event: RuntimeProxy.Event) => {\n const data = JSON.parse(event.data as string) as RunWorkletCtxData;\n const returnValue = runWorklet(data.worklet, data.params as ClosureValueType[]);\n jsContext.dispatchEvent({\n type: WorkletEvents.FunctionCallRet,\n data: JSON.stringify({\n resolveId: data.resolveId,\n returnValue,\n } as RunWorkletCtxRetData),\n });\n },\n );\n jsContext.addEventListener(\n WorkletEvents.releaseWorkletRef,\n (event: RuntimeProxy.Event) => {\n removeValueFromWorkletRefMap(event.data.id);\n },\n );\n}\n\nexport { initEventListeners };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { ClosureValueType, Worklet } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface EventDelayImpl {\n _delayedWorkletParamsMap: Map<string, ClosureValueType[][]>;\n runDelayedWorklet(worklet: Worklet, element: ElementNode): void;\n clearDelayedWorklets(): void;\n}\n\nlet impl: EventDelayImpl | undefined;\n\nfunction initEventDelay(): EventDelayImpl {\n return (impl = {\n _delayedWorkletParamsMap: new Map(),\n runDelayedWorklet,\n clearDelayedWorklets,\n });\n}\n\nfunction delayExecUntilJsReady(\n hash: string,\n params: ClosureValueType[],\n): void {\n profile('delayExecUntilJsReady: ' + hash, () => {\n const map = impl!._delayedWorkletParamsMap;\n const paramVec = map.get(hash);\n if (paramVec) {\n paramVec.push(params);\n } else {\n map.set(hash, [params]);\n }\n });\n}\n\nfunction runDelayedWorklet(worklet: Worklet, element: ElementNode): void {\n profile('commitDelayedWorklet', () => {\n const paramsVec = impl!._delayedWorkletParamsMap.get(\n worklet._wkltId,\n );\n if (paramsVec === undefined) {\n return;\n }\n const leftParamsVec: ClosureValueType[][] = [];\n paramsVec.forEach((params) => {\n // @ts-ignore\n if (params[0]?.currentTarget?.elementRefptr === element) {\n setTimeout(() => {\n profile('runDelayedWorklet', () => {\n runWorklet(worklet, params);\n });\n }, 0);\n } else {\n leftParamsVec.push(params);\n }\n });\n impl!._delayedWorkletParamsMap.set(\n worklet._wkltId,\n leftParamsVec,\n );\n });\n}\n\nfunction clearDelayedWorklets(): void {\n impl!._delayedWorkletParamsMap.clear();\n}\n\nexport { type EventDelayImpl, initEventDelay, delayExecUntilJsReady, runDelayedWorklet, clearDelayedWorklets };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport { profile } from './utils/profile.js';\nimport { isSdkVersionGt } from './utils/version.js';\n\n/**\n * `JsFunctionLifecycleManager` monitors references to JS function handles to be called by `runOnBackground()`.\n * In JS context, functions to be called by `runOnBackground()` is referenced by `JsFnHandle`s and finally by `execId`.\n * When all `JsFnHandle`s in lepus are released, an event will be sent to JS context to de-ref the `execId`,\n * resulting a de-ref to the js function in JS context.\n */\nclass JsFunctionLifecycleManager {\n private execIdRefCount = new Map<number, number>();\n private execIdSetToFire = new Set<number>();\n private willFire = false;\n private registry?: FinalizationRegistry<number> = undefined;\n\n constructor() {\n this.registry = new FinalizationRegistry<number>(this.removeRef.bind(this));\n }\n\n addRef(execId: number, objToRef: object): void {\n this.execIdRefCount.set(\n execId,\n (this.execIdRefCount.get(execId) || 0) + 1,\n );\n this.registry!.register(objToRef, execId);\n }\n\n removeRef(execId: number): void {\n const rc = this.execIdRefCount.get(execId)!;\n if (rc > 1) {\n this.execIdRefCount.set(execId, rc - 1);\n return;\n }\n this.execIdRefCount.delete(execId);\n this.execIdSetToFire.add(execId);\n if (!this.willFire) {\n this.willFire = true;\n Promise.resolve().then(() => {\n this.fire();\n });\n }\n }\n\n fire(): void {\n profile('JsFunctionLifecycleManager.fire', () => {\n lynx.getJSContext().dispatchEvent({\n type: WorkletEvents.releaseBackgroundWorkletCtx,\n data: Array.from(this.execIdSetToFire),\n });\n this.execIdSetToFire.clear();\n this.willFire = false;\n });\n }\n}\n\nfunction isRunOnBackgroundEnabled(): boolean {\n return isSdkVersionGt(2, 15);\n}\n\nexport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, Worklet, WorkletRefImpl } from './bindings/types.js';\nimport { delayExecUntilJsReady, initEventDelay } from './delayWorkletEvent.js';\nimport { isRunOnBackgroundEnabled, JsFunctionLifecycleManager } from './jsFunctionLifecycle.js';\nimport { profile } from './utils/profile.js';\nimport { getFromWorkletRefMap, initWorkletRef } from './workletRef.js';\n\nfunction initWorklet(): void {\n globalThis.lynxWorkletImpl = {\n _workletMap: {},\n _eventDelayImpl: initEventDelay(),\n _refImpl: initWorkletRef(),\n };\n\n if (isRunOnBackgroundEnabled()) {\n globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();\n }\n\n globalThis.registerWorklet = registerWorklet;\n globalThis.registerWorkletInternal = registerWorklet;\n globalThis.runWorklet = runWorklet;\n}\n\n/**\n * Register a worklet function, allowing it to be executed by `runWorklet()`.\n * This is called in lepus.js.\n * @param _type worklet type, 'main-thread' or 'ui'\n * @param id worklet hash\n * @param worklet worklet function\n */\nfunction registerWorklet(_type: string, id: string, worklet: Function): void {\n lynxWorkletImpl._workletMap[id] = worklet;\n}\n\n/**\n * Entrance of all worklet calls.\n * Native event touch handler will call this function.\n * @param ctx worklet object.\n * @param params worklet params.\n */\nfunction runWorklet(ctx: Worklet, params: ClosureValueType[]): unknown {\n if (!validateWorklet(ctx)) {\n console.warn('Worklet: Invalid worklet object: ' + JSON.stringify(ctx));\n return;\n }\n if ('_lepusWorkletHash' in ctx) {\n delayExecUntilJsReady(ctx._lepusWorkletHash, params);\n return;\n }\n return runWorkletImpl(ctx, params);\n}\n\nfunction runWorkletImpl(ctx: Worklet, params: ClosureValueType[]): unknown {\n const worklet: Function = profile(\n 'transformWorkletCtx ' + ctx._wkltId,\n () => transformWorklet(ctx, true),\n );\n const params_: ClosureValueType[] = profile(\n 'transformWorkletParams',\n () => transformWorklet(params || [], false),\n );\n\n let result;\n profile('runWorklet', () => {\n result = worklet(...params_);\n });\n return result;\n}\n\nfunction validateWorklet(ctx: unknown): ctx is Worklet {\n return typeof ctx === 'object' && ctx !== null && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);\n}\n\nconst workletCache = new WeakMap<object, ClosureValueType | Function>();\n\nfunction transformWorklet(ctx: Worklet, isWorklet: true): Function;\nfunction transformWorklet(\n ctx: ClosureValueType[],\n isWorklet: false,\n): ClosureValueType[];\n\nfunction transformWorklet(\n ctx: ClosureValueType,\n isWorklet: boolean,\n): ClosureValueType | Function {\n /* v8 ignore next 3 */\n if (typeof ctx !== 'object' || ctx === null) {\n return ctx;\n }\n\n if (isWorklet) {\n const res = workletCache.get(ctx);\n if (res) {\n return res;\n }\n }\n\n const worklet = { main: ctx };\n transformWorkletInner(worklet, 0, ctx);\n\n if (isWorklet) {\n workletCache.set(ctx, worklet.main);\n }\n return worklet.main;\n}\n\nconst transformWorkletInner = (\n obj: ClosureValueType,\n depth: number,\n ctx: unknown,\n) => {\n const limit = 1000;\n if (++depth >= limit) {\n throw new Error('Depth of value exceeds limit of ' + limit + '.');\n }\n /* v8 ignore next 3 */\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n for (const key in obj) {\n // @ts-ignore\n const subObj: ClosureValueType = obj[key];\n if (typeof subObj !== 'object' || subObj === null) {\n continue;\n }\n\n const isEventTarget = 'elementRefptr' in subObj;\n if (!isEventTarget) {\n transformWorkletInner(subObj, depth, ctx);\n }\n\n if (isEventTarget) {\n // @ts-ignore\n obj[key] = new Element(subObj['elementRefptr'] as ElementNode);\n continue;\n }\n const isWorkletRef = '_wvid' in (subObj as object);\n if (isWorkletRef) {\n // @ts-ignore\n obj[key] = getFromWorkletRefMap(\n (subObj as any as WorkletRefImpl<unknown>)._wvid,\n );\n continue;\n }\n const isWorklet = '_wkltId' in subObj;\n if (isWorklet) {\n // `subObj` is worklet ctx. Shallow copy it to prevent the transformed worklet from referencing ctx.\n // This would result in the value of `workletCache` referencing its key.\n // @ts-ignore\n obj[key] = lynxWorkletImpl._workletMap[(subObj as Worklet)._wkltId]!\n .bind({ ...subObj });\n continue;\n }\n const isJsFn = '_jsFnId' in subObj;\n if (isJsFn) {\n subObj['_execId'] = (ctx as Worklet)._execId;\n lynxWorkletImpl._jsFunctionLifecycleManager?.addRef(\n (ctx as Worklet)._execId!,\n subObj,\n );\n continue;\n }\n }\n};\n\nexport { initWorklet };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { initApiEnv } from './api/lynxApi.js';\nimport { initEventListeners } from './listeners.js';\nimport { initWorklet } from './workletRuntime.js';\n\nif (globalThis.lynxWorkletImpl === undefined) {\n initWorklet();\n initApiEnv();\n initEventListeners();\n}\n"],
6
- "mappings": ";;;;;;;AAGO,MAAM,WAAN,MAAM,SAAQ;AAAA,IAMnB,YAAY,SAAsB;AAFlC;AAAA,0BAAiB;AAMf,aAAO,eAAe,MAAM,WAAW;AAAA,QACrC,MAAM;AACJ,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEO,aAAa,MAAc,OAAkB;AAClD,qBAAe,KAAK,SAAS,MAAM,KAAK;AACxC,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEO,iBAAiB,MAAc,OAAqB;AACzD,uBAAiB,KAAK,SAAS,MAAM,KAAK;AAC1C,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEO,mBAAmB,QAAsC;AAC9D,iBAAW,OAAO,QAAQ;AACxB,yBAAiB,KAAK,SAAS,KAAK,OAAO,GAAG,CAAC;AAAA,MACjD;AACA,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEO,aAAa,eAA4B;AAC9C,aAAO,qBAAqB,KAAK,SAAS,aAAa;AAAA,IACzD;AAAA,IAEO,oBAA8B;AACnC,aAAO,oBAAoB,KAAK,OAAO;AAAA,IACzC;AAAA,IAEO,cAAc,UAAkC;AACrD,YAAM,MAAM,gBAAgB,KAAK,SAAS,UAAU,CAAC,CAAC;AACtD,aAAO,MAAM,IAAI,SAAQ,GAAG,IAAI;AAAA,IAClC;AAAA,IAEO,iBAAiB,UAA6B;AACnD,aAAO,mBAAmB,KAAK,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY;AACrE,eAAO,IAAI,SAAQ,OAAO;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,IAEO,OACL,YACA,QACc;AACd,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC;AAAA,UACE,KAAK;AAAA,UACL;AAAA,UACA,UAAU,CAAC;AAAA,UACX,CAAC,QAAqC;AACpC,gBAAI,IAAI,SAAS,GAAG;AAClB,sBAAQ,IAAI,IAAI;AAAA,YAClB,OAAO;AACL,qBAAO,IAAI,MAAM,uBAAuB,KAAK,UAAU,GAAG,CAAC,CAAC;AAAA,YAC9D;AAAA,UACF;AAAA,QACF;AACA,aAAK,iBAAiB;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,IAEQ,mBAAmB;AACzB,UAAI,SAAQ,WAAW;AACrB;AAAA,MACF;AACA,eAAQ,YAAY;AACpB,cAAQ,QAAQ,EAAE,KAAK,MAAM;AAC3B,iBAAQ,YAAY;AACpB,2BAAmB;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAnFE,gBADW,UACI,aAAY;AADtB,MAAM,UAAN;;;ACEP,MAAM,eAAN,MAAM,aAAY;AAAA,IAGhB,OAAO,MAAM;AACX,UAAI,aAAY,gBAAgB,QAAW;AACzC,qBAAY,cAAc,iBAAiB;AAAA,MAC7C;AACA,aAAO,aAAY;AAAA,IACrB;AAAA,EACF;AARE,gBADI,cACW;AADjB,MAAM,cAAN;AAWO,WAAS,cAAc,aAAqC;AACjE,UAAM,UAAU,gBAAgB,YAAY,IAAI,GAAG,aAAa,CAAC,CAAC;AAClE,WAAO,UAAU,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC1C;AAEO,WAAS,iBAAiB,aAAgC;AAC/D,WAAO,mBAAmB,YAAY,IAAI,GAAG,aAAa,CAAC,CAAC,EAAE;AAAA,MAC5D,CAAC,YAAY;AACX,eAAO,IAAI,QAAQ,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;;;ACxBO,WAAS,eAAe,OAAe,OAAwB;AACpE,UAAM,iBAAyB,WAAW,kBAAkB;AAC5D,UAAM,UAAU,eAAe,MAAM,GAAG;AACxC,WACE,OAAO,QAAQ,CAAC,CAAC,IAAI,SACjB,OAAO,QAAQ,CAAC,CAAC,KAAK,SAAS,OAAO,QAAQ,CAAC,CAAC,IAAI;AAAA,EAE5D;;;ACJA,WAAS,aAAmB;AAN5B;AAQE,SAAK,gBAAgB;AAErB,SAAK,mBAAmB;AAExB,eAAW,aAAa,KAAK;AAE7B,eAAW,cAAc,KAAK;AAE9B,eAAW,eAAe,KAAK;AAG/B,eAAW,iBAAgB,UAAK,kBAAL,YAAsB,KAAK;AAEtD;AAEE,YAAM,wBAAwB,KAAK;AAEnC,WAAK,wBAAwB,WAAW,wBAAwB,CAC9D,aACG;AACH,YAAI,CAAC,eAAe,GAAG,EAAE,GAAG;AAC1B,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO,sBAAsB,QAAQ;AAAA,MACvC;AAAA,IACF;AAGA,eAAW,uBAAuB,KAAK;AAAA,EACzC;;;ACpCO,WAAS,QACd,WACA,GACK;AAGL,QAAI,OAAS;AACX,cAAQ,QAAQ,SAAS;AACzB,UAAI;AACF,eAAO,EAAE;AAAA,MACX,UAAE;AACA,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF,OAAO;AACL,aAAO,EAAE;AAAA,IACX;AAAA,EACF;;;ACHA,MAAI;AAEJ,WAAS,iBAA0B;AACjC,WAAQ,OAAO;AAAA,MACb,gBAAgB,CAAC;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAM,mBAAmB,CACvB,IACA,UACkB;AAClB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAM,uBAAuB,CAC3B,OACwB;AACxB,UAAM,QAAQ,KAAM,eAAe,EAAE;AAErC,QAAI,OAAgC;AAClC,YAAM,IAAI,MAAM,sCAAsC,EAAE;AAAA,IAC1D;AACA,WAAO;AAAA,EACT;AAEA,WAAS,6BAA6B,IAAwB;AAC5D,WAAO,KAAM,eAAe,EAAE;AAAA,EAChC;AAQA,WAAS,iBACP,QACA,SACM;AACN,yBAAqB,OAAO,KAAK,EAAE,UAAU,UACzC,IAAI,QAAQ,OAAO,IACnB;AAAA,EACN;AAEA,WAAS,iCACP,OACM;AACN,YAAQ,oCAAoC,MAAM;AAChD,YAAM,QAAQ,CAAC,CAAC,IAAI,KAAK,MAAM;AAtEnC;AAuEM,yBAAM,gBAAN,6BAA6B,iBAAiB,IAAI,KAAK;AAAA,MACzD,CAAC;AAAA,IACH,CAAC;AAAA,EACH;;;AClEA,WAAS,qBAA2B;AAClC,UAAM,YAAY,KAAK,aAAa;AACpC,cAAU;AAAA;AAAA,MAER,CAAC,UAA8B;AAC7B,cAAM,OAAO,KAAK,MAAM,MAAM,IAAc;AAC5C,cAAM,cAAc,WAAW,KAAK,SAAS,KAAK,MAA4B;AAC9E,kBAAU,cAAc;AAAA,UACtB;AAAA,UACA,MAAM,KAAK,UAAU;AAAA,YACnB,WAAW,KAAK;AAAA,YAChB;AAAA,UACF,CAAyB;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AACA,cAAU;AAAA;AAAA,MAER,CAAC,UAA8B;AAC7B,qCAA6B,MAAM,KAAK,EAAE;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;;;AClBA,MAAIA;AAEJ,WAAS,iBAAiC;AACxC,WAAQA,QAAO;AAAA,MACb,0BAA0B,oBAAI,IAAI;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,WAAS,sBACP,MACA,QACM;AACN,YAAQ,4BAA4B,MAAM,MAAM;AAC9C,YAAM,MAAMA,MAAM;AAClB,YAAM,WAAW,IAAI,IAAI,IAAI;AAC7B,UAAI,UAAU;AACZ,iBAAS,KAAK,MAAM;AAAA,MACtB,OAAO;AACL,YAAI,IAAI,MAAM,CAAC,MAAM,CAAC;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,kBAAkB,SAAkB,SAA4B;AACvE,YAAQ,wBAAwB,MAAM;AACpC,YAAM,YAAYA,MAAM,yBAAyB;AAAA,QAC/C,QAAQ;AAAA,MACV;AACA,UAAI,cAAc,QAAW;AAC3B;AAAA,MACF;AACA,YAAM,gBAAsC,CAAC;AAC7C,gBAAU,QAAQ,CAAC,WAAW;AA9ClC;AAgDM,cAAI,kBAAO,CAAC,MAAR,mBAAW,kBAAX,mBAA0B,mBAAkB,SAAS;AACvD,qBAAW,MAAM;AACf,oBAAQ,qBAAqB,MAAM;AACjC,yBAAW,SAAS,MAAM;AAAA,YAC5B,CAAC;AAAA,UACH,GAAG,CAAC;AAAA,QACN,OAAO;AACL,wBAAc,KAAK,MAAM;AAAA,QAC3B;AAAA,MACF,CAAC;AACD,MAAAA,MAAM,yBAAyB;AAAA,QAC7B,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,uBAA6B;AACpC,IAAAA,MAAM,yBAAyB,MAAM;AAAA,EACvC;;;ACtDA,MAAM,6BAAN,MAAiC;AAAA,IAM/B,cAAc;AALd,0BAAQ,kBAAiB,oBAAI,IAAoB;AACjD,0BAAQ,mBAAkB,oBAAI,IAAY;AAC1C,0BAAQ,YAAW;AACnB,0BAAQ;AAGN,WAAK,WAAW,IAAI,qBAA6B,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,IAC5E;AAAA,IAEA,OAAO,QAAgB,UAAwB;AAC7C,WAAK,eAAe;AAAA,QAClB;AAAA,SACC,KAAK,eAAe,IAAI,MAAM,KAAK,KAAK;AAAA,MAC3C;AACA,WAAK,SAAU,SAAS,UAAU,MAAM;AAAA,IAC1C;AAAA,IAEA,UAAU,QAAsB;AAC9B,YAAM,KAAK,KAAK,eAAe,IAAI,MAAM;AACzC,UAAI,KAAK,GAAG;AACV,aAAK,eAAe,IAAI,QAAQ,KAAK,CAAC;AACtC;AAAA,MACF;AACA,WAAK,eAAe,OAAO,MAAM;AACjC,WAAK,gBAAgB,IAAI,MAAM;AAC/B,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,WAAW;AAChB,gBAAQ,QAAQ,EAAE,KAAK,MAAM;AAC3B,eAAK,KAAK;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAa;AACX,cAAQ,mCAAmC,MAAM;AAC/C,aAAK,aAAa,EAAE,cAAc;AAAA,UAChC;AAAA,UACA,MAAM,MAAM,KAAK,KAAK,eAAe;AAAA,QACvC,CAAC;AACD,aAAK,gBAAgB,MAAM;AAC3B,aAAK,WAAW;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,2BAAoC;AAC3C,WAAO,eAAe,GAAG,EAAE;AAAA,EAC7B;;;ACnDA,WAAS,cAAoB;AAC3B,eAAW,kBAAkB;AAAA,MAC3B,aAAa,CAAC;AAAA,MACd,iBAAiB,eAAe;AAAA,MAChC,UAAU,eAAe;AAAA,IAC3B;AAEA,QAAI,yBAAyB,GAAG;AAC9B,iBAAW,gBAAgB,8BAA8B,IAAI,2BAA2B;AAAA,IAC1F;AAEA,eAAW,kBAAkB;AAC7B,eAAW,0BAA0B;AACrC,eAAW,aAAaC;AAAA,EAC1B;AASA,WAAS,gBAAgB,OAAe,IAAY,SAAyB;AAC3E,oBAAgB,YAAY,EAAE,IAAI;AAAA,EACpC;AAQA,WAASA,YAAW,KAAc,QAAqC;AACrE,QAAI,CAAC,gBAAgB,GAAG,GAAG;AACzB,cAAQ,KAAK,sCAAsC,KAAK,UAAU,GAAG,CAAC;AACtE;AAAA,IACF;AACA,QAAI,uBAAuB,KAAK;AAC9B,4BAAsB,IAAI,mBAAmB,MAAM;AACnD;AAAA,IACF;AACA,WAAO,eAAe,KAAK,MAAM;AAAA,EACnC;AAEA,WAAS,eAAe,KAAc,QAAqC;AACzE,UAAM,UAAoB;AAAA,MACxB,yBAAyB,IAAI;AAAA,MAC7B,MAAM,iBAAiB,KAAK,IAAI;AAAA,IAClC;AACA,UAAM,UAA8B;AAAA,MAClC;AAAA,MACA,MAAM,iBAAiB,UAAU,CAAC,GAAG,KAAK;AAAA,IAC5C;AAEA,QAAI;AACJ,YAAQ,cAAc,MAAM;AAC1B,eAAS,QAAQ,GAAG,OAAO;AAAA,IAC7B,CAAC;AACD,WAAO;AAAA,EACT;AAEA,WAAS,gBAAgB,KAA8B;AACrD,WAAO,OAAO,QAAQ,YAAY,QAAQ,SAAS,aAAa,OAAO,uBAAuB;AAAA,EAChG;AAEA,MAAM,eAAe,oBAAI,QAA6C;AAQtE,WAAS,iBACP,KACA,WAC6B;AAE7B,QAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,aAAO;AAAA,IACT;AAEA,QAAI,WAAW;AACb,YAAM,MAAM,aAAa,IAAI,GAAG;AAChC,UAAI,KAAK;AACP,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,UAAU,EAAE,MAAM,IAAI;AAC5B,0BAAsB,SAAS,GAAG,GAAG;AAErC,QAAI,WAAW;AACb,mBAAa,IAAI,KAAK,QAAQ,IAAI;AAAA,IACpC;AACA,WAAO,QAAQ;AAAA,EACjB;AAEA,MAAM,wBAAwB,CAC5B,KACA,OACA,QACG;AAjHL;AAkHE,UAAM,QAAQ;AACd,QAAI,EAAE,SAAS,OAAO;AACpB,YAAM,IAAI,MAAM,qCAAqC,QAAQ,GAAG;AAAA,IAClE;AAEA,QAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C;AAAA,IACF;AACA,eAAW,OAAO,KAAK;AAErB,YAAM,SAA2B,IAAI,GAAG;AACxC,UAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD;AAAA,MACF;AAEA,YAAM,gBAAgB,mBAAmB;AACzC,UAAI,CAAC,eAAe;AAClB,8BAAsB,QAAQ,OAAO,GAAG;AAAA,MAC1C;AAEA,UAAI,eAAe;AAEjB,YAAI,GAAG,IAAI,IAAI,QAAQ,OAAO,eAAe,CAAgB;AAC7D;AAAA,MACF;AACA,YAAM,eAAe,WAAY;AACjC,UAAI,cAAc;AAEhB,YAAI,GAAG,IAAI;AAAA,UACR,OAA0C;AAAA,QAC7C;AACA;AAAA,MACF;AACA,YAAM,YAAY,aAAa;AAC/B,UAAI,WAAW;AAIb,YAAI,GAAG,IAAI,gBAAgB,YAAa,OAAmB,OAAO,EAC/D,KAAK,EAAE,GAAG,OAAO,CAAC;AACrB;AAAA,MACF;AACA,YAAM,SAAS,aAAa;AAC5B,UAAI,QAAQ;AACV,eAAO,SAAS,IAAK,IAAgB;AACrC,8BAAgB,gCAAhB,mBAA6C;AAAA,UAC1C,IAAgB;AAAA,UACjB;AAAA;AAEF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC/JA,MAAI,WAAW,oBAAoB,QAAW;AAC5C,gBAAY;AACZ,eAAW;AACX,uBAAmB;AAAA,EACrB;",
7
- "names": ["impl", "runWorklet"]
5
+ "sourcesContent": ["// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport class Element {\n private static willFlush = false;\n\n // @ts-expect-error set in constructor\n private readonly element: ElementNode;\n\n constructor(element: ElementNode) {\n // In Lynx versions prior to and including 2.15,\n // a crash occurs when printing or transferring refCounted across threads.\n // Bypass this problem by hiding the element object.\n Object.defineProperty(this, 'element', {\n get() {\n return element;\n },\n });\n }\n\n public setAttribute(name: string, value: unknown): void {\n __SetAttribute(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperty(name: string, value: string): void {\n __AddInlineStyle(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperties(styles: Record<string, string>): void {\n for (const key in styles) {\n __AddInlineStyle(this.element, key, styles[key]!);\n }\n this.flushElementTree();\n }\n\n public getAttribute(attributeName: string): unknown {\n return __GetAttributeByName(this.element, attributeName);\n }\n\n public getAttributeNames(): string[] {\n return __GetAttributeNames(this.element);\n }\n\n public querySelector(selector: string): Element | null {\n const ref = __QuerySelector(this.element, selector, {});\n return ref ? new Element(ref) : null;\n }\n\n public querySelectorAll(selector: string): Element[] {\n return __QuerySelectorAll(this.element, selector, {}).map((element) => {\n return new Element(element);\n });\n }\n\n public invoke(\n methodName: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n __InvokeUIMethod(\n this.element,\n methodName,\n params ?? {},\n (res: { code: number; data: unknown }) => {\n if (res.code === 0) {\n resolve(res.data);\n } else {\n reject(new Error('UI method invoke: ' + JSON.stringify(res)));\n }\n },\n );\n this.flushElementTree();\n });\n }\n\n private flushElementTree() {\n if (Element.willFlush) {\n return;\n }\n Element.willFlush = true;\n void Promise.resolve().then(() => {\n Element.willFlush = false;\n __FlushElementTree();\n });\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './element.js';\n\nclass PageElement {\n private static pageElement: ElementNode | undefined;\n\n static get() {\n PageElement.pageElement ??= __GetPageElement();\n return PageElement.pageElement;\n }\n}\n\nexport function querySelector(cssSelector: string): Element | null {\n const element = __QuerySelector(PageElement.get(), cssSelector, {});\n return element ? new Element(element) : null;\n}\n\nexport function querySelectorAll(cssSelector: string): Element[] {\n return __QuerySelectorAll(PageElement.get(), cssSelector, {}).map(\n (element) => {\n return new Element(element);\n },\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function isSdkVersionGt(major: number, minor: number): boolean {\n const lynxSdkVersion: string = SystemInfo.lynxSdkVersion ?? '1.0';\n const version = lynxSdkVersion.split('.');\n return (\n Number(version[0]) > major\n || (Number(version[0]) == major && Number(version[1]) > minor)\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { querySelector, querySelectorAll } from './lepusQuerySelector.js';\nimport { isSdkVersionGt } from '../utils/version.js';\n\nfunction initApiEnv(): void {\n // @ts-expect-error type\n lynx.querySelector = querySelector;\n // @ts-expect-error type\n lynx.querySelectorAll = querySelectorAll;\n // @ts-expect-error type\n globalThis.setTimeout = lynx.setTimeout as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.setInterval = lynx.setInterval as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.clearTimeout = lynx.clearTimeout as (timeout: number) => void;\n // In lynx 2.14 `clearInterval` is mistakenly spelled as `clearTimeInterval`. This is fixed in lynx 2.15.\n // @ts-expect-error type\n globalThis.clearInterval = (lynx.clearInterval ?? lynx.clearTimeInterval) as (timeout: number) => void;\n\n {\n // @ts-expect-error type\n const requestAnimationFrame = lynx.requestAnimationFrame as (callback: () => void) => number;\n // @ts-expect-error type\n lynx.requestAnimationFrame = globalThis.requestAnimationFrame = (\n callback: () => void,\n ) => {\n if (!isSdkVersionGt(2, 15)) {\n throw new Error(\n 'requestAnimationFrame in main thread script requires Lynx sdk version 2.16',\n );\n }\n return requestAnimationFrame(callback);\n };\n }\n\n // @ts-expect-error type\n globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame as (requestId: number) => void;\n}\n\nexport { initApiEnv };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function profile<Ret, Fn extends (...args: unknown[]) => Ret>(\n sliceName: string,\n f: Fn,\n): Ret {\n /* v8 ignore next 9 */\n // TODO: change it to __PROFILE__\n if (__DEV__) {\n console.profile(sliceName);\n try {\n return f();\n } finally {\n console.profileEnd();\n }\n } else {\n return f();\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { WorkletRef, WorkletRefId, WorkletRefImpl } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface RefImpl {\n _workletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n _firstScreenWorkletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n updateWorkletRef(\n refImpl: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n ): void;\n updateWorkletRefInitValueChanges(patch: [number, unknown][]): void;\n clearFirstScreenWorkletRefMap(): void;\n}\n\nlet impl: RefImpl | undefined;\n\nfunction initWorkletRef(): RefImpl {\n return (impl = {\n _workletRefMap: {},\n /**\n * Map of worklet refs that are created during first screen rendering.\n * These refs are created with negative IDs and need to be hydrated\n * when the app starts. The map is cleared after hydration is complete\n * to free up memory.\n */\n _firstScreenWorkletRefMap: {},\n updateWorkletRef,\n updateWorkletRefInitValueChanges,\n clearFirstScreenWorkletRefMap,\n });\n}\n\nconst createWorkletRef = <T>(\n id: WorkletRefId,\n value: T,\n): WorkletRef<T> => {\n return {\n current: value,\n _wvid: id,\n };\n};\n\nconst getFromWorkletRefMap = <T>(\n refImpl: WorkletRefImpl<T>,\n): WorkletRef<T> => {\n const id = refImpl._wvid;\n let value;\n if (id < 0) {\n // At the first screen rendering, the worklet ref is created with a negative ID.\n // Might be called in two scenarios:\n // 1. In MTS events\n // 2. In `main-thread:ref`\n value = impl!._firstScreenWorkletRefMap[id] as WorkletRef<T>;\n if (!value) {\n value = impl!._firstScreenWorkletRefMap[id] = createWorkletRef(id, refImpl._initValue);\n }\n } else {\n value = impl!._workletRefMap[id] as WorkletRef<T>;\n }\n\n /* v8 ignore next 3 */\n if (__DEV__ && value === undefined) {\n throw new Error('Worklet: ref is not initialized: ' + id);\n }\n return value;\n};\n\nfunction removeValueFromWorkletRefMap(id: WorkletRefId): void {\n delete impl!._workletRefMap[id];\n}\n\n/**\n * Create an element instance of the given element node, then set the worklet value to it.\n * This is called in `snapshotContextUpdateWorkletRef`.\n * @param handle handle of the worklet value.\n * @param element the element node.\n */\nfunction updateWorkletRef(\n handle: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n): void {\n getFromWorkletRefMap(handle).current = element\n ? new Element(element)\n : null;\n}\n\nfunction updateWorkletRefInitValueChanges(\n patch: [WorkletRefId, unknown][],\n): void {\n profile('updateWorkletRefInitValueChanges', () => {\n patch.forEach(([id, value]) => {\n if (!impl!._workletRefMap[id]) {\n impl!._workletRefMap[id] = createWorkletRef(id, value);\n }\n });\n });\n}\n\nfunction clearFirstScreenWorkletRefMap(): void {\n impl!._firstScreenWorkletRefMap = {};\n}\n\nexport {\n type RefImpl,\n createWorkletRef,\n initWorkletRef,\n getFromWorkletRefMap,\n removeValueFromWorkletRefMap,\n updateWorkletRefInitValueChanges,\n};\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport type { ReleaseWorkletRefData, RunWorkletCtxData, RunWorkletCtxRetData } from './bindings/events.js';\nimport type { ClosureValueType } from './bindings/types.js';\nimport type { Event } from './types/runtimeProxy.js';\nimport { removeValueFromWorkletRefMap } from './workletRef.js';\n\nfunction initEventListeners(): void {\n const jsContext = lynx.getJSContext();\n jsContext.addEventListener(\n WorkletEvents.runWorkletCtx,\n (event: Event) => {\n const data = JSON.parse(event.data as string) as RunWorkletCtxData;\n const returnValue = runWorklet(data.worklet, data.params as ClosureValueType[]);\n jsContext.dispatchEvent({\n type: WorkletEvents.FunctionCallRet,\n data: JSON.stringify({\n resolveId: data.resolveId,\n returnValue,\n } as RunWorkletCtxRetData),\n });\n },\n );\n jsContext.addEventListener(\n WorkletEvents.releaseWorkletRef,\n (event: Event) => {\n removeValueFromWorkletRefMap((event.data as ReleaseWorkletRefData).id);\n },\n );\n}\n\nexport { initEventListeners };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { JsFnHandle } from './bindings/types.js';\n\ninterface Details {\n task: (fnId: number, execId: number) => void;\n\n // This comes from the background thread, inserted here during ctx hydration.\n jsFnHandle?: JsFnHandle;\n}\n\ninterface RunOnBackgroundDelayImpl {\n // Elements should keep the order being called by the user.\n delayedBackgroundFunctionArray: Details[];\n delayRunOnBackground(fnObj: JsFnHandle, fn: (fnId: number, execId: number) => void): void;\n runDelayedBackgroundFunctions(): void;\n}\n\nlet impl: RunOnBackgroundDelayImpl | undefined;\n\nfunction initRunOnBackgroundDelay(): RunOnBackgroundDelayImpl {\n return (impl = {\n delayedBackgroundFunctionArray: [],\n delayRunOnBackground,\n runDelayedBackgroundFunctions,\n });\n}\n\nfunction delayRunOnBackground(fnObj: JsFnHandle, task: (fnId: number, execId: number) => void) {\n impl!.delayedBackgroundFunctionArray.push({ task });\n const delayIndices = fnObj._delayIndices ??= [];\n delayIndices.push(impl!.delayedBackgroundFunctionArray.length - 1);\n}\n\nfunction runDelayedBackgroundFunctions(): void {\n for (const details of impl!.delayedBackgroundFunctionArray) {\n if (details.jsFnHandle) {\n details.task(details.jsFnHandle._jsFnId!, details.jsFnHandle._execId!);\n }\n }\n impl!.delayedBackgroundFunctionArray.length = 0;\n}\n\nexport { type RunOnBackgroundDelayImpl, initRunOnBackgroundDelay };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { ClosureValueType, Worklet } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface EventDelayImpl {\n _delayedWorkletParamsMap: Map<string, ClosureValueType[][]>;\n runDelayedWorklet(worklet: Worklet, element: ElementNode): void;\n clearDelayedWorklets(): void;\n}\n\nlet impl: EventDelayImpl | undefined;\n\nfunction initEventDelay(): EventDelayImpl {\n return (impl = {\n _delayedWorkletParamsMap: new Map(),\n runDelayedWorklet,\n clearDelayedWorklets,\n });\n}\n\nfunction delayExecUntilJsReady(\n hash: string,\n params: ClosureValueType[],\n): void {\n profile('delayExecUntilJsReady: ' + hash, () => {\n const map = impl!._delayedWorkletParamsMap;\n const paramVec = map.get(hash);\n if (paramVec) {\n paramVec.push(params);\n } else {\n map.set(hash, [params]);\n }\n });\n}\n\nfunction runDelayedWorklet(worklet: Worklet, element: ElementNode): void {\n profile('commitDelayedWorklet', () => {\n const paramsVec = impl!._delayedWorkletParamsMap.get(\n worklet._wkltId,\n );\n if (paramsVec === undefined) {\n return;\n }\n const leftParamsVec: ClosureValueType[][] = [];\n paramsVec.forEach((params) => {\n const firstParam = params[0] as { currentTarget?: { elementRefptr?: ElementNode } } | undefined;\n if (firstParam?.currentTarget?.elementRefptr === element) {\n setTimeout(() => {\n profile('runDelayedWorklet', () => {\n runWorklet(worklet, params);\n });\n }, 0);\n } else {\n leftParamsVec.push(params);\n }\n });\n impl!._delayedWorkletParamsMap.set(\n worklet._wkltId,\n leftParamsVec,\n );\n });\n}\n\nfunction clearDelayedWorklets(): void {\n impl!._delayedWorkletParamsMap.clear();\n}\n\nexport { type EventDelayImpl, initEventDelay, delayExecUntilJsReady, runDelayedWorklet, clearDelayedWorklets };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\n\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, JsFnHandle, Worklet, WorkletRefId, WorkletRefImpl } from './bindings/index.js';\nimport { profile } from './utils/profile.js';\n\n/**\n * Hydrates a Worklet context with data from a first-screen Worklet context.\n * This process is typically used to run all delayed `runOnBackground` functions\n * and initialize `WorkletRef` values modified before hydration.\n *\n * @param ctx The target Worklet context to be hydrated.\n * @param firstScreenCtx The Worklet context from the first screen rendering,\n * containing the data to hydrate with.\n */\nexport function hydrateCtx(ctx: Worklet, firstScreenCtx: Worklet): void {\n profile('hydrateCtx', () => {\n hydrateCtxImpl(ctx, firstScreenCtx, ctx._execId!);\n });\n}\n\nfunction hydrateCtxImpl(ctx: ClosureValueType, firstScreenCtx: ClosureValueType, execId: number): void {\n if (!ctx || typeof ctx !== 'object' || !firstScreenCtx || typeof firstScreenCtx !== 'object') return;\n\n const ctxObj = ctx as Record<string, ClosureValueType>;\n const firstScreenCtxObj = firstScreenCtx as Record<string, ClosureValueType>;\n\n if (ctxObj['_wkltId'] && ctxObj['_wkltId'] !== firstScreenCtxObj['_wkltId']) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const key in ctx) {\n if (key === '_wvid') {\n hydrateMainThreadRef(ctxObj[key] as WorkletRefId, firstScreenCtxObj as unknown as WorkletRefImpl<unknown>);\n } else if (key === '_jsFn') {\n hydrateDelayRunOnBackgroundTasks(\n ctxObj[key] as Record<string, JsFnHandle>,\n firstScreenCtxObj[key] as Record<string, JsFnHandle>,\n execId,\n );\n } else {\n const firstScreenValue = typeof firstScreenCtxObj[key] === 'function'\n ? (firstScreenCtxObj[key] as { ctx: ClosureValueType }).ctx\n : firstScreenCtxObj[key];\n hydrateCtxImpl(ctxObj[key], firstScreenValue, execId);\n }\n }\n}\n\n/**\n * Hydrates a WorkletRef on the main thread.\n * This is used to update the WorkletRef's background initial value based on changes\n * that occurred in the first-screen Worklet context before hydration.\n *\n * @param refId The ID of the WorkletRef to hydrate.\n * @param value The new value for the WorkletRef.\n */\nfunction hydrateMainThreadRef(refId: WorkletRefId, value: WorkletRefImpl<unknown> | { current: unknown }) {\n if ('_initValue' in value) {\n // The ref has not been accessed yet.\n return;\n }\n const ref = lynxWorkletImpl!._refImpl._workletRefMap[refId]!;\n if (ref.current instanceof Element) {\n // Modified by `main-thread:ref`\n return;\n }\n ref.current = value.current;\n}\n\n/**\n * Hydrates delayed `runOnBackground` tasks.\n * This function ensures that any `runOnBackground` calls that were delayed\n * during the first-screen rendering are correctly associated with their\n * respective JavaScript function handles in the hydrated Worklet context.\n */\nfunction hydrateDelayRunOnBackgroundTasks(\n fnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_jsFnId\":1}}\n firstScreenFnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_isFirstScreen\":true,\"_delayIndices\":[0]}}\n execId: number,\n) {\n for (const fnName in fnObjs) {\n const fnObj = fnObjs[fnName]!;\n const firstScreenFnObj: JsFnHandle | undefined = firstScreenFnObjs[fnName];\n if (!firstScreenFnObj?._delayIndices) {\n continue;\n }\n for (const index of firstScreenFnObj._delayIndices) {\n const details = lynxWorkletImpl!._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[index]!;\n fnObj._execId = execId;\n details.jsFnHandle = fnObj;\n }\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport { profile } from './utils/profile.js';\nimport { isSdkVersionGt } from './utils/version.js';\n\n/**\n * `JsFunctionLifecycleManager` monitors references to JS function handles to be called by `runOnBackground()`.\n * In JS context, functions to be called by `runOnBackground()` is referenced by `JsFnHandle`s and finally by `execId`.\n * When all `JsFnHandle`s in lepus are released, an event will be sent to JS context to de-ref the `execId`,\n * resulting a de-ref to the js function in JS context.\n */\nclass JsFunctionLifecycleManager {\n private execIdRefCount = new Map<number, number>();\n private execIdSetToFire = new Set<number>();\n private willFire = false;\n private registry?: FinalizationRegistry<number> = undefined;\n\n constructor() {\n this.registry = new FinalizationRegistry<number>(this.removeRef.bind(this));\n }\n\n addRef(execId: number, objToRef: object): void {\n this.execIdRefCount.set(\n execId,\n (this.execIdRefCount.get(execId) ?? 0) + 1,\n );\n this.registry!.register(objToRef, execId);\n }\n\n removeRef(execId: number): void {\n const rc = this.execIdRefCount.get(execId)!;\n if (rc > 1) {\n this.execIdRefCount.set(execId, rc - 1);\n return;\n }\n this.execIdRefCount.delete(execId);\n this.execIdSetToFire.add(execId);\n if (!this.willFire) {\n this.willFire = true;\n void Promise.resolve().then(() => {\n this.fire();\n });\n }\n }\n\n fire(): void {\n profile('JsFunctionLifecycleManager.fire', () => {\n lynx.getJSContext().dispatchEvent({\n type: WorkletEvents.releaseBackgroundWorkletCtx,\n data: Array.from(this.execIdSetToFire),\n });\n this.execIdSetToFire.clear();\n this.willFire = false;\n });\n }\n}\n\nfunction isRunOnBackgroundEnabled(): boolean {\n return isSdkVersionGt(2, 15);\n}\n\nexport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, Worklet, WorkletRefImpl } from './bindings/types.js';\nimport { initRunOnBackgroundDelay } from './delayRunOnBackground.js';\nimport { delayExecUntilJsReady, initEventDelay } from './delayWorkletEvent.js';\nimport { hydrateCtx } from './hydrate.js';\nimport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled } from './jsFunctionLifecycle.js';\nimport { profile } from './utils/profile.js';\nimport { getFromWorkletRefMap, initWorkletRef } from './workletRef.js';\n\nfunction initWorklet(): void {\n globalThis.lynxWorkletImpl = {\n _workletMap: {},\n _refImpl: initWorkletRef(),\n _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),\n _hydrateCtx: hydrateCtx,\n _eventDelayImpl: initEventDelay(),\n };\n\n if (isRunOnBackgroundEnabled()) {\n globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();\n }\n\n globalThis.registerWorklet = registerWorklet;\n globalThis.registerWorkletInternal = registerWorklet;\n globalThis.runWorklet = runWorklet;\n}\n\n/**\n * Register a worklet function, allowing it to be executed by `runWorklet()`.\n * This is called in lepus.js.\n * @param _type worklet type, 'main-thread' or 'ui'\n * @param id worklet hash\n * @param worklet worklet function\n */\nfunction registerWorklet(_type: string, id: string, worklet: (...args: unknown[]) => unknown): void {\n lynxWorkletImpl._workletMap[id] = worklet;\n}\n\n/**\n * Entrance of all worklet calls.\n * Native event touch handler will call this function.\n * @param ctx worklet object.\n * @param params worklet params.\n */\nfunction runWorklet(ctx: Worklet, params: ClosureValueType[]): unknown {\n if (!validateWorklet(ctx)) {\n console.warn('Worklet: Invalid worklet object: ' + JSON.stringify(ctx));\n return;\n }\n if ('_lepusWorkletHash' in ctx) {\n delayExecUntilJsReady(ctx._lepusWorkletHash, params);\n return;\n }\n return runWorkletImpl(ctx, params);\n}\n\nfunction runWorkletImpl(ctx: Worklet, params: ClosureValueType[]): unknown {\n const worklet: (...args: unknown[]) => unknown = profile(\n 'transformWorkletCtx ' + ctx._wkltId,\n () => transformWorklet(ctx, true),\n );\n const params_: ClosureValueType[] = profile(\n 'transformWorkletParams',\n () => transformWorklet(params || [], false),\n );\n return profile('runWorklet', () => worklet(...params_));\n}\n\nfunction validateWorklet(ctx: unknown): ctx is Worklet {\n return typeof ctx === 'object' && ctx !== null && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);\n}\n\nconst workletCache = new WeakMap<object, ClosureValueType | ((...args: unknown[]) => unknown)>();\n\nfunction transformWorklet(ctx: Worklet, isWorklet: true): (...args: unknown[]) => unknown;\nfunction transformWorklet(\n ctx: ClosureValueType[],\n isWorklet: false,\n): ClosureValueType[];\n\nfunction transformWorklet(\n ctx: ClosureValueType,\n isWorklet: boolean,\n): ClosureValueType | ((...args: unknown[]) => unknown) {\n /* v8 ignore next 3 */\n if (typeof ctx !== 'object' || ctx === null) {\n return ctx;\n }\n\n if (isWorklet) {\n const res = workletCache.get(ctx);\n if (res) {\n return res;\n }\n }\n\n const worklet = { main: ctx };\n transformWorkletInner(worklet, 0, ctx);\n\n if (isWorklet) {\n workletCache.set(ctx, worklet.main);\n }\n return worklet.main;\n}\n\nconst transformWorkletInner = (\n value: ClosureValueType,\n depth: number,\n ctx: unknown,\n) => {\n const limit = 1000;\n if (++depth >= limit) {\n throw new Error('Depth of value exceeds limit of ' + limit + '.');\n }\n /* v8 ignore next 3 */\n if (typeof value !== 'object' || value === null) {\n return;\n }\n const obj = value as Record<string, ClosureValueType>;\n\n for (const key in obj) {\n const subObj: ClosureValueType = obj[key];\n if (typeof subObj !== 'object' || subObj === null) {\n continue;\n }\n\n const isEventTarget = 'elementRefptr' in subObj;\n if (!isEventTarget) {\n transformWorkletInner(subObj, depth, ctx);\n }\n\n if (isEventTarget) {\n obj[key] = new Element(subObj['elementRefptr'] as ElementNode);\n continue;\n }\n const isWorkletRef = '_wvid' in (subObj as object);\n if (isWorkletRef) {\n obj[key] = getFromWorkletRefMap(\n subObj as unknown as WorkletRefImpl<unknown>,\n );\n continue;\n }\n const isWorklet = '_wkltId' in subObj;\n if (isWorklet) {\n // `subObj` is worklet ctx. Shallow copy it to prevent the transformed worklet from referencing ctx.\n // This would result in the value of `workletCache` referencing its key.\n obj[key] = lynxWorkletImpl._workletMap[(subObj as Worklet)._wkltId]!\n .bind({ ...subObj });\n obj[key].ctx = subObj;\n continue;\n }\n const isJsFn = '_jsFnId' in subObj;\n if (isJsFn) {\n subObj['_execId'] = (ctx as Worklet)._execId;\n lynxWorkletImpl._jsFunctionLifecycleManager?.addRef(\n (ctx as Worklet)._execId!,\n subObj,\n );\n continue;\n }\n }\n};\n\nexport { initWorklet };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { initApiEnv } from './api/lynxApi.js';\nimport { initEventListeners } from './listeners.js';\nimport { initWorklet } from './workletRuntime.js';\n\nif (globalThis.lynxWorkletImpl === undefined) {\n initWorklet();\n initApiEnv();\n initEventListeners();\n}\n"],
6
+ "mappings": "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",
7
+ "names": ["impl", "impl", "runWorklet"]
8
8
  }
@@ -2,13 +2,13 @@ export declare class Element {
2
2
  private static willFlush;
3
3
  private readonly element;
4
4
  constructor(element: ElementNode);
5
- setAttribute(name: string, value: any): void;
5
+ setAttribute(name: string, value: unknown): void;
6
6
  setStyleProperty(name: string, value: string): void;
7
7
  setStyleProperties(styles: Record<string, string>): void;
8
- getAttribute(attributeName: string): any;
8
+ getAttribute(attributeName: string): unknown;
9
9
  getAttributeNames(): string[];
10
10
  querySelector(selector: string): Element | null;
11
11
  querySelectorAll(selector: string): Element[];
12
- invoke(methodName: string, params?: Record<string, any>): Promise<any>;
12
+ invoke(methodName: string, params?: Record<string, unknown>): Promise<unknown>;
13
13
  private flushElementTree;
14
14
  }
@@ -3,7 +3,7 @@
3
3
  // LICENSE file in the root directory of this source tree.
4
4
  export class Element {
5
5
  static willFlush = false;
6
- // @ts-ignore set in constructor
6
+ // @ts-expect-error set in constructor
7
7
  element;
8
8
  constructor(element) {
9
9
  // In Lynx versions prior to and including 2.15,
@@ -46,7 +46,7 @@ export class Element {
46
46
  }
47
47
  invoke(methodName, params) {
48
48
  return new Promise((resolve, reject) => {
49
- __InvokeUIMethod(this.element, methodName, params || {}, (res) => {
49
+ __InvokeUIMethod(this.element, methodName, params ?? {}, (res) => {
50
50
  if (res.code === 0) {
51
51
  resolve(res.data);
52
52
  }
@@ -62,7 +62,7 @@ export class Element {
62
62
  return;
63
63
  }
64
64
  Element.willFlush = true;
65
- Promise.resolve().then(() => {
65
+ void Promise.resolve().then(() => {
66
66
  Element.willFlush = false;
67
67
  __FlushElementTree();
68
68
  });
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,7 @@ import { Element } from './element.js';
5
5
  class PageElement {
6
6
  static pageElement;
7
7
  static get() {
8
- if (PageElement.pageElement === undefined) {
9
- PageElement.pageElement = __GetPageElement();
10
- }
8
+ PageElement.pageElement ??= __GetPageElement();
11
9
  return PageElement.pageElement;
12
10
  }
13
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lepusQuerySelector.js","sourceRoot":"","sources":["../../src/api/lepusQuerySelector.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW;IACP,MAAM,CAAC,WAAW,CAA0B;IAEpD,MAAM,CAAC,GAAG;QACR,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC1C,WAAW,CAAC,WAAW,GAAG,gBAAgB,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAC/D,CAAC,OAAO,EAAE,EAAE;QACV,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lepusQuerySelector.js","sourceRoot":"","sources":["../../src/api/lepusQuerySelector.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW;IACP,MAAM,CAAC,WAAW,CAA0B;IAEpD,MAAM,CAAC,GAAG;QACR,WAAW,CAAC,WAAW,KAAK,gBAAgB,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAC/D,CAAC,OAAO,EAAE,EAAE;QACV,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -4,23 +4,23 @@
4
4
  import { querySelector, querySelectorAll } from './lepusQuerySelector.js';
5
5
  import { isSdkVersionGt } from '../utils/version.js';
6
6
  function initApiEnv() {
7
- // @ts-ignore
7
+ // @ts-expect-error type
8
8
  lynx.querySelector = querySelector;
9
- // @ts-ignore
9
+ // @ts-expect-error type
10
10
  lynx.querySelectorAll = querySelectorAll;
11
- // @ts-ignore
11
+ // @ts-expect-error type
12
12
  globalThis.setTimeout = lynx.setTimeout;
13
- // @ts-ignore
13
+ // @ts-expect-error type
14
14
  globalThis.setInterval = lynx.setInterval;
15
- // @ts-ignore
15
+ // @ts-expect-error type
16
16
  globalThis.clearTimeout = lynx.clearTimeout;
17
17
  // In lynx 2.14 `clearInterval` is mistakenly spelled as `clearTimeInterval`. This is fixed in lynx 2.15.
18
- // @ts-ignore
19
- globalThis.clearInterval = lynx.clearInterval ?? lynx.clearTimeInterval;
18
+ // @ts-expect-error type
19
+ globalThis.clearInterval = (lynx.clearInterval ?? lynx.clearTimeInterval);
20
20
  {
21
- // @ts-ignore
21
+ // @ts-expect-error type
22
22
  const requestAnimationFrame = lynx.requestAnimationFrame;
23
- // @ts-ignore
23
+ // @ts-expect-error type
24
24
  lynx.requestAnimationFrame = globalThis.requestAnimationFrame = (callback) => {
25
25
  if (!isSdkVersionGt(2, 15)) {
26
26
  throw new Error('requestAnimationFrame in main thread script requires Lynx sdk version 2.16');
@@ -28,7 +28,7 @@ function initApiEnv() {
28
28
  return requestAnimationFrame(callback);
29
29
  };
30
30
  }
31
- // @ts-ignore
31
+ // @ts-expect-error type
32
32
  globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame;
33
33
  }
34
34
  export { initApiEnv };
@@ -1 +1 @@
1
- {"version":3,"file":"lynxApi.js","sourceRoot":"","sources":["../../src/api/lynxApi.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,SAAS,UAAU;IACjB,aAAa;IACb,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACnC,aAAa;IACb,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACzC,aAAa;IACb,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACxC,aAAa;IACb,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC1C,aAAa;IACb,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IAC5C,yGAAyG;IACzG,aAAa;IACb,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC;IAExE,CAAC;QACC,aAAa;QACb,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACzD,aAAa;QACb,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,GAAG,CAC9D,QAAkB,EAClB,EAAE;YACF,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;YACJ,CAAC;YACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC;IAED,aAAa;IACb,UAAU,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC9D,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"lynxApi.js","sourceRoot":"","sources":["../../src/api/lynxApi.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,SAAS,UAAU;IACjB,wBAAwB;IACxB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACnC,wBAAwB;IACxB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACzC,wBAAwB;IACxB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAyD,CAAC;IACvF,wBAAwB;IACxB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAA0D,CAAC;IACzF,wBAAwB;IACxB,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAyC,CAAC;IACzE,yGAAyG;IACzG,wBAAwB;IACxB,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAA8B,CAAC;IAEvG,CAAC;QACC,wBAAwB;QACxB,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAyD,CAAC;QAC7F,wBAAwB;QACxB,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,GAAG,CAC9D,QAAoB,EACpB,EAAE;YACF,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;YACJ,CAAC;YACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,UAAU,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAmD,CAAC;AAC7F,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -11,4 +11,4 @@ declare function runWorkletCtx(worklet: Worklet, params: ClosureValueType[]): un
11
11
  * @param patch - An array containing the index and new value of the worklet value.
12
12
  */
13
13
  declare function updateWorkletRefInitValueChanges(patch?: [number, unknown][]): void;
14
- export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, clearDelayedWorklets, registerWorklet, };
14
+ export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, onHydrationFinished, registerWorklet, delayRunOnBackground, };