@lynx-js/react-canary 0.114.0-canary-20250918-a84376fc → 0.114.0-canary-20250918-7cb4d973

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @lynx-js/react
2
2
 
3
- ## 0.114.0-canary-20250918125646-a84376fcea469cae20c98e4cf824424cf55486e4
3
+ ## 0.114.0-canary-20250918133146-7cb4d97315f56c5b4f0c5079e987dae1d509c37c
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -14,6 +14,8 @@
14
14
 
15
15
  - Reduce extra snapshot when children are pure text ([#1562](https://github.com/lynx-family/lynx-stack/pull/1562))
16
16
 
17
+ - feat: Support `SelectorQuery` `animation` APIs ([#1768](https://github.com/lynx-family/lynx-stack/pull/1768))
18
+
17
19
  - Fix spread props inside list-item caused redundant snapshot patch ([#1760](https://github.com/lynx-family/lynx-stack/pull/1760))
18
20
 
19
21
  - fix: `ref is not initialized` error on template reload ([#1757](https://github.com/lynx-family/lynx-stack/pull/1757))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynx-js/react-canary",
3
- "version": "0.114.0-canary-20250918-a84376fc",
3
+ "version": "0.114.0-canary-20250918-7cb4d973",
4
4
  "description": "ReactLynx is a framework for developing Lynx applications with familiar React.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -5,7 +5,7 @@
5
5
  Rslib v0.13.1
6
6
 
7
7
  info build started...
8
- ready built in 0.14 s
8
+ ready built in 0.12 s
9
9
 
10
10
  File (esm) Size 
11
11
  dist/index.js 10.1 kB
@@ -1,4 +1,8 @@
1
1
  import type { NodesRef } from '@lynx-js/types';
2
+ type FunctionPropertyNames<T> = {
3
+ [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? K : never;
4
+ }[keyof T];
5
+ type ForwardableNodesRefMethod = Exclude<FunctionPropertyNames<NodesRef>, 'exec'>;
2
6
  /**
3
7
  * A flag to indicate whether UI operations should be delayed.
4
8
  * When set to true, UI operations will be queued in the `delayedUiOps` array
@@ -22,10 +26,11 @@ declare class RefProxy {
22
26
  private task;
23
27
  constructor(refAttr: [snapshotInstanceId: number, expIndex: number]);
24
28
  private setTask;
25
- invoke(...args: Parameters<NodesRef['invoke']>): RefProxy;
26
- path(...args: Parameters<NodesRef['path']>): RefProxy;
27
- fields(...args: Parameters<NodesRef['fields']>): RefProxy;
28
- setNativeProps(...args: Parameters<NodesRef['setNativeProps']>): RefProxy;
29
29
  exec(): void;
30
30
  }
31
+ type RefProxyForwardedMethods = {
32
+ [K in ForwardableNodesRefMethod]: (...args: Parameters<NodesRef[K]>) => RefProxy;
33
+ };
34
+ interface RefProxy extends RefProxyForwardedMethods {
35
+ }
31
36
  export {};
@@ -31,11 +31,12 @@ function runOrDelay(task) {
31
31
  * Executes all delayed UI operations.
32
32
  */
33
33
  function runDelayedUiOps() {
34
- for (const task of delayedUiOps) {
34
+ const tasks = delayedUiOps.slice();
35
+ delayedUiOps.length = 0;
36
+ shouldDelayUiOps.value = false;
37
+ for (const task of tasks) {
35
38
  task();
36
39
  }
37
- shouldDelayUiOps.value = false;
38
- delayedUiOps.length = 0;
39
40
  }
40
41
  /**
41
42
  * A proxy class designed for managing and executing reference-based tasks.
@@ -46,25 +47,31 @@ class RefProxy {
46
47
  task;
47
48
  constructor(refAttr) {
48
49
  this.refAttr = refAttr;
50
+ this.task = undefined;
51
+ return new Proxy(this, {
52
+ get: (target, prop, receiver) => {
53
+ if (typeof prop === 'symbol'
54
+ || prop === 'then'
55
+ || prop in target
56
+ || typeof prop !== 'string') {
57
+ return Reflect.get(target, prop, receiver);
58
+ }
59
+ const forward = (method) => {
60
+ return (...args) => {
61
+ return new RefProxy(target.refAttr).setTask(method, args);
62
+ };
63
+ };
64
+ return forward(prop);
65
+ },
66
+ });
49
67
  }
50
68
  setTask(method, args) {
51
69
  this.task = (nodesRef) => {
52
- return nodesRef[method](...args);
70
+ const nodesRefMethod = nodesRef[method];
71
+ return nodesRefMethod.apply(nodesRef, args);
53
72
  };
54
73
  return this;
55
74
  }
56
- invoke(...args) {
57
- return new RefProxy(this.refAttr).setTask('invoke', args);
58
- }
59
- path(...args) {
60
- return new RefProxy(this.refAttr).setTask('path', args);
61
- }
62
- fields(...args) {
63
- return new RefProxy(this.refAttr).setTask('fields', args);
64
- }
65
- setNativeProps(...args) {
66
- return new RefProxy(this.refAttr).setTask('setNativeProps', args);
67
- }
68
75
  exec() {
69
76
  runOrDelay(() => {
70
77
  const realRefId = hydrationMap.get(this.refAttr[0]) ?? this.refAttr[0];
@@ -1 +1 @@
1
- {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../../src/lifecycle/ref/delay.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAIrE;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,YAAY,GAAmB,EAAE,CAAC;AAExC;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAgB;IAClC,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC;IACT,CAAC;IACD,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;IAC/B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,QAAQ;IACK,OAAO,CAAiD;IACjE,IAAI,CAAsB;IAElC,YAAY,OAAuD;QACjE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,OAAO,CACb,MAAS,EACT,IAA6B;QAE7B,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;YACvB,OAAQ,QAAQ,CAAC,MAAM,CAAkD,CAAC,GAAG,IAAI,CAAC,CAAC;QACrF,CAAC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,IAAoC;QAC5C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,GAAG,IAAkC;QACxC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,GAAG,IAAoC;QAC5C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc,CAAC,GAAG,IAA4C;QAC5D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,IAAI;QACF,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,cAAc,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,IAAI,CAAC,IAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../../src/lifecycle/ref/delay.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAUrE;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,YAAY,GAAmB,EAAE,CAAC;AAExC;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAgB;IAClC,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IACnC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,QAAQ;IACK,OAAO,CAAiD;IACjE,IAAI,CAAsB;IAElC,YAAY,OAAuD;QACjE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QAEtB,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;YACrB,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC9B,IACE,OAAO,IAAI,KAAK,QAAQ;uBACrB,IAAI,KAAK,MAAM;uBACf,IAAI,IAAI,MAAM;uBACd,OAAO,IAAI,KAAK,QAAQ,EAC3B,CAAC;oBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,OAAO,GAAG,CAAsC,MAAS,EAAE,EAAE;oBACjE,OAAO,CAAC,GAAG,IAA6B,EAAE,EAAE;wBAC1C,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAC5D,CAAC,CAAC;gBACJ,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,IAAiC,CAAC,CAAC;YACpD,CAAC;SACF,CAAa,CAAC;IACjB,CAAC;IAEO,OAAO,CACb,MAAS,EACT,IAA6B;QAE7B,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;YACvB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAA0D,CAAC;YACjG,OAAO,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,cAAc,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,IAAI,CAAC,IAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAQD;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { options } from "preact";
2
+ import { expect } from "vitest";
2
3
  import { BackgroundSnapshotInstance } from "../../runtime/lib/backgroundSnapshot.js";
3
4
  import { clearCommitTaskId, replaceCommitHook } from "../../runtime/lib/lifecycle/patch/commit.js";
4
5
  import { deinitGlobalSnapshotPatch } from "../../runtime/lib/lifecycle/patch/snapshotPatch.js";
@@ -12,6 +13,22 @@ import { destroyWorklet } from "../../runtime/lib/worklet/destroy.js";
12
13
  import { initApiEnv } from "../../worklet-runtime/lib/api/lynxApi.js";
13
14
  import { initEventListeners } from "../../worklet-runtime/lib/listeners.js";
14
15
  import { initWorklet } from "../../worklet-runtime/lib/workletRuntime.js";
16
+ expect.addSnapshotSerializer({
17
+ test (val) {
18
+ return Boolean(val && 'object' == typeof val && Array.isArray(val.refAttr) && Object.prototype.hasOwnProperty.call(val, 'task') && 'function' == typeof val.exec);
19
+ },
20
+ print (val, serialize) {
21
+ const printed = serialize({
22
+ refAttr: Array.isArray(val.refAttr) ? [
23
+ ...val.refAttr
24
+ ] : val.refAttr,
25
+ task: val.task
26
+ });
27
+ if (printed.startsWith('Object')) return printed.replace(/^Object/, 'RefProxy');
28
+ if (printed.startsWith('{')) return `RefProxy ${printed}`;
29
+ return printed;
30
+ }
31
+ });
15
32
  const { onInjectMainThreadGlobals, onInjectBackgroundThreadGlobals, onResetLynxTestingEnv, onSwitchedToMainThread, onSwitchedToBackgroundThread, onInitWorkletRuntime } = globalThis;
16
33
  injectCalledByNative();
17
34
  injectUpdateMainThread();