@lynx-js/react 0.105.2 → 0.106.1
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 +28 -0
- package/package.json +2 -2
- package/refresh/.turbo/turbo-build.log +1 -1
- package/runtime/lib/lifecycle/destroy.js +2 -2
- package/runtime/lib/lifecycle/destroy.js.map +1 -1
- package/runtime/lib/lifecycle/patch/commit.d.ts +7 -3
- package/runtime/lib/lifecycle/patch/commit.js +60 -27
- package/runtime/lib/lifecycle/patch/commit.js.map +1 -1
- package/runtime/lib/lifecycle/patch/updateMainThread.js +14 -13
- package/runtime/lib/lifecycle/patch/updateMainThread.js.map +1 -1
- package/runtime/lib/lifecycle/reload.js +2 -3
- package/runtime/lib/lifecycle/reload.js.map +1 -1
- package/runtime/lib/lifecycle/render.d.ts +3 -1
- package/runtime/lib/lifecycle/render.js +9 -2
- package/runtime/lib/lifecycle/render.js.map +1 -1
- package/runtime/lib/list.d.ts +3 -0
- package/runtime/lib/list.js +10 -2
- package/runtime/lib/list.js.map +1 -1
- package/runtime/lib/lynx/calledByNative.js +40 -5
- package/runtime/lib/lynx/calledByNative.js.map +1 -1
- package/runtime/lib/lynx/tt.js +4 -4
- package/runtime/lib/lynx/tt.js.map +1 -1
- package/runtime/lib/lynx-api.js +2 -2
- package/runtime/lib/lynx-api.js.map +1 -1
- package/runtime/lib/opcodes.d.ts +6 -0
- package/runtime/lib/opcodes.js +70 -0
- package/runtime/lib/opcodes.js.map +1 -1
- package/runtime/lib/root.d.ts +1 -0
- package/runtime/lib/root.js.map +1 -1
- package/runtime/src/lifecycle/destroy.ts +2 -3
- package/runtime/src/lifecycle/patch/commit.ts +79 -31
- package/runtime/src/lifecycle/patch/updateMainThread.ts +18 -16
- package/runtime/src/lifecycle/reload.ts +2 -4
- package/runtime/src/lifecycle/render.ts +11 -2
- package/runtime/src/list.ts +11 -2
- package/runtime/src/lynx/calledByNative.ts +47 -4
- package/runtime/src/lynx/tt.ts +4 -4
- package/runtime/src/lynx-api.ts +2 -2
- package/runtime/src/opcodes.ts +90 -0
- package/runtime/src/root.ts +1 -1
- package/types/react.docs.d.ts +1 -1
package/runtime/lib/lynx/tt.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
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 { options
|
|
4
|
+
import { options } from 'preact';
|
|
5
5
|
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
9
|
import { commitPatchUpdate, genCommitTaskId, globalCommitTaskMap } from '../lifecycle/patch/commit.js';
|
|
10
10
|
import { reloadBackground } from '../lifecycle/reload.js';
|
|
11
|
+
import { renderBackground } from '../lifecycle/render.js';
|
|
11
12
|
import { CHILDREN, COMPONENT, DIFF, DIFFED, FORCE } from '../renderToOpcodes/constants.js';
|
|
12
13
|
import { __root } from '../root.js';
|
|
13
14
|
import { globalRefsToSet, updateBackgroundRefs } from '../snapshot/ref.js';
|
|
@@ -128,14 +129,13 @@ async function OnLifecycleEvent([type, data]) {
|
|
|
128
129
|
if (__PROFILE__) {
|
|
129
130
|
console.profileEnd();
|
|
130
131
|
}
|
|
131
|
-
markTiming(PerformanceTimingKeys.pack_changes_start);
|
|
132
132
|
// console.debug("********** After hydration:");
|
|
133
133
|
// printSnapshotInstance(__root as BackgroundSnapshotInstance);
|
|
134
134
|
if (__PROFILE__) {
|
|
135
135
|
console.profile('commitChanges');
|
|
136
136
|
}
|
|
137
137
|
const commitTaskId = genCommitTaskId();
|
|
138
|
-
await commitPatchUpdate({ snapshotPatch }, {
|
|
138
|
+
await commitPatchUpdate({ patchList: [{ snapshotPatch, id: commitTaskId }] }, { isHydration: true });
|
|
139
139
|
updateBackgroundRefs(commitTaskId);
|
|
140
140
|
globalCommitTaskMap.forEach((commitTask, id) => {
|
|
141
141
|
if (id > commitTaskId) {
|
|
@@ -211,7 +211,7 @@ function updateGlobalProps(newData) {
|
|
|
211
211
|
// This is already done because updateFromRoot will consume all dirty flags marked by
|
|
212
212
|
// the setState, and setState's flush will be a noop. No extra diffs will be needed.
|
|
213
213
|
Promise.resolve().then(() => {
|
|
214
|
-
runWithForce(() =>
|
|
214
|
+
runWithForce(() => renderBackground(__root.__jsx, __root));
|
|
215
215
|
});
|
|
216
216
|
lynxCoreInject.tt.GlobalEventEmitter.emit('onGlobalPropsChanged');
|
|
217
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt.js","sourceRoot":"","sources":["../../src/lynx/tt.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tt.js","sourceRoot":"","sources":["../../src/lynx/tt.ts"],"names":[],"mappings":"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"}
|
package/runtime/lib/lynx-api.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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 { render } from 'preact';
|
|
5
4
|
import { createContext, createElement } from 'preact/compat';
|
|
6
5
|
import { useState } from 'preact/hooks';
|
|
7
6
|
import { factory, withInitDataInState } from './compat/initData.js';
|
|
8
7
|
import { useLynxGlobalEventListener } from './hooks/useLynxGlobalEventListener.js';
|
|
8
|
+
import { renderBackground } from './lifecycle/render.js';
|
|
9
9
|
import { LifecycleConstant } from './lifecycleConstant.js';
|
|
10
10
|
import { flushDelayedLifecycleEvents } from './lynx/tt.js';
|
|
11
11
|
import { __root } from './root.js';
|
|
@@ -25,7 +25,7 @@ export const root = {
|
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
27
|
__root.__jsx = jsx;
|
|
28
|
-
|
|
28
|
+
renderBackground(jsx, __root);
|
|
29
29
|
if (__FIRST_SCREEN_SYNC_TIMING__ === 'immediately') { }
|
|
30
30
|
else {
|
|
31
31
|
lynx.getNativeApp().callLepusMethod(LifecycleConstant.jsReady, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lynx-api.js","sourceRoot":"","sources":["../src/lynx-api.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lynx-api.js","sourceRoot":"","sources":["../src/lynx-api.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AA6DnC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,MAAM,EAAE,CAAC,GAAc,EAAQ,EAAE;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;YACnB,gBAAgB,CAAC,GAAG,EAAE,MAAa,CAAC,CAAC;YACrC,IAAI,4BAA4B,KAAK,aAAa,EAAE,CAAC,CAAA,CAAC;iBACjD,CAAC;gBACJ,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,2BAA2B,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IACD,sBAAsB,EAAE,CAAC,uBAAgD,EAAQ,EAAE;QACjF,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IACvD,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CACvC;IACE,aAAa;IACb,QAAQ;IACR,aAAa;IACb,0BAA0B;CACpB,EACR,YAAY,EACZ,eAAe,CAChB,CAAC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6C,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC/G;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuB,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACzF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,WAAW,GAAmB,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAC3E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiD,eAAe,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAsCvH,OAAO,EAAE,mBAAmB,EAAE,CAAC;AA6J/B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC"}
|
package/runtime/lib/opcodes.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import { SnapshotInstance } from './snapshot.js';
|
|
2
|
+
interface SSRFiberElement {
|
|
3
|
+
ssrID: string;
|
|
4
|
+
}
|
|
5
|
+
export type SSRSnapshotInstance = [string, number, SSRFiberElement[]];
|
|
6
|
+
export declare function ssrHydrateByOpcodes(opcodes: any[], into: SnapshotInstance, refMap?: Record<string, FiberElement>): void;
|
|
2
7
|
export declare function renderOpcodesInto(opcodes: any[], into: SnapshotInstance): void;
|
|
8
|
+
export {};
|
package/runtime/lib/opcodes.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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 { componentAtIndexFactory, enqueueComponentFactory, gRecycleMap, gSignMap } from './list.js';
|
|
4
5
|
import { CHILDREN } from './renderToOpcodes/constants.js';
|
|
5
6
|
import { SnapshotInstance } from './snapshot.js';
|
|
6
7
|
var Opcode;
|
|
@@ -10,6 +11,70 @@ var Opcode;
|
|
|
10
11
|
Opcode[Opcode["Attr"] = 2] = "Attr";
|
|
11
12
|
Opcode[Opcode["Text"] = 3] = "Text";
|
|
12
13
|
})(Opcode || (Opcode = {}));
|
|
14
|
+
export function ssrHydrateByOpcodes(opcodes, into, refMap) {
|
|
15
|
+
let top = into;
|
|
16
|
+
const stack = [into];
|
|
17
|
+
for (let i = 0; i < opcodes.length;) {
|
|
18
|
+
const opcode = opcodes[i];
|
|
19
|
+
switch (opcode) {
|
|
20
|
+
case Opcode.Begin: {
|
|
21
|
+
const p = top;
|
|
22
|
+
const [type, __id, elements] = opcodes[i + 1];
|
|
23
|
+
top = new SnapshotInstance(type, __id);
|
|
24
|
+
top.__pendingElements = elements;
|
|
25
|
+
p.insertBefore(top);
|
|
26
|
+
stack.push(top);
|
|
27
|
+
i += 2;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case Opcode.End: {
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
top[CHILDREN] = undefined;
|
|
33
|
+
top.__elements = top.__pendingElements.map(({ ssrID }) => refMap[ssrID]);
|
|
34
|
+
top.__element_root = top.__elements[0];
|
|
35
|
+
delete top.__pendingElements;
|
|
36
|
+
if (top.__snapshot_def.isListHolder) {
|
|
37
|
+
const listElement = top.__element_root;
|
|
38
|
+
const listElementUniqueID = __GetElementUniqueID(listElement);
|
|
39
|
+
const signMap = gSignMap[listElementUniqueID] = new Map();
|
|
40
|
+
gRecycleMap[listElementUniqueID] = new Map();
|
|
41
|
+
const enqueueFunc = enqueueComponentFactory();
|
|
42
|
+
const componentAtIndex = componentAtIndexFactory(top.childNodes);
|
|
43
|
+
for (const child of top.childNodes) {
|
|
44
|
+
if (child.__element_root) {
|
|
45
|
+
const childElementUniqueID = __GetElementUniqueID(child.__element_root);
|
|
46
|
+
signMap.set(childElementUniqueID, child);
|
|
47
|
+
enqueueFunc(listElement, listElementUniqueID, childElementUniqueID);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
__UpdateListCallbacks(listElement, componentAtIndex, enqueueFunc);
|
|
51
|
+
}
|
|
52
|
+
stack.pop();
|
|
53
|
+
const p = stack[stack.length - 1];
|
|
54
|
+
top = p;
|
|
55
|
+
i += 1;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case Opcode.Attr: {
|
|
59
|
+
const key = opcodes[i + 1];
|
|
60
|
+
const value = opcodes[i + 2];
|
|
61
|
+
top.setAttribute(key, value);
|
|
62
|
+
i += 3;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case Opcode.Text: {
|
|
66
|
+
const [[type, __id, elements], text] = opcodes[i + 1];
|
|
67
|
+
const s = new SnapshotInstance(type, __id);
|
|
68
|
+
s.setAttribute(0, text);
|
|
69
|
+
top.insertBefore(s);
|
|
70
|
+
s.__elements = elements.map(({ ssrID }) => refMap[ssrID]);
|
|
71
|
+
s.__element_root = s.__elements[0];
|
|
72
|
+
i += 2;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
13
78
|
export function renderOpcodesInto(opcodes, into) {
|
|
14
79
|
let top = into;
|
|
15
80
|
const stack = [into];
|
|
@@ -23,6 +88,7 @@ export function renderOpcodesInto(opcodes, into) {
|
|
|
23
88
|
if (top.__parent) {
|
|
24
89
|
// already inserted
|
|
25
90
|
top = new SnapshotInstance(top.type);
|
|
91
|
+
opcodes[i + 1] = top;
|
|
26
92
|
}
|
|
27
93
|
p.insertBefore(top);
|
|
28
94
|
stack.push(top);
|
|
@@ -48,6 +114,10 @@ export function renderOpcodesInto(opcodes, into) {
|
|
|
48
114
|
case Opcode.Text: {
|
|
49
115
|
const text = opcodes[i + 1];
|
|
50
116
|
const s = new SnapshotInstance(null);
|
|
117
|
+
if (__ENABLE_SSR__) {
|
|
118
|
+
// We need store the just created SnapshotInstance, or it will be lost when we leave the function
|
|
119
|
+
opcodes[i + 1] = [s, text];
|
|
120
|
+
}
|
|
51
121
|
s.setAttribute(0, text);
|
|
52
122
|
top.insertBefore(s);
|
|
53
123
|
i += 2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../src/opcodes.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,IAAW,MAKV;AALD,WAAW,MAAM;IACf,qCAAS,CAAA;IACT,iCAAG,CAAA;IACH,mCAAI,CAAA;IACJ,mCAAI,CAAA;AACN,CAAC,EALU,MAAM,KAAN,MAAM,QAKhB;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAc,EAAE,IAAsB;IACtE,IAAI,GAAG,GAAqB,IAAI,CAAC;IACjC,MAAM,KAAK,GAAuB,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,GAAG,CAAC;gBACd,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,aAAa;gBACb,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACjB,mBAAmB;oBACnB,GAAG,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../src/opcodes.ts"],"names":[],"mappings":"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"}
|
package/runtime/lib/root.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { BackgroundSnapshotInstance } from './backgroundSnapshot.js';
|
|
|
2
2
|
import { SnapshotInstance } from './snapshot.js';
|
|
3
3
|
declare let __root: (SnapshotInstance | BackgroundSnapshotInstance) & {
|
|
4
4
|
__jsx?: React.ReactNode;
|
|
5
|
+
__opcodes?: any[];
|
|
5
6
|
};
|
|
6
7
|
declare function setRoot(root: typeof __root): void;
|
|
7
8
|
export { __root, setRoot };
|
package/runtime/lib/root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,IAAI,
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,IAAI,MAAwG,CAAC;AAE7G,SAAS,OAAO,CAAC,IAAmB;IAClC,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,IAAI,SAAS,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,CAAC;KAAM,IAAI,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,IAAI,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1,17 +1,16 @@
|
|
|
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 { render } from 'preact';
|
|
5
|
-
|
|
6
4
|
import { __root } from '../root.js';
|
|
7
5
|
import { globalCommitTaskMap } from './patch/commit.js';
|
|
6
|
+
import { renderBackground } from './render.js';
|
|
8
7
|
|
|
9
8
|
function destroyBackground(): void {
|
|
10
9
|
if (__PROFILE__) {
|
|
11
10
|
console.profile('destroyBackground');
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
renderBackground(null, __root as any);
|
|
15
14
|
|
|
16
15
|
globalCommitTaskMap.forEach(task => {
|
|
17
16
|
task();
|
|
@@ -30,35 +30,56 @@ let nextCommitTaskId = 1;
|
|
|
30
30
|
|
|
31
31
|
let globalBackgroundSnapshotInstancesToRemove: number[] = [];
|
|
32
32
|
|
|
33
|
+
let patchesToCommit: Patch[] = [];
|
|
34
|
+
|
|
33
35
|
interface Patch {
|
|
36
|
+
id: number;
|
|
34
37
|
snapshotPatch?: SnapshotPatch;
|
|
35
38
|
workletRefInitValuePatch?: [id: number, value: unknown][];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface PatchList {
|
|
42
|
+
patchList: Patch[];
|
|
36
43
|
flushOptions?: FlushOptions;
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
interface PatchOptions {
|
|
40
|
-
commitTaskId: number;
|
|
41
47
|
pipelineOptions?: PipelineOptions;
|
|
42
|
-
reloadVersion
|
|
48
|
+
reloadVersion: number;
|
|
43
49
|
isHydration?: boolean;
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
function replaceCommitHook(): void {
|
|
53
|
+
// use our own `options.debounceRendering` to insert a timing flag before render
|
|
54
|
+
type DebounceRendering = (f: () => void) => void;
|
|
55
|
+
const injectDebounceRendering = (debounceRendering: DebounceRendering): DebounceRendering => {
|
|
56
|
+
return (f: () => void) => {
|
|
57
|
+
debounceRendering(() => {
|
|
58
|
+
f();
|
|
59
|
+
void commitToMainThread();
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
const defaultDebounceRendering = options.debounceRendering?.bind(options)
|
|
64
|
+
?? (Promise.prototype.then.bind(Promise.resolve()) as DebounceRendering);
|
|
65
|
+
let _debounceRendering = injectDebounceRendering(defaultDebounceRendering);
|
|
66
|
+
Object.defineProperty(options, 'debounceRendering', {
|
|
67
|
+
get() {
|
|
68
|
+
return _debounceRendering;
|
|
69
|
+
},
|
|
70
|
+
set(debounceRendering: DebounceRendering) {
|
|
71
|
+
_debounceRendering = injectDebounceRendering(debounceRendering);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
|
|
47
75
|
const oldCommit = options[COMMIT];
|
|
48
|
-
|
|
76
|
+
const commit = async (vnode: VNode, commitQueue: any[]) => {
|
|
49
77
|
if (__LEPUS__) {
|
|
50
78
|
// for testing only
|
|
51
79
|
commitQueue.length = 0;
|
|
52
80
|
return;
|
|
53
81
|
}
|
|
54
|
-
|
|
55
|
-
markTimingLegacy(PerformanceTimingKeys.update_diff_vdom_end);
|
|
56
|
-
markTiming(PerformanceTimingKeys.diff_vdom_end);
|
|
57
|
-
markTiming(PerformanceTimingKeys.pack_changes_start);
|
|
58
|
-
if (__PROFILE__) {
|
|
59
|
-
console.profile('commitChanges');
|
|
60
|
-
}
|
|
61
|
-
const renderCallbacks = commitQueue.map(component => {
|
|
82
|
+
const renderCallbacks = commitQueue.map((component: Component<any>) => {
|
|
62
83
|
const ret = {
|
|
63
84
|
component,
|
|
64
85
|
[RENDER_CALLBACKS]: component[RENDER_CALLBACKS],
|
|
@@ -84,7 +105,7 @@ function replaceCommitHook(): void {
|
|
|
84
105
|
cb.call(wrapper.component);
|
|
85
106
|
});
|
|
86
107
|
} catch (e) {
|
|
87
|
-
options[CATCH_ERROR](e, wrapper[VNODE]);
|
|
108
|
+
options[CATCH_ERROR](e, wrapper[VNODE]!);
|
|
88
109
|
}
|
|
89
110
|
});
|
|
90
111
|
if (backgroundSnapshotInstancesToRemove.length) {
|
|
@@ -97,50 +118,76 @@ function replaceCommitHook(): void {
|
|
|
97
118
|
});
|
|
98
119
|
|
|
99
120
|
const snapshotPatch = takeGlobalSnapshotPatch();
|
|
100
|
-
const flushOptions = globalFlushOptions;
|
|
101
121
|
const workletRefInitValuePatch = takeWorkletRefInitValuePatch();
|
|
102
|
-
globalFlushOptions = {};
|
|
103
122
|
if (!snapshotPatch && workletRefInitValuePatch.length === 0) {
|
|
104
123
|
// before hydration, skip patch
|
|
105
|
-
if (__PROFILE__) {
|
|
106
|
-
console.profileEnd();
|
|
107
|
-
}
|
|
108
124
|
return;
|
|
109
125
|
}
|
|
110
126
|
|
|
111
|
-
const patch: Patch = {
|
|
127
|
+
const patch: Patch = {
|
|
128
|
+
id: commitTaskId,
|
|
129
|
+
};
|
|
112
130
|
// TODO: check all fields in `flushOptions` from runtime3
|
|
113
131
|
if (snapshotPatch?.length) {
|
|
114
132
|
patch.snapshotPatch = snapshotPatch;
|
|
115
133
|
}
|
|
116
|
-
if (!isEmptyObject(flushOptions)) {
|
|
117
|
-
patch.flushOptions = flushOptions;
|
|
118
|
-
}
|
|
119
134
|
if (workletRefInitValuePatch.length) {
|
|
120
135
|
patch.workletRefInitValuePatch = workletRefInitValuePatch;
|
|
121
136
|
}
|
|
122
|
-
await commitPatchUpdate(patch, { commitTaskId });
|
|
123
137
|
|
|
124
|
-
|
|
138
|
+
patchesToCommit.push(patch);
|
|
139
|
+
};
|
|
140
|
+
options[COMMIT] = commit as ((...args: Parameters<typeof commit>) => void);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async function commitToMainThread(): Promise<void> {
|
|
144
|
+
if (patchesToCommit.length === 0) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
markTimingLegacy(PerformanceTimingKeys.update_diff_vdom_end);
|
|
149
|
+
markTiming(PerformanceTimingKeys.diff_vdom_end);
|
|
150
|
+
|
|
151
|
+
const flushOptions = globalFlushOptions;
|
|
152
|
+
globalFlushOptions = {};
|
|
153
|
+
|
|
154
|
+
const patchList: PatchList = {
|
|
155
|
+
patchList: patchesToCommit,
|
|
156
|
+
};
|
|
157
|
+
patchesToCommit = [];
|
|
158
|
+
|
|
159
|
+
if (!isEmptyObject(flushOptions)) {
|
|
160
|
+
patchList.flushOptions = flushOptions;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
await commitPatchUpdate(patchList, {});
|
|
164
|
+
|
|
165
|
+
for (let i = 0; i < patchList.patchList.length; i++) {
|
|
166
|
+
const patch = patchList.patchList[i]!;
|
|
167
|
+
const commitTask = globalCommitTaskMap.get(patch.id);
|
|
125
168
|
if (commitTask) {
|
|
126
169
|
commitTask();
|
|
127
|
-
globalCommitTaskMap.delete(
|
|
170
|
+
globalCommitTaskMap.delete(patch.id);
|
|
128
171
|
}
|
|
129
|
-
}
|
|
172
|
+
}
|
|
130
173
|
}
|
|
131
174
|
|
|
132
|
-
function commitPatchUpdate(
|
|
175
|
+
function commitPatchUpdate(patchList: PatchList, patchOptions: Omit<PatchOptions, 'reloadVersion'>): Promise<void> {
|
|
133
176
|
return new Promise(resolve => {
|
|
134
177
|
// console.debug('********** JS update:');
|
|
135
178
|
// printSnapshotInstance(
|
|
136
179
|
// (backgroundSnapshotInstanceManager.values.get(1) || backgroundSnapshotInstanceManager.values.get(-1))!,
|
|
137
180
|
// );
|
|
138
|
-
// console.debug('commitPatchUpdate: ', JSON.stringify(
|
|
181
|
+
// console.debug('commitPatchUpdate: ', JSON.stringify(patchList));
|
|
182
|
+
if (__PROFILE__) {
|
|
183
|
+
console.profile('commitChanges');
|
|
184
|
+
}
|
|
185
|
+
markTiming(PerformanceTimingKeys.pack_changes_start);
|
|
139
186
|
const obj: {
|
|
140
187
|
data: string;
|
|
141
188
|
patchOptions: PatchOptions;
|
|
142
189
|
} = {
|
|
143
|
-
data: JSON.stringify(
|
|
190
|
+
data: JSON.stringify(patchList),
|
|
144
191
|
patchOptions: {
|
|
145
192
|
...patchOptions,
|
|
146
193
|
reloadVersion: getReloadVersion(),
|
|
@@ -151,10 +198,10 @@ function commitPatchUpdate(data: Patch, patchOptions: PatchOptions): Promise<voi
|
|
|
151
198
|
obj.patchOptions.pipelineOptions = globalPipelineOptions;
|
|
152
199
|
setPipeline(undefined);
|
|
153
200
|
}
|
|
201
|
+
lynx.getNativeApp().callLepusMethod(LifecycleConstant.patchUpdate, obj, resolve);
|
|
154
202
|
if (__PROFILE__) {
|
|
155
203
|
console.profileEnd();
|
|
156
204
|
}
|
|
157
|
-
lynx.getNativeApp().callLepusMethod(LifecycleConstant.patchUpdate, obj, resolve);
|
|
158
205
|
});
|
|
159
206
|
}
|
|
160
207
|
|
|
@@ -166,7 +213,7 @@ function replaceRequestAnimationFrame(): void {
|
|
|
166
213
|
// to make afterPaintEffects run faster
|
|
167
214
|
const resolvedPromise = Promise.resolve();
|
|
168
215
|
options.requestAnimationFrame = (cb: () => void) => {
|
|
169
|
-
resolvedPromise.then(cb);
|
|
216
|
+
void resolvedPromise.then(cb);
|
|
170
217
|
};
|
|
171
218
|
}
|
|
172
219
|
|
|
@@ -175,6 +222,7 @@ function replaceRequestAnimationFrame(): void {
|
|
|
175
222
|
*/
|
|
176
223
|
export {
|
|
177
224
|
commitPatchUpdate,
|
|
225
|
+
commitToMainThread,
|
|
178
226
|
genCommitTaskId,
|
|
179
227
|
globalBackgroundSnapshotInstancesToRemove,
|
|
180
228
|
globalCommitTaskMap,
|
|
@@ -183,5 +231,5 @@ export {
|
|
|
183
231
|
replaceCommitHook,
|
|
184
232
|
replaceRequestAnimationFrame,
|
|
185
233
|
type PatchOptions,
|
|
186
|
-
type
|
|
234
|
+
type PatchList,
|
|
187
235
|
};
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { clearDelayedWorklets, updateWorkletRefInitValueChanges } from '@lynx-js/react/worklet-runtime/bindings';
|
|
6
6
|
|
|
7
|
+
import type { PatchList, PatchOptions } from './commit.js';
|
|
7
8
|
import { snapshotPatchApply } from './snapshotPatchApply.js';
|
|
8
9
|
import { LifecycleConstant } from '../../lifecycleConstant.js';
|
|
9
10
|
import { __pendingListUpdates } from '../../list.js';
|
|
@@ -12,7 +13,6 @@ import { takeGlobalRefPatchMap } from '../../snapshot/ref.js';
|
|
|
12
13
|
import { __page } from '../../snapshot.js';
|
|
13
14
|
import { isEmptyObject } from '../../utils.js';
|
|
14
15
|
import { getReloadVersion } from '../pass.js';
|
|
15
|
-
import type { Patch, PatchOptions } from './commit.js';
|
|
16
16
|
|
|
17
17
|
function updateMainThread(
|
|
18
18
|
{ data, patchOptions }: {
|
|
@@ -20,31 +20,33 @@ function updateMainThread(
|
|
|
20
20
|
patchOptions: PatchOptions;
|
|
21
21
|
},
|
|
22
22
|
): void {
|
|
23
|
-
if ((patchOptions.reloadVersion
|
|
23
|
+
if ((patchOptions.reloadVersion) < getReloadVersion()) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
setPipeline(patchOptions.pipelineOptions);
|
|
28
28
|
markTiming(PerformanceTimingKeys.parse_changes_start);
|
|
29
|
-
|
|
30
|
-
markTiming(PerformanceTimingKeys.parse_changes_end);
|
|
29
|
+
const { patchList, flushOptions = {} } = JSON.parse(data) as PatchList;
|
|
31
30
|
|
|
31
|
+
markTiming(PerformanceTimingKeys.parse_changes_end);
|
|
32
32
|
markTiming(PerformanceTimingKeys.patch_changes_start);
|
|
33
|
-
updateWorkletRefInitValueChanges(workletRefInitValuePatch);
|
|
34
|
-
__pendingListUpdates.clear();
|
|
35
|
-
if (snapshotPatch) {
|
|
36
|
-
snapshotPatchApply(snapshotPatch);
|
|
37
|
-
}
|
|
38
|
-
__pendingListUpdates.flush();
|
|
39
|
-
// console.debug('********** Lepus updatePatch:');
|
|
40
|
-
// printSnapshotInstance(snapshotInstanceManager.values.get(-1)!);
|
|
41
33
|
|
|
42
|
-
|
|
34
|
+
for (const { snapshotPatch, workletRefInitValuePatch, id } of patchList) {
|
|
35
|
+
updateWorkletRefInitValueChanges(workletRefInitValuePatch);
|
|
36
|
+
__pendingListUpdates.clear();
|
|
37
|
+
if (snapshotPatch) {
|
|
38
|
+
snapshotPatchApply(snapshotPatch);
|
|
39
|
+
}
|
|
40
|
+
__pendingListUpdates.flush();
|
|
41
|
+
// console.debug('********** Lepus updatePatch:');
|
|
42
|
+
// printSnapshotInstance(snapshotInstanceManager.values.get(-1)!);
|
|
43
|
+
|
|
44
|
+
commitMainThreadPatchUpdate(id);
|
|
45
|
+
}
|
|
46
|
+
markTiming(PerformanceTimingKeys.patch_changes_end);
|
|
43
47
|
if (patchOptions.isHydration) {
|
|
44
48
|
clearDelayedWorklets();
|
|
45
49
|
}
|
|
46
|
-
markTiming(PerformanceTimingKeys.patch_changes_end);
|
|
47
|
-
flushOptions ||= {};
|
|
48
50
|
if (patchOptions.pipelineOptions) {
|
|
49
51
|
flushOptions.pipelineOptions = patchOptions.pipelineOptions;
|
|
50
52
|
}
|
|
@@ -66,4 +68,4 @@ function commitMainThreadPatchUpdate(commitTaskId?: number): void {
|
|
|
66
68
|
/**
|
|
67
69
|
* @internal
|
|
68
70
|
*/
|
|
69
|
-
export {
|
|
71
|
+
export { commitMainThreadPatchUpdate, injectUpdateMainThread };
|
|
@@ -1,14 +1,12 @@
|
|
|
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 { render } from 'preact';
|
|
5
|
-
|
|
6
4
|
import { __root, setRoot } from '../root.js';
|
|
7
5
|
import { SnapshotInstance, __page, snapshotInstanceManager } from '../snapshot.js';
|
|
8
6
|
import { isEmptyObject } from '../utils.js';
|
|
9
7
|
import { destroyBackground } from './destroy.js';
|
|
10
8
|
import { increaseReloadVersion } from './pass.js';
|
|
11
|
-
import { renderMainThread } from './render.js';
|
|
9
|
+
import { renderBackground, renderMainThread } from './render.js';
|
|
12
10
|
import { hydrate } from '../hydrate.js';
|
|
13
11
|
import { LifecycleConstant } from '../lifecycleConstant.js';
|
|
14
12
|
import { __pendingListUpdates } from '../list.js';
|
|
@@ -71,7 +69,7 @@ function reloadBackground(updateData: Record<string, any>): void {
|
|
|
71
69
|
// COW when modify `lynx.__initData` to make sure Provider & Consumer works
|
|
72
70
|
lynx.__initData = Object.assign({}, lynx.__initData, updateData);
|
|
73
71
|
|
|
74
|
-
|
|
72
|
+
renderBackground(__root.__jsx, __root as any);
|
|
75
73
|
|
|
76
74
|
if (__PROFILE__) {
|
|
77
75
|
console.profileEnd();
|
|
@@ -2,11 +2,12 @@
|
|
|
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 { render } from 'preact';
|
|
5
|
+
import type { ComponentChild, ContainerNode } from 'preact';
|
|
5
6
|
|
|
6
7
|
import { renderOpcodesInto } from '../opcodes.js';
|
|
7
8
|
import { render as renderToString } from '../renderToOpcodes/index.js';
|
|
8
9
|
import { __root } from '../root.js';
|
|
9
|
-
|
|
10
|
+
import { commitToMainThread } from './patch/commit.js';
|
|
10
11
|
|
|
11
12
|
function renderMainThread(): void {
|
|
12
13
|
/* v8 ignore start */
|
|
@@ -36,6 +37,9 @@ function renderMainThread(): void {
|
|
|
36
37
|
console.profile('renderOpcodesInto');
|
|
37
38
|
}
|
|
38
39
|
renderOpcodesInto(opcodes, __root as any);
|
|
40
|
+
if (__ENABLE_SSR__) {
|
|
41
|
+
__root.__opcodes = opcodes;
|
|
42
|
+
}
|
|
39
43
|
if (__PROFILE__) {
|
|
40
44
|
console.profileEnd();
|
|
41
45
|
}
|
|
@@ -43,4 +47,9 @@ function renderMainThread(): void {
|
|
|
43
47
|
/* v8 ignore stop */
|
|
44
48
|
}
|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
function renderBackground(vnode: ComponentChild, parent: ContainerNode): void {
|
|
51
|
+
render(vnode, parent);
|
|
52
|
+
void commitToMainThread();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { renderMainThread, renderBackground };
|
package/runtime/src/list.ts
CHANGED
|
@@ -223,8 +223,17 @@ export const __pendingListUpdates = {
|
|
|
223
223
|
},
|
|
224
224
|
};
|
|
225
225
|
|
|
226
|
-
const gSignMap: Record<number, Map<number, SnapshotInstance>> = {};
|
|
227
|
-
const gRecycleMap: Record<number, Map<string, Map<number, SnapshotInstance>>> = {};
|
|
226
|
+
export const gSignMap: Record<number, Map<number, SnapshotInstance>> = {};
|
|
227
|
+
export const gRecycleMap: Record<number, Map<string, Map<number, SnapshotInstance>>> = {};
|
|
228
|
+
|
|
229
|
+
export function clearListGlobal(): void {
|
|
230
|
+
for (const key in gSignMap) {
|
|
231
|
+
delete gSignMap[key];
|
|
232
|
+
}
|
|
233
|
+
for (const key in gRecycleMap) {
|
|
234
|
+
delete gRecycleMap[key];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
228
237
|
|
|
229
238
|
export function componentAtIndexFactory(ctx: SnapshotInstance[]): ComponentAtIndexCallback {
|
|
230
239
|
const componentAtIndex = (
|