@lynx-js/react 0.108.1 → 0.109.1

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 (95) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.json +3 -3
  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/snapshotPatchApply.js +2 -2
  10. package/runtime/lib/lifecycle/patch/snapshotPatchApply.js.map +1 -1
  11. package/runtime/lib/list.js +2 -2
  12. package/runtime/lib/list.js.map +1 -1
  13. package/runtime/lib/lynx/calledByNative.js +1 -1
  14. package/runtime/lib/lynx/calledByNative.js.map +1 -1
  15. package/runtime/lib/snapshot/gesture.d.ts +1 -1
  16. package/runtime/lib/snapshot/gesture.js +4 -3
  17. package/runtime/lib/snapshot/gesture.js.map +1 -1
  18. package/runtime/lib/snapshot/workletEvent.d.ts +1 -1
  19. package/runtime/lib/snapshot/workletEvent.js +3 -2
  20. package/runtime/lib/snapshot/workletEvent.js.map +1 -1
  21. package/runtime/lib/snapshot/workletRef.js +4 -4
  22. package/runtime/lib/snapshot/workletRef.js.map +1 -1
  23. package/runtime/lib/snapshot.d.ts +1 -0
  24. package/runtime/lib/snapshot.js +5 -4
  25. package/runtime/lib/snapshot.js.map +1 -1
  26. package/runtime/lib/worklet/execMap.js +4 -3
  27. package/runtime/lib/worklet/execMap.js.map +1 -1
  28. package/runtime/lib/worklet/functionality.js +2 -8
  29. package/runtime/lib/worklet/functionality.js.map +1 -1
  30. package/runtime/lib/worklet/hmr.js.map +1 -1
  31. package/runtime/lib/worklet/indexMap.js +3 -0
  32. package/runtime/lib/worklet/indexMap.js.map +1 -1
  33. package/runtime/lib/worklet/runOnBackground.js +21 -12
  34. package/runtime/lib/worklet/runOnBackground.js.map +1 -1
  35. package/runtime/src/gesture/processGesture.ts +23 -15
  36. package/runtime/src/lifecycle/patch/snapshotPatchApply.ts +8 -2
  37. package/runtime/src/list.ts +2 -2
  38. package/runtime/src/lynx/calledByNative.ts +1 -1
  39. package/runtime/src/snapshot/gesture.ts +6 -4
  40. package/runtime/src/snapshot/workletEvent.ts +3 -2
  41. package/runtime/src/snapshot/workletRef.ts +5 -5
  42. package/runtime/src/snapshot.ts +6 -4
  43. package/runtime/src/worklet/execMap.ts +4 -3
  44. package/runtime/src/worklet/functionality.ts +2 -8
  45. package/runtime/src/worklet/hmr.ts +5 -1
  46. package/runtime/src/worklet/indexMap.ts +4 -1
  47. package/runtime/src/worklet/runOnBackground.ts +37 -15
  48. package/testing-library/dist/vitest-global-setup.js +7 -0
  49. package/transform/dist/wasm.cjs +1 -2
  50. package/transform/index.d.ts +443 -14
  51. package/types/react.d.ts +1 -1
  52. package/worklet-runtime/dist/dev.js +137 -49
  53. package/worklet-runtime/dist/dev.js.map +4 -4
  54. package/worklet-runtime/dist/main.js +137 -49
  55. package/worklet-runtime/dist/main.js.map +4 -4
  56. package/worklet-runtime/lib/api/element.d.ts +3 -3
  57. package/worklet-runtime/lib/api/element.js +3 -3
  58. package/worklet-runtime/lib/api/element.js.map +1 -1
  59. package/worklet-runtime/lib/api/lepusQuerySelector.js +1 -3
  60. package/worklet-runtime/lib/api/lepusQuerySelector.js.map +1 -1
  61. package/worklet-runtime/lib/api/lynxApi.js +10 -10
  62. package/worklet-runtime/lib/api/lynxApi.js.map +1 -1
  63. package/worklet-runtime/lib/bindings/bindings.d.ts +1 -1
  64. package/worklet-runtime/lib/bindings/bindings.js +20 -7
  65. package/worklet-runtime/lib/bindings/bindings.js.map +1 -1
  66. package/worklet-runtime/lib/bindings/events.d.ts +4 -1
  67. package/worklet-runtime/lib/bindings/events.js.map +1 -1
  68. package/worklet-runtime/lib/bindings/index.d.ts +1 -1
  69. package/worklet-runtime/lib/bindings/index.js +1 -1
  70. package/worklet-runtime/lib/bindings/index.js.map +1 -1
  71. package/worklet-runtime/lib/bindings/loadRuntime.js +0 -2
  72. package/worklet-runtime/lib/bindings/loadRuntime.js.map +1 -1
  73. package/worklet-runtime/lib/bindings/types.d.ts +8 -2
  74. package/worklet-runtime/lib/delayRunOnBackground.d.ts +12 -0
  75. package/worklet-runtime/lib/delayRunOnBackground.js +23 -0
  76. package/worklet-runtime/lib/delayRunOnBackground.js.map +1 -0
  77. package/worklet-runtime/lib/delayWorkletEvent.js +2 -2
  78. package/worklet-runtime/lib/delayWorkletEvent.js.map +1 -1
  79. package/worklet-runtime/lib/global.d.ts +6 -3
  80. package/worklet-runtime/lib/hydrate.d.ts +11 -0
  81. package/worklet-runtime/lib/hydrate.js +86 -0
  82. package/worklet-runtime/lib/hydrate.js.map +1 -0
  83. package/worklet-runtime/lib/jsFunctionLifecycle.js +2 -2
  84. package/worklet-runtime/lib/jsFunctionLifecycle.js.map +1 -1
  85. package/worklet-runtime/lib/listeners.js.map +1 -1
  86. package/worklet-runtime/lib/utils/profile.d.ts +1 -1
  87. package/worklet-runtime/lib/utils/version.js +1 -1
  88. package/worklet-runtime/lib/workletRef.d.ts +6 -3
  89. package/worklet-runtime/lib/workletRef.js +33 -6
  90. package/worklet-runtime/lib/workletRef.js.map +1 -1
  91. package/worklet-runtime/lib/workletRuntime.js +13 -18
  92. package/worklet-runtime/lib/workletRuntime.js.map +1 -1
  93. package/worklet-runtime/lib/ctxTrace.d.ts +0 -8
  94. package/worklet-runtime/lib/ctxTrace.js +0 -13
  95. package/worklet-runtime/lib/ctxTrace.js.map +0 -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,21 +225,34 @@
204
225
  );
205
226
  }
206
227
 
207
- // src/ctxTrace.ts
208
- var currentCtx;
209
- function traceCtxCall(ctx, _params) {
210
- currentCtx = {
211
- ctx
228
+ // src/delayRunOnBackground.ts
229
+ var impl2;
230
+ function initRunOnBackgroundDelay() {
231
+ return impl2 = {
232
+ delayedBackgroundFunctionArray: [],
233
+ delayRunOnBackground,
234
+ runDelayedBackgroundFunctions
212
235
  };
213
236
  }
214
- function clearCurrentCtx() {
215
- currentCtx = void 0;
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;
216
250
  }
217
251
 
218
252
  // src/delayWorkletEvent.ts
219
- var impl2;
253
+ var impl3;
220
254
  function initEventDelay() {
221
- return impl2 = {
255
+ return impl3 = {
222
256
  _delayedWorkletParamsMap: /* @__PURE__ */ new Map(),
223
257
  runDelayedWorklet,
224
258
  clearDelayedWorklets
@@ -226,7 +260,7 @@
226
260
  }
227
261
  function delayExecUntilJsReady(hash, params) {
228
262
  profile("delayExecUntilJsReady: " + hash, () => {
229
- const map = impl2._delayedWorkletParamsMap;
263
+ const map = impl3._delayedWorkletParamsMap;
230
264
  const paramVec = map.get(hash);
231
265
  if (paramVec) {
232
266
  paramVec.push(params);
@@ -237,7 +271,7 @@
237
271
  }
238
272
  function runDelayedWorklet(worklet, element) {
239
273
  profile("commitDelayedWorklet", () => {
240
- const paramsVec = impl2._delayedWorkletParamsMap.get(
274
+ const paramsVec = impl3._delayedWorkletParamsMap.get(
241
275
  worklet._wkltId
242
276
  );
243
277
  if (paramsVec === void 0) {
@@ -245,8 +279,9 @@
245
279
  }
246
280
  const leftParamsVec = [];
247
281
  paramsVec.forEach((params) => {
248
- var _a, _b;
249
- 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) {
250
285
  setTimeout(() => {
251
286
  profile("runDelayedWorklet", () => {
252
287
  runWorklet(worklet, params);
@@ -256,14 +291,67 @@
256
291
  leftParamsVec.push(params);
257
292
  }
258
293
  });
259
- impl2._delayedWorkletParamsMap.set(
294
+ impl3._delayedWorkletParamsMap.set(
260
295
  worklet._wkltId,
261
296
  leftParamsVec
262
297
  );
263
298
  });
264
299
  }
265
300
  function clearDelayedWorklets() {
266
- 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
+ }
267
355
  }
268
356
 
269
357
  // src/jsFunctionLifecycle.ts
@@ -276,9 +364,10 @@
276
364
  this.registry = new FinalizationRegistry(this.removeRef.bind(this));
277
365
  }
278
366
  addRef(execId, objToRef) {
367
+ var _a;
279
368
  this.execIdRefCount.set(
280
369
  execId,
281
- (this.execIdRefCount.get(execId) || 0) + 1
370
+ ((_a = this.execIdRefCount.get(execId)) != null ? _a : 0) + 1
282
371
  );
283
372
  this.registry.register(objToRef, execId);
284
373
  }
@@ -292,7 +381,7 @@
292
381
  this.execIdSetToFire.add(execId);
293
382
  if (!this.willFire) {
294
383
  this.willFire = true;
295
- Promise.resolve().then(() => {
384
+ void Promise.resolve().then(() => {
296
385
  this.fire();
297
386
  });
298
387
  }
@@ -316,8 +405,10 @@
316
405
  function initWorklet() {
317
406
  globalThis.lynxWorkletImpl = {
318
407
  _workletMap: {},
319
- _eventDelayImpl: initEventDelay(),
320
- _refImpl: initWorkletRef()
408
+ _refImpl: initWorkletRef(),
409
+ _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),
410
+ _hydrateCtx: hydrateCtx,
411
+ _eventDelayImpl: initEventDelay()
321
412
  };
322
413
  if (isRunOnBackgroundEnabled()) {
323
414
  globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();
@@ -341,20 +432,15 @@
341
432
  return runWorkletImpl(ctx, params);
342
433
  }
343
434
  function runWorkletImpl(ctx, params) {
344
- traceCtxCall(ctx, params);
345
- try {
346
- const worklet = profile(
347
- "transformWorkletCtx " + ctx._wkltId,
348
- () => transformWorklet(ctx, true)
349
- );
350
- const params_ = profile(
351
- "transformWorkletParams",
352
- () => transformWorklet(params || [], false)
353
- );
354
- return profile("runWorklet", () => worklet(...params_));
355
- } finally {
356
- clearCurrentCtx();
357
- }
435
+ const worklet = profile(
436
+ "transformWorkletCtx " + ctx._wkltId,
437
+ () => transformWorklet(ctx, true)
438
+ );
439
+ const params_ = profile(
440
+ "transformWorkletParams",
441
+ () => transformWorklet(params || [], false)
442
+ );
443
+ return profile("runWorklet", () => worklet(...params_));
358
444
  }
359
445
  function validateWorklet(ctx) {
360
446
  return typeof ctx === "object" && ctx !== null && ("_wkltId" in ctx || "_lepusWorkletHash" in ctx);
@@ -377,15 +463,16 @@
377
463
  }
378
464
  return worklet.main;
379
465
  }
380
- var transformWorkletInner = (obj, depth, ctx) => {
466
+ var transformWorkletInner = (value, depth, ctx) => {
381
467
  var _a;
382
468
  const limit = 1e3;
383
469
  if (++depth >= limit) {
384
470
  throw new Error("Depth of value exceeds limit of " + limit + ".");
385
471
  }
386
- if (typeof obj !== "object" || obj === null) {
472
+ if (typeof value !== "object" || value === null) {
387
473
  return;
388
474
  }
475
+ const obj = value;
389
476
  for (const key in obj) {
390
477
  const subObj = obj[key];
391
478
  if (typeof subObj !== "object" || subObj === null) {
@@ -402,13 +489,14 @@
402
489
  const isWorkletRef = "_wvid" in subObj;
403
490
  if (isWorkletRef) {
404
491
  obj[key] = getFromWorkletRefMap(
405
- subObj._wvid
492
+ subObj
406
493
  );
407
494
  continue;
408
495
  }
409
496
  const isWorklet = "_wkltId" in subObj;
410
497
  if (isWorklet) {
411
498
  obj[key] = lynxWorkletImpl._workletMap[subObj._wkltId].bind({ ...subObj });
499
+ obj[key].ctx = subObj;
412
500
  continue;
413
501
  }
414
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/ctxTrace.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.\n\nimport type { ClosureValueType, Worklet } from './bindings/types.js';\n\ninterface CtxTrace {\n ctx: Worklet;\n}\n\nexport let currentCtx: CtxTrace | undefined;\n\nexport function traceCtxCall(ctx: Worklet, _params: ClosureValueType[]): void {\n currentCtx = {\n ctx,\n };\n}\n\nexport function clearCurrentCtx(): void {\n currentCtx = undefined;\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 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 { clearCurrentCtx, traceCtxCall } from './ctxTrace.js';\nimport { delayExecUntilJsReady, initEventDelay } from './delayWorkletEvent.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 _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: (...args: any[]) => any): 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 traceCtxCall(ctx, params);\n try {\n const worklet: (...args: any[]) => 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 } finally {\n clearCurrentCtx();\n }\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: any[]) => any)>();\n\nfunction transformWorklet(ctx: Worklet, isWorklet: true): (...args: any[]) => any;\nfunction transformWorklet(\n ctx: ClosureValueType[],\n isWorklet: false,\n): ClosureValueType[];\n\nfunction transformWorklet(\n ctx: ClosureValueType,\n isWorklet: boolean,\n): ClosureValueType | ((...args: any[]) => any) {\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": "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",
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 };