@lynx-js/react 0.108.1 → 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.
- package/CHANGELOG.md +16 -0
- package/package.json +2 -2
- package/refresh/.turbo/turbo-build.log +1 -1
- package/runtime/jsx-dev-runtime/index.d.ts +13 -7
- package/runtime/jsx-runtime/index.d.ts +17 -7
- package/runtime/lib/gesture/processGesture.d.ts +2 -2
- package/runtime/lib/gesture/processGesture.js +14 -7
- package/runtime/lib/gesture/processGesture.js.map +1 -1
- package/runtime/lib/lifecycle/patch/snapshotPatchApply.js +2 -2
- package/runtime/lib/lifecycle/patch/snapshotPatchApply.js.map +1 -1
- package/runtime/lib/snapshot/gesture.d.ts +1 -1
- package/runtime/lib/snapshot/gesture.js +4 -3
- package/runtime/lib/snapshot/gesture.js.map +1 -1
- package/runtime/lib/snapshot/workletEvent.d.ts +1 -1
- package/runtime/lib/snapshot/workletEvent.js +3 -2
- package/runtime/lib/snapshot/workletEvent.js.map +1 -1
- package/runtime/lib/snapshot/workletRef.js +4 -4
- package/runtime/lib/snapshot/workletRef.js.map +1 -1
- package/runtime/lib/snapshot.d.ts +1 -0
- package/runtime/lib/snapshot.js +5 -4
- package/runtime/lib/snapshot.js.map +1 -1
- package/runtime/lib/worklet/runOnBackground.js +21 -12
- package/runtime/lib/worklet/runOnBackground.js.map +1 -1
- package/runtime/src/gesture/processGesture.ts +23 -15
- package/runtime/src/lifecycle/patch/snapshotPatchApply.ts +8 -2
- package/runtime/src/snapshot/gesture.ts +6 -4
- package/runtime/src/snapshot/workletEvent.ts +3 -2
- package/runtime/src/snapshot/workletRef.ts +5 -5
- package/runtime/src/snapshot.ts +6 -4
- package/runtime/src/worklet/runOnBackground.ts +37 -15
- package/testing-library/dist/vitest-global-setup.js +7 -0
- package/transform/dist/wasm.cjs +1 -1
- package/transform/index.d.ts +443 -14
- package/types/react.d.ts +1 -1
- package/worklet-runtime/dist/dev.js +137 -49
- package/worklet-runtime/dist/dev.js.map +4 -4
- package/worklet-runtime/dist/main.js +137 -49
- package/worklet-runtime/dist/main.js.map +4 -4
- package/worklet-runtime/lib/api/element.d.ts +3 -3
- package/worklet-runtime/lib/api/element.js +3 -3
- package/worklet-runtime/lib/api/element.js.map +1 -1
- package/worklet-runtime/lib/api/lepusQuerySelector.js +1 -3
- package/worklet-runtime/lib/api/lepusQuerySelector.js.map +1 -1
- package/worklet-runtime/lib/api/lynxApi.js +10 -10
- package/worklet-runtime/lib/api/lynxApi.js.map +1 -1
- package/worklet-runtime/lib/bindings/bindings.d.ts +1 -1
- package/worklet-runtime/lib/bindings/bindings.js +20 -7
- package/worklet-runtime/lib/bindings/bindings.js.map +1 -1
- package/worklet-runtime/lib/bindings/events.d.ts +4 -1
- package/worklet-runtime/lib/bindings/events.js.map +1 -1
- package/worklet-runtime/lib/bindings/index.d.ts +1 -1
- package/worklet-runtime/lib/bindings/index.js +1 -1
- package/worklet-runtime/lib/bindings/index.js.map +1 -1
- package/worklet-runtime/lib/bindings/loadRuntime.js +0 -2
- package/worklet-runtime/lib/bindings/loadRuntime.js.map +1 -1
- package/worklet-runtime/lib/bindings/types.d.ts +8 -2
- package/worklet-runtime/lib/delayRunOnBackground.d.ts +12 -0
- package/worklet-runtime/lib/delayRunOnBackground.js +23 -0
- package/worklet-runtime/lib/delayRunOnBackground.js.map +1 -0
- package/worklet-runtime/lib/delayWorkletEvent.js +2 -2
- package/worklet-runtime/lib/delayWorkletEvent.js.map +1 -1
- package/worklet-runtime/lib/global.d.ts +6 -3
- package/worklet-runtime/lib/hydrate.d.ts +11 -0
- package/worklet-runtime/lib/hydrate.js +86 -0
- package/worklet-runtime/lib/hydrate.js.map +1 -0
- package/worklet-runtime/lib/jsFunctionLifecycle.js +2 -2
- package/worklet-runtime/lib/jsFunctionLifecycle.js.map +1 -1
- package/worklet-runtime/lib/listeners.js.map +1 -1
- package/worklet-runtime/lib/utils/profile.d.ts +1 -1
- package/worklet-runtime/lib/utils/version.js +1 -1
- package/worklet-runtime/lib/workletRef.d.ts +6 -3
- package/worklet-runtime/lib/workletRef.js +33 -6
- package/worklet-runtime/lib/workletRef.js.map +1 -1
- package/worklet-runtime/lib/workletRuntime.js +13 -18
- package/worklet-runtime/lib/workletRuntime.js.map +1 -1
- package/worklet-runtime/lib/ctxTrace.d.ts +0 -8
- package/worklet-runtime/lib/ctxTrace.js +0 -13
- 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-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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 = (
|
|
161
|
-
const
|
|
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
|
|
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
|
-
|
|
177
|
-
|
|
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/
|
|
208
|
-
var
|
|
209
|
-
function
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
215
|
-
|
|
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
|
|
253
|
+
var impl3;
|
|
220
254
|
function initEventDelay() {
|
|
221
|
-
return
|
|
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 =
|
|
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 =
|
|
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
|
|
249
|
-
|
|
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
|
-
|
|
294
|
+
impl3._delayedWorkletParamsMap.set(
|
|
260
295
|
worklet._wkltId,
|
|
261
296
|
leftParamsVec
|
|
262
297
|
);
|
|
263
298
|
});
|
|
264
299
|
}
|
|
265
300
|
function clearDelayedWorklets() {
|
|
266
|
-
|
|
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)
|
|
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
|
-
|
|
320
|
-
|
|
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
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
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 = (
|
|
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
|
|
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
|
|
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/
|
|
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": ";;;;;;;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,
|
|
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:
|
|
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):
|
|
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,
|
|
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-
|
|
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
|
|
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":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,MAAM,OAAO,OAAO;IACV,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAEjC,
|
|
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
|
-
|
|
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,
|
|
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-
|
|
7
|
+
// @ts-expect-error type
|
|
8
8
|
lynx.querySelector = querySelector;
|
|
9
|
-
// @ts-
|
|
9
|
+
// @ts-expect-error type
|
|
10
10
|
lynx.querySelectorAll = querySelectorAll;
|
|
11
|
-
// @ts-
|
|
11
|
+
// @ts-expect-error type
|
|
12
12
|
globalThis.setTimeout = lynx.setTimeout;
|
|
13
|
-
// @ts-
|
|
13
|
+
// @ts-expect-error type
|
|
14
14
|
globalThis.setInterval = lynx.setInterval;
|
|
15
|
-
// @ts-
|
|
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-
|
|
19
|
-
globalThis.clearInterval = lynx.clearInterval ?? lynx.clearTimeInterval;
|
|
18
|
+
// @ts-expect-error type
|
|
19
|
+
globalThis.clearInterval = (lynx.clearInterval ?? lynx.clearTimeInterval);
|
|
20
20
|
{
|
|
21
|
-
// @ts-
|
|
21
|
+
// @ts-expect-error type
|
|
22
22
|
const requestAnimationFrame = lynx.requestAnimationFrame;
|
|
23
|
-
// @ts-
|
|
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-
|
|
31
|
+
// @ts-expect-error type
|
|
32
32
|
globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame;
|
|
33
33
|
}
|
|
34
34
|
export { initApiEnv };
|