@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 'vitest/config';
105
- import { createVitestConfig } from '@lynx-js/react/testing-library/vitest-config';
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: '@lynx-js/react',
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
- 'main thread';
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 '@lynx-js/types';
256
+ import type { MainThread } from "@lynx-js/types";
237
257
 
238
258
  function startAnimation(ele: MainThread.Element) {
239
- 'main thread';
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
- 'main thread';
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 '@lynx-js/react/debug';
351
- import { root } from '@lynx-js/react';
370
+ import "@lynx-js/react/debug";
371
+ import { root } from "@lynx-js/react";
352
372
 
353
- import { App } from './App.jsx';
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='1'>
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 '@lynx-js/react/testing-library';
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 '@lynx-js/react';
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 '@lynx-js/react';
715
+ import { runOnBackground } from "@lynx-js/react";
697
716
 
698
717
  const onTap = async () => {
699
- 'main thread';
718
+ "main thread";
700
719
  const text = await runOnBackground(() => {
701
- 'background only';
702
- return 'Hello, world!';
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 'xyz';
738
- import { type Bar } from 'xyz';
739
- import { xyz } from 'xyz'; // When xyz is not used
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
- 'main thread';
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 '@lynx-js/react-rsbuild-plugin';
814
- import { defineConfig } from '@lynx-js/rspeedy';
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: 'YOUR REGEX',
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 '@lynx-js/gesture-runtime';
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
- 'main thread';
932
+ "main thread";
914
933
  // some logic
915
934
  })
916
935
  .onUpdate((event, stateManager) => {
917
- 'main thread';
936
+ "main thread";
918
937
  // some logic
919
938
  })
920
939
  .onEnd((event, stateManager) => {
921
- 'main thread';
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('not __LEPUS__'); // This can be removed now
960
+ console.log("not __LEPUS__"); // This can be removed now
942
961
  }
943
962
  ```
944
963
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynx-js/react-canary",
3
- "version": "0.115.2",
3
+ "version": "0.115.3-canary-20251229-821154b3",
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.15.0
6
6
 
7
7
  info build started...
8
- ready built in 0.16 s
8
+ ready built in 0.15 s
9
9
 
10
10
  File (esm) Size 
11
11
  dist/index.js 10.1 kB
@@ -88,7 +88,11 @@ export const loadLazyBundle = /*#__PURE__*/ (() => {
88
88
  return;
89
89
  }
90
90
  }
91
- resolver.reject(new Error('Lazy bundle load failed: ' + JSON.stringify(result)));
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":"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"}
1
+ {"version":3,"file":"lazy-bundle.js","sourceRoot":"","sources":["../../src/lynx/lazy-bundle.ts"],"names":[],"mappings":"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"}