@lynx-js/react 0.105.2 → 0.106.0

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.json +2 -2
  3. package/refresh/.turbo/turbo-build.log +1 -1
  4. package/runtime/lib/lifecycle/destroy.js +2 -2
  5. package/runtime/lib/lifecycle/destroy.js.map +1 -1
  6. package/runtime/lib/lifecycle/patch/commit.d.ts +7 -3
  7. package/runtime/lib/lifecycle/patch/commit.js +59 -27
  8. package/runtime/lib/lifecycle/patch/commit.js.map +1 -1
  9. package/runtime/lib/lifecycle/patch/updateMainThread.js +14 -13
  10. package/runtime/lib/lifecycle/patch/updateMainThread.js.map +1 -1
  11. package/runtime/lib/lifecycle/reload.js +2 -3
  12. package/runtime/lib/lifecycle/reload.js.map +1 -1
  13. package/runtime/lib/lifecycle/render.d.ts +3 -1
  14. package/runtime/lib/lifecycle/render.js +9 -2
  15. package/runtime/lib/lifecycle/render.js.map +1 -1
  16. package/runtime/lib/list.d.ts +3 -0
  17. package/runtime/lib/list.js +10 -2
  18. package/runtime/lib/list.js.map +1 -1
  19. package/runtime/lib/lynx/calledByNative.js +40 -5
  20. package/runtime/lib/lynx/calledByNative.js.map +1 -1
  21. package/runtime/lib/lynx/tt.js +4 -4
  22. package/runtime/lib/lynx/tt.js.map +1 -1
  23. package/runtime/lib/lynx-api.js +2 -2
  24. package/runtime/lib/lynx-api.js.map +1 -1
  25. package/runtime/lib/opcodes.d.ts +6 -0
  26. package/runtime/lib/opcodes.js +70 -0
  27. package/runtime/lib/opcodes.js.map +1 -1
  28. package/runtime/lib/root.d.ts +1 -0
  29. package/runtime/lib/root.js.map +1 -1
  30. package/runtime/src/lifecycle/destroy.ts +2 -3
  31. package/runtime/src/lifecycle/patch/commit.ts +78 -31
  32. package/runtime/src/lifecycle/patch/updateMainThread.ts +18 -16
  33. package/runtime/src/lifecycle/reload.ts +2 -4
  34. package/runtime/src/lifecycle/render.ts +11 -2
  35. package/runtime/src/list.ts +11 -2
  36. package/runtime/src/lynx/calledByNative.ts +47 -4
  37. package/runtime/src/lynx/tt.ts +4 -4
  38. package/runtime/src/lynx-api.ts +2 -2
  39. package/runtime/src/opcodes.ts +90 -0
  40. package/runtime/src/root.ts +1 -1
  41. package/types/react.docs.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tt.js","sourceRoot":"","sources":["../../src/lynx/tt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tt.js","sourceRoot":"","sources":["../../src/lynx/tt.ts"],"names":[],"mappings":"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"}
@@ -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
- render(jsx, __root);
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,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,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,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,MAAM,CAAC,GAAG,EAAE,MAAa,CAAC,CAAC;YAC3B,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"}
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"}
@@ -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 {};
@@ -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;gBACvC,CAAC;gBACD,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEhB,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChB,aAAa;gBACb,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBAE1B,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClC,GAAG,GAAG,CAAE,CAAC;gBAET,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE7B,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,IAAyB,CAAC,CAAC;gBAC1D,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACxB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAEpB,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../src/opcodes.ts"],"names":[],"mappings":"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"}
@@ -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 };
@@ -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,MAAqF,CAAC;AAE1F,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
+ {"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
- render(null, __root as any);
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?: number;
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
- options[COMMIT] = async (vnode: VNode, commitQueue: any[]) => {
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,75 @@ 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
- const commitTask = globalCommitTaskMap.get(commitTaskId);
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 (const patch of patchList.patchList) {
166
+ const commitTask = globalCommitTaskMap.get(patch.id);
125
167
  if (commitTask) {
126
168
  commitTask();
127
- globalCommitTaskMap.delete(commitTaskId);
169
+ globalCommitTaskMap.delete(patch.id);
128
170
  }
129
- };
171
+ }
130
172
  }
131
173
 
132
- function commitPatchUpdate(data: Patch, patchOptions: PatchOptions): Promise<void> {
174
+ function commitPatchUpdate(patchList: PatchList, patchOptions: Omit<PatchOptions, 'reloadVersion'>): Promise<void> {
133
175
  return new Promise(resolve => {
134
176
  // console.debug('********** JS update:');
135
177
  // printSnapshotInstance(
136
178
  // (backgroundSnapshotInstanceManager.values.get(1) || backgroundSnapshotInstanceManager.values.get(-1))!,
137
179
  // );
138
- // console.debug('commitPatchUpdate: ', JSON.stringify(data));
180
+ // console.debug('commitPatchUpdate: ', JSON.stringify(patchList));
181
+ if (__PROFILE__) {
182
+ console.profile('commitChanges');
183
+ }
184
+ markTiming(PerformanceTimingKeys.pack_changes_start);
139
185
  const obj: {
140
186
  data: string;
141
187
  patchOptions: PatchOptions;
142
188
  } = {
143
- data: JSON.stringify(data),
189
+ data: JSON.stringify(patchList),
144
190
  patchOptions: {
145
191
  ...patchOptions,
146
192
  reloadVersion: getReloadVersion(),
@@ -151,10 +197,10 @@ function commitPatchUpdate(data: Patch, patchOptions: PatchOptions): Promise<voi
151
197
  obj.patchOptions.pipelineOptions = globalPipelineOptions;
152
198
  setPipeline(undefined);
153
199
  }
200
+ lynx.getNativeApp().callLepusMethod(LifecycleConstant.patchUpdate, obj, resolve);
154
201
  if (__PROFILE__) {
155
202
  console.profileEnd();
156
203
  }
157
- lynx.getNativeApp().callLepusMethod(LifecycleConstant.patchUpdate, obj, resolve);
158
204
  });
159
205
  }
160
206
 
@@ -166,7 +212,7 @@ function replaceRequestAnimationFrame(): void {
166
212
  // to make afterPaintEffects run faster
167
213
  const resolvedPromise = Promise.resolve();
168
214
  options.requestAnimationFrame = (cb: () => void) => {
169
- resolvedPromise.then(cb);
215
+ void resolvedPromise.then(cb);
170
216
  };
171
217
  }
172
218
 
@@ -175,6 +221,7 @@ function replaceRequestAnimationFrame(): void {
175
221
  */
176
222
  export {
177
223
  commitPatchUpdate,
224
+ commitToMainThread,
178
225
  genCommitTaskId,
179
226
  globalBackgroundSnapshotInstancesToRemove,
180
227
  globalCommitTaskMap,
@@ -183,5 +230,5 @@ export {
183
230
  replaceCommitHook,
184
231
  replaceRequestAnimationFrame,
185
232
  type PatchOptions,
186
- type Patch,
233
+ type PatchList,
187
234
  };
@@ -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 ?? 0) < getReloadVersion()) {
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
- let { snapshotPatch, workletRefInitValuePatch, flushOptions } = JSON.parse(data) as Patch;
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
- commitMainThreadPatchUpdate(patchOptions.commitTaskId);
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 { injectUpdateMainThread, commitMainThreadPatchUpdate };
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
- render(__root.__jsx, __root as any);
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
- // @ts-ignore
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
- export { renderMainThread };
50
+ function renderBackground(vnode: ComponentChild, parent: ContainerNode): void {
51
+ render(vnode, parent);
52
+ void commitToMainThread();
53
+ }
54
+
55
+ export { renderMainThread, renderBackground };
@@ -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 = (
@@ -13,8 +13,51 @@ import { renderMainThread } from '../lifecycle/render.js';
13
13
  import { hydrate } from '../hydrate.js';
14
14
  import { markTiming, PerformanceTimingKeys, setPipeline } from './performance.js';
15
15
  import { __pendingListUpdates } from '../list.js';
16
+ import { ssrHydrateByOpcodes } from '../opcodes.js';
17
+
18
+ function ssrEncode() {
19
+ const { __opcodes } = __root;
20
+ delete __root.__opcodes;
21
+
22
+ const oldToJSON = SnapshotInstance.prototype.toJSON;
23
+ SnapshotInstance.prototype.toJSON = function(this: SnapshotInstance): any {
24
+ return [
25
+ this.type,
26
+ this.__id,
27
+ this.__elements,
28
+ ];
29
+ };
30
+
31
+ try {
32
+ return JSON.stringify({ __opcodes, __root_values: __root.__values });
33
+ } finally {
34
+ SnapshotInstance.prototype.toJSON = oldToJSON;
35
+ }
36
+ }
37
+
38
+ function ssrHydrate(info: string) {
39
+ const nativePage = __GetPageElement();
40
+ if (!nativePage) {
41
+ throw new Error('SSR Hydration Failed! Please check if the SSR content loaded successfully!');
42
+ }
43
+
44
+ const refsMap = __GetTemplateParts(nativePage);
45
+
46
+ const { __opcodes, __root_values } = JSON.parse(info);
47
+ __root_values && __root.setAttribute('values', __root_values);
48
+ ssrHydrateByOpcodes(__opcodes, __root as SnapshotInstance, refsMap);
49
+
50
+ (__root as SnapshotInstance).__elements = [nativePage];
51
+ (__root as SnapshotInstance).__element_root = nativePage;
52
+ }
16
53
 
17
54
  function injectCalledByNative(): void {
55
+ if (process.env['NODE_ENV'] !== 'test') {
56
+ if (__FIRST_SCREEN_SYNC_TIMING__ !== 'jsReady' && __ENABLE_SSR__) {
57
+ throw new Error('`firstScreenSyncTiming` must be `jsReady` when SSR is enabled');
58
+ }
59
+ }
60
+
18
61
  const calledByNative: LynxCallByNative = {
19
62
  renderPage,
20
63
  updatePage,
@@ -23,9 +66,13 @@ function injectCalledByNative(): void {
23
66
  return null;
24
67
  },
25
68
  removeComponents: function(): void {},
69
+ ...(__ENABLE_SSR__ ? { ssrEncode, ssrHydrate } : {}),
26
70
  };
27
71
 
28
72
  Object.assign(globalThis, calledByNative);
73
+ Object.assign(globalThis, {
74
+ [LifecycleConstant.jsReady]: jsReady,
75
+ });
29
76
  }
30
77
 
31
78
  function renderPage(data: any): void {
@@ -46,10 +93,6 @@ function renderPage(data: any): void {
46
93
 
47
94
  if (__FIRST_SCREEN_SYNC_TIMING__ === 'immediately') {
48
95
  jsReady();
49
- } else {
50
- Object.assign(globalThis, {
51
- [LifecycleConstant.jsReady]: jsReady,
52
- });
53
96
  }
54
97
  }
55
98