@lynx-js/react 0.106.1 → 0.106.3
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 +18 -0
- package/package.json +2 -2
- package/refresh/.turbo/turbo-build.log +1 -1
- package/refresh/package.json +1 -1
- package/runtime/lazy/internal.js +1 -1
- package/runtime/lib/lifecycle/destroy.js +8 -0
- package/runtime/lib/lifecycle/destroy.js.map +1 -1
- package/runtime/lib/lifecycle/event/delayEvents.d.ts +3 -0
- package/runtime/lib/lifecycle/event/delayEvents.js +7 -0
- package/runtime/lib/lifecycle/event/delayEvents.js.map +1 -0
- package/runtime/lib/lifecycle/event/delayLifecycleEvents.d.ts +3 -0
- package/runtime/lib/lifecycle/event/delayLifecycleEvents.js +20 -0
- package/runtime/lib/lifecycle/event/delayLifecycleEvents.js.map +1 -0
- package/runtime/lib/lifecycle/event/jsReady.d.ts +6 -0
- package/runtime/lib/lifecycle/event/jsReady.js +29 -0
- package/runtime/lib/lifecycle/event/jsReady.js.map +1 -0
- package/runtime/lib/lifecycle/reload.d.ts +1 -1
- package/runtime/lib/lifecycle/reload.js +18 -14
- package/runtime/lib/lifecycle/reload.js.map +1 -1
- package/runtime/lib/lynx/calledByNative.js +13 -30
- package/runtime/lib/lynx/calledByNative.js.map +1 -1
- package/runtime/lib/lynx/lazy-bundle.d.ts +2 -2
- package/runtime/lib/lynx/lazy-bundle.js +49 -46
- package/runtime/lib/lynx/lazy-bundle.js.map +1 -1
- package/runtime/lib/lynx/tt.d.ts +1 -2
- package/runtime/lib/lynx/tt.js +20 -20
- package/runtime/lib/lynx/tt.js.map +1 -1
- package/runtime/lib/lynx-api.js +5 -2
- package/runtime/lib/lynx-api.js.map +1 -1
- package/runtime/lib/snapshot.d.ts +1 -0
- package/runtime/lib/snapshot.js +4 -0
- package/runtime/lib/snapshot.js.map +1 -1
- package/runtime/src/lifecycle/destroy.ts +8 -1
- package/runtime/src/lifecycle/event/delayEvents.ts +8 -0
- package/runtime/src/lifecycle/event/delayLifecycleEvents.ts +21 -0
- package/runtime/src/lifecycle/event/jsReady.ts +33 -0
- package/runtime/src/lifecycle/reload.ts +20 -15
- package/runtime/src/lynx/calledByNative.ts +15 -33
- package/runtime/src/lynx/lazy-bundle.ts +52 -46
- package/runtime/src/lynx/tt.ts +23 -20
- package/runtime/src/lynx-api.ts +5 -4
- package/runtime/src/snapshot.ts +5 -0
- package/transform/dist/wasm.cjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @lynx-js/react
|
|
2
2
|
|
|
3
|
+
## 0.106.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Do some global var initialize in hydrate, which fixes error like `cannot read property '-21' of undefined` and some style issue. ([#461](https://github.com/lynx-family/lynx-stack/pull/461))
|
|
8
|
+
|
|
9
|
+
- fix: ensure ref lifecycle events run after firstScreen in the background thread ([#434](https://github.com/lynx-family/lynx-stack/pull/434))
|
|
10
|
+
|
|
11
|
+
This patch fixes an issue where ref lifecycle events were running before firstScreen events in the background thread async render mode, which could cause refs to be undefined when components try to access them.
|
|
12
|
+
|
|
13
|
+
## 0.106.2
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- fix: prevent multiple firstScreen events when reloading before `jsReady` ([#377](https://github.com/lynx-family/lynx-stack/pull/377))
|
|
18
|
+
|
|
19
|
+
- Optimize the bundle size by eliminating unnecessary code when the lazy bundle is not utilized. ([#284](https://github.com/lynx-family/lynx-stack/pull/284))
|
|
20
|
+
|
|
3
21
|
## 0.106.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynx-js/react",
|
|
3
|
-
"version": "0.106.
|
|
3
|
+
"version": "0.106.3",
|
|
4
4
|
"description": "ReactLynx is a framework for developing Lynx applications with familiar React.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"devDependencies": {
|
|
151
151
|
"@lynx-js/types": "^3.2.0",
|
|
152
|
-
"@microsoft/api-extractor": "7.
|
|
152
|
+
"@microsoft/api-extractor": "7.52.2",
|
|
153
153
|
"@types/react": "^18.3.20"
|
|
154
154
|
},
|
|
155
155
|
"peerDependencies": {
|
package/refresh/package.json
CHANGED
package/runtime/lazy/internal.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
4
|
|
|
5
|
-
import { sExportsReactInternal, target } from './target';
|
|
5
|
+
import { sExportsReactInternal, target } from './target.js';
|
|
6
6
|
|
|
7
7
|
export const {
|
|
8
8
|
Component,
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
4
|
import { __root } from '../root.js';
|
|
5
|
+
import { delayedEvents } from './event/delayEvents.js';
|
|
6
|
+
import { delayedLifecycleEvents } from './event/delayLifecycleEvents.js';
|
|
5
7
|
import { globalCommitTaskMap } from './patch/commit.js';
|
|
6
8
|
import { renderBackground } from './render.js';
|
|
7
9
|
function destroyBackground() {
|
|
@@ -13,6 +15,12 @@ function destroyBackground() {
|
|
|
13
15
|
task();
|
|
14
16
|
});
|
|
15
17
|
globalCommitTaskMap.clear();
|
|
18
|
+
// Clear delayed events which should not be executed after destroyed.
|
|
19
|
+
// This is important when the page is performing a reload.
|
|
20
|
+
delayedLifecycleEvents.length = 0;
|
|
21
|
+
if (delayedEvents) {
|
|
22
|
+
delayedEvents.length = 0;
|
|
23
|
+
}
|
|
16
24
|
if (__PROFILE__) {
|
|
17
25
|
console.profileEnd();
|
|
18
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/lifecycle/destroy.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,iBAAiB;IACxB,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC;IAEtC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,mBAAmB,CAAC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/lifecycle/destroy.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,iBAAiB;IACxB,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC;IAEtC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC5B,qEAAqE;IACrE,0DAA0D;IAC1D,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delayEvents.js","sourceRoot":"","sources":["../../../src/lifecycle/event/delayEvents.ts"],"names":[],"mappings":"AAAA,IAAI,aAAiE,CAAC;AAEtE,SAAS,mBAAmB,CAAC,WAAmB,EAAE,IAAa;IAC7D,aAAa,KAAK,EAAE,CAAC;IACrB,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LifecycleConstant } from '../../lifecycleConstant.js';
|
|
2
|
+
const delayedLifecycleEvents = [];
|
|
3
|
+
function delayLifecycleEvent(type, data) {
|
|
4
|
+
// We need to ensure that firstScreen events are executed before other events.
|
|
5
|
+
// This is because firstScreen events are used to initialize the dom tree,
|
|
6
|
+
// and other events depend on the dom tree being fully constructed.
|
|
7
|
+
// There might be some edge cases where ctx cannot be found in `ref` lifecycle event,
|
|
8
|
+
// and they should be ignored safely.
|
|
9
|
+
if (type === LifecycleConstant.firstScreen) {
|
|
10
|
+
delayedLifecycleEvents.unshift([type, data]);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
delayedLifecycleEvents.push([type, data]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export { delayLifecycleEvent, delayedLifecycleEvents };
|
|
20
|
+
//# sourceMappingURL=delayLifecycleEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delayLifecycleEvents.js","sourceRoot":"","sources":["../../../src/lifecycle/event/delayLifecycleEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,sBAAsB,GAAgC,EAAE,CAAC;AAE/D,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAS;IAClD,8EAA8E;IAC9E,0EAA0E;IAC1E,mEAAmE;IACnE,qFAAqF;IACrF,qCAAqC;IACrC,IAAI,IAAI,KAAK,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAC3C,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LifecycleConstant } from '../../lifecycleConstant.js';
|
|
2
|
+
import { __root } from '../../root.js';
|
|
3
|
+
import { takeGlobalRefPatchMap } from '../../snapshot/ref.js';
|
|
4
|
+
let isJSReady;
|
|
5
|
+
let jsReadyEventIdSwap;
|
|
6
|
+
function jsReady() {
|
|
7
|
+
isJSReady = true;
|
|
8
|
+
__OnLifecycleEvent([
|
|
9
|
+
LifecycleConstant.firstScreen, /* FIRST_SCREEN */
|
|
10
|
+
{
|
|
11
|
+
root: JSON.stringify(__root),
|
|
12
|
+
refPatch: JSON.stringify(takeGlobalRefPatchMap()),
|
|
13
|
+
jsReadyEventIdSwap,
|
|
14
|
+
},
|
|
15
|
+
]);
|
|
16
|
+
jsReadyEventIdSwap = {};
|
|
17
|
+
}
|
|
18
|
+
function clearJSReadyEventIdSwap() {
|
|
19
|
+
jsReadyEventIdSwap = {};
|
|
20
|
+
}
|
|
21
|
+
function resetJSReady() {
|
|
22
|
+
isJSReady = false;
|
|
23
|
+
jsReadyEventIdSwap = {};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export { jsReady, isJSReady, jsReadyEventIdSwap, clearJSReadyEventIdSwap, resetJSReady };
|
|
29
|
+
//# sourceMappingURL=jsReady.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsReady.js","sourceRoot":"","sources":["../../../src/lifecycle/event/jsReady.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,IAAI,SAAkB,CAAC;AACvB,IAAI,kBAA0C,CAAC;AAE/C,SAAS,OAAO;IACd,SAAS,GAAG,IAAI,CAAC;IACjB,kBAAkB,CAAC;QACjB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB;QACjD;YACE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;YACjD,kBAAkB;SACnB;KACF,CAAC,CAAC;IACH,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB;IAC9B,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY;IACnB,SAAS,GAAG,KAAK,CAAC;IAClB,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
// Copyright 2024 The Lynx Authors. All rights reserved.
|
|
2
2
|
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
import { hydrate } from '../hydrate.js';
|
|
5
|
+
import { LifecycleConstant } from '../lifecycleConstant.js';
|
|
6
|
+
import { __pendingListUpdates } from '../list.js';
|
|
4
7
|
import { __root, setRoot } from '../root.js';
|
|
8
|
+
import { takeGlobalRefPatchMap } from '../snapshot/ref.js';
|
|
5
9
|
import { SnapshotInstance, __page, snapshotInstanceManager } from '../snapshot.js';
|
|
6
10
|
import { isEmptyObject } from '../utils.js';
|
|
7
11
|
import { destroyBackground } from './destroy.js';
|
|
12
|
+
import { destroyWorklet } from '../worklet/destroy.js';
|
|
13
|
+
import { clearJSReadyEventIdSwap, isJSReady } from './event/jsReady.js';
|
|
8
14
|
import { increaseReloadVersion } from './pass.js';
|
|
9
|
-
import { renderBackground, renderMainThread } from './render.js';
|
|
10
|
-
import { hydrate } from '../hydrate.js';
|
|
11
|
-
import { LifecycleConstant } from '../lifecycleConstant.js';
|
|
12
|
-
import { __pendingListUpdates } from '../list.js';
|
|
13
|
-
import { takeGlobalRefPatchMap } from '../snapshot/ref.js';
|
|
14
15
|
import { deinitGlobalSnapshotPatch } from './patch/snapshotPatch.js';
|
|
15
|
-
import {
|
|
16
|
+
import { renderBackground, renderMainThread } from './render.js';
|
|
16
17
|
function reloadMainThread(data, options) {
|
|
17
18
|
if (__PROFILE__) {
|
|
18
19
|
console.profile('reloadTemplate');
|
|
@@ -24,6 +25,7 @@ function reloadMainThread(data, options) {
|
|
|
24
25
|
destroyWorklet();
|
|
25
26
|
snapshotInstanceManager.clear();
|
|
26
27
|
__pendingListUpdates.clear();
|
|
28
|
+
clearJSReadyEventIdSwap();
|
|
27
29
|
const oldRoot = __root;
|
|
28
30
|
setRoot(new SnapshotInstance('root'));
|
|
29
31
|
__root.__jsx = oldRoot.__jsx;
|
|
@@ -33,14 +35,16 @@ function reloadMainThread(data, options) {
|
|
|
33
35
|
});
|
|
34
36
|
// always call this before `__FlushElementTree`
|
|
35
37
|
__pendingListUpdates.flush();
|
|
38
|
+
if (isJSReady) {
|
|
39
|
+
__OnLifecycleEvent([
|
|
40
|
+
LifecycleConstant.firstScreen, /* FIRST_SCREEN */
|
|
41
|
+
{
|
|
42
|
+
root: JSON.stringify(__root),
|
|
43
|
+
refPatch: JSON.stringify(takeGlobalRefPatchMap()),
|
|
44
|
+
},
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
36
47
|
__FlushElementTree(__page, options);
|
|
37
|
-
__OnLifecycleEvent([
|
|
38
|
-
LifecycleConstant.firstScreen, /* FIRST_SCREEN */
|
|
39
|
-
{
|
|
40
|
-
root: JSON.stringify(__root),
|
|
41
|
-
refPatch: JSON.stringify(takeGlobalRefPatchMap()),
|
|
42
|
-
},
|
|
43
|
-
]);
|
|
44
48
|
if (__PROFILE__) {
|
|
45
49
|
console.profileEnd();
|
|
46
50
|
}
|
|
@@ -60,5 +64,5 @@ function reloadBackground(updateData) {
|
|
|
60
64
|
console.profileEnd();
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
|
-
export {
|
|
67
|
+
export { reloadBackground, reloadMainThread };
|
|
64
68
|
//# sourceMappingURL=reload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../src/lifecycle/reload.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../src/lifecycle/reload.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,SAAS,gBAAgB,CAAC,IAAS,EAAE,OAAyB;IAC5D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,qBAAqB,EAAE,CAAC;IAExB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,cAAc,EAAE,CAAC;IACjB,uBAAuB,CAAC,KAAK,EAAE,CAAC;IAChC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC7B,uBAAuB,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,gBAAgB,EAAE,CAAC;IACnB,OAAO,CAAC,OAA2B,EAAE,MAA0B,EAAE;QAC/D,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,+CAA+C;IAC/C,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAE7B,IAAI,SAAS,EAAE,CAAC;QACd,kBAAkB,CAAC;YACjB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB;YACjD;gBACE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;IACD,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,CAAC,UAA+B;IACvD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,yBAAyB,EAAE,CAAC;IAE5B,iBAAiB,EAAE,CAAC;IAEpB,qBAAqB,EAAE,CAAC;IAExB,2EAA2E;IAC3E,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEjE,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAa,CAAC,CAAC;IAE9C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
// Copyright 2024 The Lynx Authors. All rights reserved.
|
|
2
2
|
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { render as renderToString } from '../renderToOpcodes/index.js';
|
|
7
|
-
import { LifecycleConstant } from '../lifecycleConstant.js';
|
|
8
|
-
import { takeGlobalRefPatchMap } from '../snapshot/ref.js';
|
|
9
|
-
import { isEmptyObject } from '../utils.js';
|
|
10
|
-
import { __root, setRoot } from '../root.js';
|
|
4
|
+
import { hydrate } from '../hydrate.js';
|
|
5
|
+
import { isJSReady, jsReady, jsReadyEventIdSwap, resetJSReady } from '../lifecycle/event/jsReady.js';
|
|
11
6
|
import { reloadMainThread } from '../lifecycle/reload.js';
|
|
12
7
|
import { renderMainThread } from '../lifecycle/render.js';
|
|
13
|
-
import {
|
|
14
|
-
import { markTiming, PerformanceTimingKeys, setPipeline } from './performance.js';
|
|
8
|
+
import { LifecycleConstant } from '../lifecycleConstant.js';
|
|
15
9
|
import { __pendingListUpdates } from '../list.js';
|
|
16
10
|
import { ssrHydrateByOpcodes } from '../opcodes.js';
|
|
11
|
+
import { __root, setRoot } from '../root.js';
|
|
12
|
+
import { takeGlobalRefPatchMap } from '../snapshot/ref.js';
|
|
13
|
+
import { SnapshotInstance, __page, setupPage } from '../snapshot.js';
|
|
14
|
+
import { isEmptyObject } from '../utils.js';
|
|
15
|
+
import { PerformanceTimingKeys, markTiming, setPipeline } from './performance.js';
|
|
17
16
|
function ssrEncode() {
|
|
18
17
|
const { __opcodes } = __root;
|
|
19
18
|
delete __root.__opcodes;
|
|
@@ -37,6 +36,8 @@ function ssrHydrate(info) {
|
|
|
37
36
|
if (!nativePage) {
|
|
38
37
|
throw new Error('SSR Hydration Failed! Please check if the SSR content loaded successfully!');
|
|
39
38
|
}
|
|
39
|
+
resetJSReady();
|
|
40
|
+
setupPage(nativePage);
|
|
40
41
|
const refsMap = __GetTemplateParts(nativePage);
|
|
41
42
|
const { __opcodes, __root_values } = JSON.parse(info);
|
|
42
43
|
__root_values && __root.setAttribute('values', __root_values);
|
|
@@ -45,10 +46,8 @@ function ssrHydrate(info) {
|
|
|
45
46
|
__root.__element_root = nativePage;
|
|
46
47
|
}
|
|
47
48
|
function injectCalledByNative() {
|
|
48
|
-
if (process.env['NODE_ENV'] !== 'test') {
|
|
49
|
-
|
|
50
|
-
throw new Error('`firstScreenSyncTiming` must be `jsReady` when SSR is enabled');
|
|
51
|
-
}
|
|
49
|
+
if (process.env['NODE_ENV'] !== 'test' && __FIRST_SCREEN_SYNC_TIMING__ !== 'jsReady' && __ENABLE_SSR__) {
|
|
50
|
+
throw new Error('`firstScreenSyncTiming` must be `jsReady` when SSR is enabled');
|
|
52
51
|
}
|
|
53
52
|
const calledByNative = {
|
|
54
53
|
renderPage,
|
|
@@ -67,8 +66,7 @@ function injectCalledByNative() {
|
|
|
67
66
|
}
|
|
68
67
|
function renderPage(data) {
|
|
69
68
|
// reset `jsReady` state
|
|
70
|
-
|
|
71
|
-
jsReadyEventIdSwap = {};
|
|
69
|
+
resetJSReady();
|
|
72
70
|
lynx.__initData = data || {};
|
|
73
71
|
setupPage(__CreatePage('0', 0));
|
|
74
72
|
__root.ensureElements();
|
|
@@ -86,7 +84,6 @@ function updatePage(data, options) {
|
|
|
86
84
|
return;
|
|
87
85
|
}
|
|
88
86
|
if (options?.resetPageData) {
|
|
89
|
-
// @ts-ignore
|
|
90
87
|
lynx.__initData = {};
|
|
91
88
|
}
|
|
92
89
|
if (typeof data == 'object' && !isEmptyObject(data)) {
|
|
@@ -127,20 +124,6 @@ function updateGlobalProps(_data, options) {
|
|
|
127
124
|
__FlushElementTree();
|
|
128
125
|
}
|
|
129
126
|
}
|
|
130
|
-
let isJSReady;
|
|
131
|
-
let jsReadyEventIdSwap;
|
|
132
|
-
function jsReady() {
|
|
133
|
-
__OnLifecycleEvent([
|
|
134
|
-
LifecycleConstant.firstScreen, /* FIRST_SCREEN */
|
|
135
|
-
{
|
|
136
|
-
root: JSON.stringify(__root),
|
|
137
|
-
refPatch: JSON.stringify(takeGlobalRefPatchMap()),
|
|
138
|
-
jsReadyEventIdSwap,
|
|
139
|
-
},
|
|
140
|
-
]);
|
|
141
|
-
isJSReady = true;
|
|
142
|
-
jsReadyEventIdSwap = {};
|
|
143
|
-
}
|
|
144
127
|
/**
|
|
145
128
|
* @internal
|
|
146
129
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calledByNative.js","sourceRoot":"","sources":["../../src/lynx/calledByNative.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"calledByNative.js","sourceRoot":"","sources":["../../src/lynx/calledByNative.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,56 +49,59 @@ export const makeSyncThen = function (result) {
|
|
|
49
49
|
* @returns
|
|
50
50
|
* @public
|
|
51
51
|
*/
|
|
52
|
-
export
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
result
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
export const loadLazyBundle = /*#__PURE__*/ (() => {
|
|
53
|
+
lynx.loadLazyBundle = loadLazyBundle;
|
|
54
|
+
function loadLazyBundle(source) {
|
|
55
|
+
if (__LEPUS__) {
|
|
56
|
+
const query = __QueryComponent(source);
|
|
57
|
+
let result;
|
|
58
|
+
try {
|
|
59
|
+
result = query.evalResult;
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
// Here we cannot return a rejected promise
|
|
63
|
+
// (which will eventually be an unhandled rejection and cause unnecessary redbox)
|
|
64
|
+
// But we still need a object in shape of Promise
|
|
65
|
+
// So we return a Promise which will never resolve or reject,
|
|
66
|
+
// which fit our principle "lepus run only once at first-screen" better
|
|
67
|
+
return new Promise(() => { });
|
|
68
|
+
}
|
|
69
|
+
const r = Promise.resolve(result);
|
|
70
|
+
// Why we should modify the implementation of `then`?
|
|
71
|
+
// We should make it `sync` so lepus first-screen render can use result above instantly
|
|
72
|
+
// We also should keep promise shape
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
r.then = makeSyncThen(result);
|
|
75
|
+
return r;
|
|
66
76
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const { schema } = detail;
|
|
81
|
-
const exports = lynxCoreInject.tt.getDynamicComponentExports(schema);
|
|
82
|
-
// `code === 0` means that the lazy bundle has been successfully parsed. However,
|
|
83
|
-
// its javascript files may still fail to run, which would prevent the retrieval of the exports object.
|
|
84
|
-
if (exports) {
|
|
85
|
-
resolve(exports);
|
|
86
|
-
return;
|
|
77
|
+
else if (__JS__) {
|
|
78
|
+
return new Promise((resolve, reject) => {
|
|
79
|
+
const callback = result => {
|
|
80
|
+
const { code, detail } = result;
|
|
81
|
+
if (code === 0) {
|
|
82
|
+
const { schema } = detail;
|
|
83
|
+
const exports = lynxCoreInject.tt.getDynamicComponentExports(schema);
|
|
84
|
+
// `code === 0` means that the lazy bundle has been successfully parsed. However,
|
|
85
|
+
// its javascript files may still fail to run, which would prevent the retrieval of the exports object.
|
|
86
|
+
if (exports) {
|
|
87
|
+
resolve(exports);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
87
90
|
}
|
|
91
|
+
reject(new Error('Lazy bundle load failed: ' + JSON.stringify(result)));
|
|
92
|
+
};
|
|
93
|
+
if (typeof lynx.QueryComponent === 'function') {
|
|
94
|
+
lynx.QueryComponent(source, callback);
|
|
88
95
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
lynx.getNativeLynx().QueryComponent(source, callback);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
96
|
+
else {
|
|
97
|
+
lynx.getNativeLynx().QueryComponent(source, callback);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
throw new Error('unreachable');
|
|
98
102
|
}
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
lynx.loadLazyBundle = loadLazyBundle;
|
|
103
|
+
return loadLazyBundle;
|
|
104
|
+
})();
|
|
102
105
|
/**
|
|
103
106
|
* @internal
|
|
104
107
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-bundle.js","sourceRoot":"","sources":["../../src/lynx/lazy-bundle.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAY,MAAS;IAC/C,OAAO,UAA2B,GAAc;QAC9C,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC;YACR,IAAI,CAAC;gBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,aAAa;YACb,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,uBAAuB,EAAE,CAAC;gBAClE,aAAa;gBACb,+CAA+C;gBAC/C,IAAI;gBACJ,6DAA6D;gBAC7D,yDAAyD;gBACzD,qCAAqC;gBACrC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAE7B,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;YAC/B,aAAa;YACb,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"lazy-bundle.js","sourceRoot":"","sources":["../../src/lynx/lazy-bundle.ts"],"names":[],"mappings":"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"}
|
package/runtime/lib/lynx/tt.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare function runWithForce(cb: () => void): void;
|
|
2
2
|
declare function injectTt(): void;
|
|
3
|
-
declare let delayedLifecycleEvents: [type: string, data: any][];
|
|
4
3
|
declare function flushDelayedLifecycleEvents(): void;
|
|
5
|
-
export { injectTt, flushDelayedLifecycleEvents
|
|
4
|
+
export { injectTt, flushDelayedLifecycleEvents };
|
package/runtime/lib/lynx/tt.js
CHANGED
|
@@ -6,6 +6,8 @@ import { LifecycleConstant, NativeUpdateDataType } from '../lifecycleConstant.js
|
|
|
6
6
|
import { PerformanceTimingKeys, beginPipeline, markTiming } from './performance.js';
|
|
7
7
|
import { BackgroundSnapshotInstance, hydrate } from '../backgroundSnapshot.js';
|
|
8
8
|
import { destroyBackground } from '../lifecycle/destroy.js';
|
|
9
|
+
import { delayedEvents, delayedPublishEvent } from '../lifecycle/event/delayEvents.js';
|
|
10
|
+
import { delayLifecycleEvent, delayedLifecycleEvents } from '../lifecycle/event/delayLifecycleEvents.js';
|
|
9
11
|
import { commitPatchUpdate, genCommitTaskId, globalCommitTaskMap } from '../lifecycle/patch/commit.js';
|
|
10
12
|
import { reloadBackground } from '../lifecycle/reload.js';
|
|
11
13
|
import { renderBackground } from '../lifecycle/render.js';
|
|
@@ -59,7 +61,7 @@ export function runWithForce(cb) {
|
|
|
59
61
|
function injectTt() {
|
|
60
62
|
// @ts-ignore
|
|
61
63
|
const tt = lynxCoreInject.tt;
|
|
62
|
-
tt.OnLifecycleEvent =
|
|
64
|
+
tt.OnLifecycleEvent = onLifecycleEvent;
|
|
63
65
|
tt.publishEvent = delayedPublishEvent;
|
|
64
66
|
tt.publicComponentEvent = delayedPublicComponentEvent;
|
|
65
67
|
tt.callDestroyLifetimeFun = () => {
|
|
@@ -73,19 +75,28 @@ function injectTt() {
|
|
|
73
75
|
// used to updateTheme, no longer rely on this function
|
|
74
76
|
};
|
|
75
77
|
}
|
|
76
|
-
|
|
77
|
-
async function OnLifecycleEvent([type, data]) {
|
|
78
|
+
function onLifecycleEvent([type, data]) {
|
|
78
79
|
const hasRootRendered = CHILDREN in __root;
|
|
79
80
|
// never called `render(<App/>, __root)`
|
|
80
81
|
// happens if user call `root.render()` async
|
|
81
82
|
if (!hasRootRendered) {
|
|
82
|
-
|
|
83
|
-
delayedLifecycleEvents.push([type, data]);
|
|
83
|
+
delayLifecycleEvent(type, data);
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
86
|
if (__PROFILE__) {
|
|
87
87
|
console.profile(`OnLifecycleEvent::${type}`);
|
|
88
88
|
}
|
|
89
|
+
try {
|
|
90
|
+
void onLifecycleEventImpl(type, data);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
lynx.reportError(e);
|
|
94
|
+
}
|
|
95
|
+
if (__PROFILE__) {
|
|
96
|
+
console.profileEnd();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function onLifecycleEventImpl(type, data) {
|
|
89
100
|
switch (type) {
|
|
90
101
|
case LifecycleConstant.firstScreen: {
|
|
91
102
|
const { root: lepusSide, refPatch, jsReadyEventIdSwap } = data;
|
|
@@ -102,6 +113,8 @@ async function OnLifecycleEvent([type, data]) {
|
|
|
102
113
|
console.profileEnd();
|
|
103
114
|
}
|
|
104
115
|
markTiming(PerformanceTimingKeys.diff_vdom_end);
|
|
116
|
+
// TODO: It seems `delayedEvents` and `delayedLifecycleEvents` should be merged into one array to ensure the proper order of events.
|
|
117
|
+
flushDelayedLifecycleEvents();
|
|
105
118
|
if (delayedEvents) {
|
|
106
119
|
delayedEvents.forEach((args) => {
|
|
107
120
|
const [handlerName, data] = args;
|
|
@@ -163,19 +176,11 @@ async function OnLifecycleEvent([type, data]) {
|
|
|
163
176
|
break;
|
|
164
177
|
}
|
|
165
178
|
}
|
|
166
|
-
if (__PROFILE__) {
|
|
167
|
-
console.profileEnd();
|
|
168
|
-
}
|
|
169
179
|
}
|
|
170
180
|
function flushDelayedLifecycleEvents() {
|
|
171
181
|
if (delayedLifecycleEvents) {
|
|
172
182
|
delayedLifecycleEvents.forEach((e) => {
|
|
173
|
-
|
|
174
|
-
OnLifecycleEvent(e);
|
|
175
|
-
}
|
|
176
|
-
catch (e) {
|
|
177
|
-
lynx.reportError(e);
|
|
178
|
-
}
|
|
183
|
+
onLifecycleEvent(e);
|
|
179
184
|
});
|
|
180
185
|
delayedLifecycleEvents.length = 0;
|
|
181
186
|
}
|
|
@@ -196,11 +201,6 @@ function publishEvent(handlerName, data) {
|
|
|
196
201
|
function publicComponentEvent(_componentId, handlerName, data) {
|
|
197
202
|
publishEvent(handlerName, data);
|
|
198
203
|
}
|
|
199
|
-
let delayedEvents;
|
|
200
|
-
function delayedPublishEvent(handlerName, data) {
|
|
201
|
-
delayedEvents ??= [];
|
|
202
|
-
delayedEvents.push([handlerName, data]);
|
|
203
|
-
}
|
|
204
204
|
function delayedPublicComponentEvent(_componentId, handlerName, data) {
|
|
205
205
|
delayedPublishEvent(handlerName, data);
|
|
206
206
|
}
|
|
@@ -230,5 +230,5 @@ function updateCardData(newData, options) {
|
|
|
230
230
|
lynx.__initData = Object.assign({}, lynx.__initData, restNewData);
|
|
231
231
|
lynxCoreInject.tt.GlobalEventEmitter.emit('onDataChanged');
|
|
232
232
|
}
|
|
233
|
-
export { injectTt, flushDelayedLifecycleEvents
|
|
233
|
+
export { injectTt, flushDelayedLifecycleEvents };
|
|
234
234
|
//# sourceMappingURL=tt.js.map
|