@lynx-js/react-canary 0.115.2 → 0.115.3-canary-20251229-821154b3
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,5 +1,25 @@
|
|
|
1
1
|
# @lynx-js/react
|
|
2
2
|
|
|
3
|
+
## 0.115.3-canary-20251229035520-821154b3c80b3116598c47a78cd4477cc9859311
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Use error cause to simplify the error msg of lazy bundle loading. User can catch the error cause to get the original result: ([#2056](https://github.com/lynx-family/lynx-stack/pull/2056))
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const LazyComponent = lazy(async () => {
|
|
11
|
+
try {
|
|
12
|
+
const mod = await import("./lazy-bundle");
|
|
13
|
+
return mod.default;
|
|
14
|
+
} catch (error) {
|
|
15
|
+
console.error(`Lazy Bundle load failed message: ${error.message}`);
|
|
16
|
+
// User can catch the error cause to get the original result
|
|
17
|
+
console.error(`Lazy Bundle load failed result: ${error.cause}`);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
3
23
|
## 0.115.2
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -101,11 +121,11 @@
|
|
|
101
121
|
- Support testing React Compiler in testing library. Enable React Compiler by setting the `experimental_enableReactCompiler` option of `createVitestConfig` to `true`. ([#1269](https://github.com/lynx-family/lynx-stack/pull/1269))
|
|
102
122
|
|
|
103
123
|
```js
|
|
104
|
-
import { defineConfig, mergeConfig } from
|
|
105
|
-
import { createVitestConfig } from
|
|
124
|
+
import { defineConfig, mergeConfig } from "vitest/config";
|
|
125
|
+
import { createVitestConfig } from "@lynx-js/react/testing-library/vitest-config";
|
|
106
126
|
|
|
107
127
|
const defaultConfig = await createVitestConfig({
|
|
108
|
-
runtimePkgName:
|
|
128
|
+
runtimePkgName: "@lynx-js/react",
|
|
109
129
|
experimental_enableReactCompiler: true,
|
|
110
130
|
});
|
|
111
131
|
|
|
@@ -135,7 +155,7 @@
|
|
|
135
155
|
```tsx
|
|
136
156
|
function App() {
|
|
137
157
|
function handleInnerTap(event: MainThread.TouchEvent) {
|
|
138
|
-
|
|
158
|
+
"main thread";
|
|
139
159
|
event.stopPropagation();
|
|
140
160
|
// Or stop immediate propagation with
|
|
141
161
|
// event.stopImmediatePropagation();
|
|
@@ -233,10 +253,10 @@
|
|
|
233
253
|
- Add `animate` API in Main Thread Script(MTS), so you can now control a CSS animation imperatively ([#1534](https://github.com/lynx-family/lynx-stack/pull/1534))
|
|
234
254
|
|
|
235
255
|
```ts
|
|
236
|
-
import type { MainThread } from
|
|
256
|
+
import type { MainThread } from "@lynx-js/types";
|
|
237
257
|
|
|
238
258
|
function startAnimation(ele: MainThread.Element) {
|
|
239
|
-
|
|
259
|
+
"main thread";
|
|
240
260
|
const animation = ele.animate([{ opacity: 0 }, { opacity: 1 }], {
|
|
241
261
|
duration: 3000,
|
|
242
262
|
});
|
|
@@ -265,7 +285,7 @@
|
|
|
265
285
|
- Supports `recyclable` attribute in `<list-item>` to control whether the list item is recyclable. The `recyclable` attribute depends on Lynx Engine 3.4 or later. ([#1388](https://github.com/lynx-family/lynx-stack/pull/1388))
|
|
266
286
|
|
|
267
287
|
```jsx
|
|
268
|
-
<list-item recyclable={false}
|
|
288
|
+
<list-item recyclable={false} />
|
|
269
289
|
```
|
|
270
290
|
|
|
271
291
|
- feat: Support using a host element as direct child of Suspense ([#1455](https://github.com/lynx-family/lynx-stack/pull/1455))
|
|
@@ -286,7 +306,7 @@
|
|
|
286
306
|
|
|
287
307
|
```ts
|
|
288
308
|
function handleTap() {
|
|
289
|
-
|
|
309
|
+
"main thread";
|
|
290
310
|
// The following check always returned false before this fix
|
|
291
311
|
if (myHandleTap) {
|
|
292
312
|
runOnBackground(myHandleTap)();
|
|
@@ -347,10 +367,10 @@
|
|
|
347
367
|
Add the import to `@lynx-js/react/debug` at the first line of the entry:
|
|
348
368
|
|
|
349
369
|
```js
|
|
350
|
-
import
|
|
351
|
-
import { root } from
|
|
370
|
+
import "@lynx-js/react/debug";
|
|
371
|
+
import { root } from "@lynx-js/react";
|
|
352
372
|
|
|
353
|
-
import { App } from
|
|
373
|
+
import { App } from "./App.jsx";
|
|
354
374
|
|
|
355
375
|
root.render(<App />);
|
|
356
376
|
```
|
|
@@ -360,9 +380,9 @@
|
|
|
360
380
|
For example, you can use it like this:
|
|
361
381
|
|
|
362
382
|
```jsx
|
|
363
|
-
<list-item defer={{ unmountRecycled: true }} item-key=
|
|
383
|
+
<list-item defer={{ unmountRecycled: true }} item-key="1">
|
|
364
384
|
<WillBeUnmountIfRecycled />
|
|
365
|
-
</list-item
|
|
385
|
+
</list-item>
|
|
366
386
|
```
|
|
367
387
|
|
|
368
388
|
Now the component will be unmounted when it is recycled, which can help with performance in certain scenarios.
|
|
@@ -370,7 +390,7 @@
|
|
|
370
390
|
- Avoid some unexpected `__SetAttribute` in hydrate when `undefined` is passed as an attribute value to intrinsic elements, for example: ([#1318](https://github.com/lynx-family/lynx-stack/pull/1318))
|
|
371
391
|
|
|
372
392
|
```jsx
|
|
373
|
-
<image async-mode={undefined}
|
|
393
|
+
<image async-mode={undefined} />
|
|
374
394
|
```
|
|
375
395
|
|
|
376
396
|
## 0.111.1
|
|
@@ -416,7 +436,7 @@
|
|
|
416
436
|
- Supports `act` in testing library. ([#1182](https://github.com/lynx-family/lynx-stack/pull/1182))
|
|
417
437
|
|
|
418
438
|
```js
|
|
419
|
-
import { act } from
|
|
439
|
+
import { act } from "@lynx-js/react/testing-library";
|
|
420
440
|
|
|
421
441
|
act(() => {
|
|
422
442
|
// ...
|
|
@@ -522,8 +542,7 @@
|
|
|
522
542
|
* 3: Full Resolution - Batch render with async property and element tree resolution for list item subtree
|
|
523
543
|
*/
|
|
524
544
|
experimental-batch-render-strategy={3}
|
|
525
|
-
>
|
|
526
|
-
</list>;
|
|
545
|
+
></list>
|
|
527
546
|
```
|
|
528
547
|
|
|
529
548
|
- rename @lynx-js/test-environment to @lynx-js/testing-environment ([#704](https://github.com/lynx-family/lynx-stack/pull/704))
|
|
@@ -641,7 +660,7 @@
|
|
|
641
660
|
You can now use `useErrorBoundary` it in TypeScript like this:
|
|
642
661
|
|
|
643
662
|
```tsx
|
|
644
|
-
import { useErrorBoundary } from
|
|
663
|
+
import { useErrorBoundary } from "@lynx-js/react";
|
|
645
664
|
```
|
|
646
665
|
|
|
647
666
|
- Modified the format of data sent from background threads to the main thread. ([#207](https://github.com/lynx-family/lynx-stack/pull/207))
|
|
@@ -693,13 +712,13 @@
|
|
|
693
712
|
Now you can get the return value from `runOnBackground()` and `runOnMainThread()`, which enables more flexible data flow between the main thread and the background thread.
|
|
694
713
|
|
|
695
714
|
```js
|
|
696
|
-
import { runOnBackground } from
|
|
715
|
+
import { runOnBackground } from "@lynx-js/react";
|
|
697
716
|
|
|
698
717
|
const onTap = async () => {
|
|
699
|
-
|
|
718
|
+
"main thread";
|
|
700
719
|
const text = await runOnBackground(() => {
|
|
701
|
-
|
|
702
|
-
return
|
|
720
|
+
"background only";
|
|
721
|
+
return "Hello, world!";
|
|
703
722
|
})();
|
|
704
723
|
console.log(text);
|
|
705
724
|
};
|
|
@@ -734,9 +753,9 @@
|
|
|
734
753
|
|
|
735
754
|
```ts
|
|
736
755
|
// These imports will be removed from the final bundle
|
|
737
|
-
import type { Foo } from
|
|
738
|
-
import { type Bar } from
|
|
739
|
-
import { xyz } from
|
|
756
|
+
import type { Foo } from "xyz";
|
|
757
|
+
import { type Bar } from "xyz";
|
|
758
|
+
import { xyz } from "xyz"; // When xyz is not used
|
|
740
759
|
```
|
|
741
760
|
|
|
742
761
|
See [TypeScript - verbatimModuleSyntax](https://www.typescriptlang.org/tsconfig/#verbatimModuleSyntax) for details.
|
|
@@ -776,7 +795,7 @@
|
|
|
776
795
|
const f = undefined;
|
|
777
796
|
|
|
778
797
|
function mts() {
|
|
779
|
-
|
|
798
|
+
"main thread";
|
|
780
799
|
// throws in background rendering
|
|
781
800
|
f && runOnBackground(f)();
|
|
782
801
|
}
|
|
@@ -810,14 +829,14 @@
|
|
|
810
829
|
- a30c83d: Add `compat.removeComponentAttrRegex`.
|
|
811
830
|
|
|
812
831
|
```js
|
|
813
|
-
import { pluginReactLynx } from
|
|
814
|
-
import { defineConfig } from
|
|
832
|
+
import { pluginReactLynx } from "@lynx-js/react-rsbuild-plugin";
|
|
833
|
+
import { defineConfig } from "@lynx-js/rspeedy";
|
|
815
834
|
|
|
816
835
|
export default defineConfig({
|
|
817
836
|
plugins: [
|
|
818
837
|
pluginReactLynx({
|
|
819
838
|
compat: {
|
|
820
|
-
removeComponentAttrRegex:
|
|
839
|
+
removeComponentAttrRegex: "YOUR REGEX",
|
|
821
840
|
},
|
|
822
841
|
}),
|
|
823
842
|
],
|
|
@@ -903,22 +922,22 @@
|
|
|
903
922
|
Gesture Handler is a set of gesture handling capabilities built on top of the Main Thread Script. It currently supports drag, inertial scrolling, long press, and tap gestures for `<view>`, `<scroll-view>`, `<list>`, and `<text>`. In the future, it will also support multi-finger zoom, multi-finger rotation, and other gesture capabilities.
|
|
904
923
|
|
|
905
924
|
```tsx
|
|
906
|
-
import { useGesture, PanGesture } from
|
|
925
|
+
import { useGesture, PanGesture } from "@lynx-js/gesture-runtime";
|
|
907
926
|
|
|
908
927
|
function App() {
|
|
909
928
|
const pan = useGesture(PanGesture);
|
|
910
929
|
|
|
911
930
|
pan
|
|
912
931
|
.onBegin((event, stateManager) => {
|
|
913
|
-
|
|
932
|
+
"main thread";
|
|
914
933
|
// some logic
|
|
915
934
|
})
|
|
916
935
|
.onUpdate((event, stateManager) => {
|
|
917
|
-
|
|
936
|
+
"main thread";
|
|
918
937
|
// some logic
|
|
919
938
|
})
|
|
920
939
|
.onEnd((event, stateManager) => {
|
|
921
|
-
|
|
940
|
+
"main thread";
|
|
922
941
|
// some logic
|
|
923
942
|
});
|
|
924
943
|
|
|
@@ -938,7 +957,7 @@
|
|
|
938
957
|
return;
|
|
939
958
|
}
|
|
940
959
|
|
|
941
|
-
console.log(
|
|
960
|
+
console.log("not __LEPUS__"); // This can be removed now
|
|
942
961
|
}
|
|
943
962
|
```
|
|
944
963
|
|
package/package.json
CHANGED
|
@@ -88,7 +88,11 @@ export const loadLazyBundle = /*#__PURE__*/ (() => {
|
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
const e = new Error('Lazy bundle load failed, schema: ' + result.detail.schema);
|
|
92
|
+
// ES5 does not support new Error('message', { cause: 'detail' })
|
|
93
|
+
// So we set cause using `.cause` assignment
|
|
94
|
+
e.cause = JSON.stringify(result);
|
|
95
|
+
resolver.reject(e);
|
|
92
96
|
};
|
|
93
97
|
if (typeof lynx.QueryComponent === 'function') {
|
|
94
98
|
lynx.QueryComponent(source, callback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-bundle.js","sourceRoot":"","sources":["../../src/lynx/lazy-bundle.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAY,MAAS;IAC/C,OAAO,UAEL,GAAmD,EACnD,IAAuD;QAEvD,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,aAAa;gBACb,oCAAoC;gBACpC,IAAI;gBACJ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAU,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,GAAG,IAAI,OAAQ,GAAwB,CAAC,IAAI,KAAK,UAAU,CAAC,uBAAuB,EAAE,CAAC;gBACxF,aAAa;gBACb,+CAA+C;gBAC/C,IAAI;gBACJ,6DAA6D;gBAC7D,yDAAyD;gBACzD,qCAAqC;gBACrC,OAAO,GAAmB,CAAC;gBAE3B,8FAA8F;gBAC9F,oBAAoB;gBACpB,eAAe;gBACf,2LAA2L;gBAC3L,OAAO;gBACP,yBAAyB;gBACzB,KAAK;YACP,CAAC;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE/B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAU,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,GAAG,IAAqC,CAAC;YAE/C,OAAO,CAAuB,CAAC;QACjC,CAAC;QAED,OAAO,IAA0B,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAEO,aAAa,CAAC,CAAC,GAAG,EAAE;IACpD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IAErC,SAAS,cAAc,CAErB,MAAc;QACd,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,GAAG,KAAK,CAAC,UAAe,CAAC;YACjC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,2CAA2C;gBAC3C,iFAAiF;gBACjF,iDAAiD;gBACjD,6DAA6D;gBAC7D,uEAAuE;gBACvE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,MAAM,CAAC,GAAe,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9C,qDAAqD;YACrD,uFAAuF;YACvF,oCAAoC;YACpC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,iBAAiB,EAAK,CAAC;YAExC,MAAM,QAAQ,GAAmE,MAAM,CAAC,EAAE;gBACxF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;gBAChC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;oBAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;oBACrE,iFAAiF;oBACjF,uGAAuG;oBACvG,IAAI,OAAO,EAAE,CAAC;wBACZ,QAAQ,CAAC,OAAO,CAAC,OAAY,CAAC,CAAC;wBAC/B,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,
|
|
1
|
+
{"version":3,"file":"lazy-bundle.js","sourceRoot":"","sources":["../../src/lynx/lazy-bundle.ts"],"names":[],"mappings":"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"}
|