@lynx-js/react 0.121.1 → 0.121.2

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 (139) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/package.json +4 -4
  3. package/runtime/lazy/element-template-import.js +73 -0
  4. package/runtime/lazy/import.js +4 -0
  5. package/runtime/lazy/target.js +23 -0
  6. package/runtime/lib/{snapshot/legacy-react-runtime/index.d.ts → core/compat/legacy-react-runtime.d.ts} +4 -4
  7. package/runtime/lib/{snapshot/legacy-react-runtime/index.js → core/compat/legacy-react-runtime.js} +6 -6
  8. package/runtime/lib/core/compat/legacy-react-runtime.js.map +1 -0
  9. package/runtime/lib/{snapshot → core}/compat/lynxComponent.d.ts +2 -1
  10. package/runtime/lib/{snapshot → core}/compat/lynxComponent.js +11 -5
  11. package/runtime/lib/core/compat/lynxComponent.js.map +1 -0
  12. package/runtime/lib/core/component.d.ts +2 -0
  13. package/runtime/lib/{snapshot/lynx → core}/component.js +37 -31
  14. package/runtime/lib/core/component.js.map +1 -0
  15. package/runtime/lib/{snapshot/lynx/dynamic-js.js → core/lynx/dynamic-import.js} +1 -1
  16. package/runtime/lib/core/lynx/dynamic-import.js.map +1 -0
  17. package/runtime/lib/core/lynx/lazy-bundle.js.map +1 -0
  18. package/runtime/lib/core/lynx/runtime-backend.d.ts +5 -0
  19. package/runtime/lib/core/lynx/runtime-backend.js +20 -0
  20. package/runtime/lib/core/lynx/runtime-backend.js.map +1 -0
  21. package/runtime/lib/core/performance.d.ts +30 -0
  22. package/runtime/lib/core/performance.js +145 -0
  23. package/runtime/lib/core/performance.js.map +1 -0
  24. package/runtime/lib/element-template/background/commit-hook.js +2 -2
  25. package/runtime/lib/element-template/background/commit-hook.js.map +1 -1
  26. package/runtime/lib/element-template/background/document.js +7 -1
  27. package/runtime/lib/element-template/background/document.js.map +1 -1
  28. package/runtime/lib/element-template/background/hydrate.d.ts +2 -3
  29. package/runtime/lib/element-template/background/hydrate.js +211 -55
  30. package/runtime/lib/element-template/background/hydrate.js.map +1 -1
  31. package/runtime/lib/element-template/background/hydration-listener.js +6 -25
  32. package/runtime/lib/element-template/background/hydration-listener.js.map +1 -1
  33. package/runtime/lib/element-template/background/instance.d.ts +30 -3
  34. package/runtime/lib/element-template/background/instance.js +209 -28
  35. package/runtime/lib/element-template/background/instance.js.map +1 -1
  36. package/runtime/lib/element-template/debug/alog.d.ts +14 -0
  37. package/runtime/lib/element-template/debug/alog.js +23 -0
  38. package/runtime/lib/element-template/debug/alog.js.map +1 -1
  39. package/runtime/lib/element-template/debug/elementPAPICall.js +1 -0
  40. package/runtime/lib/element-template/debug/elementPAPICall.js.map +1 -1
  41. package/runtime/lib/element-template/index.d.ts +3 -2
  42. package/runtime/lib/element-template/index.js +6 -7
  43. package/runtime/lib/element-template/index.js.map +1 -1
  44. package/runtime/lib/element-template/internal.d.ts +4 -0
  45. package/runtime/lib/element-template/internal.js +4 -4
  46. package/runtime/lib/element-template/internal.js.map +1 -1
  47. package/runtime/lib/element-template/lynx/performance.d.ts +0 -21
  48. package/runtime/lib/element-template/lynx/performance.js +4 -121
  49. package/runtime/lib/element-template/lynx/performance.js.map +1 -1
  50. package/runtime/lib/element-template/native/index.js +1 -1
  51. package/runtime/lib/element-template/native/index.js.map +1 -1
  52. package/runtime/lib/element-template/native/main-thread-api.js +1 -1
  53. package/runtime/lib/element-template/native/main-thread-api.js.map +1 -1
  54. package/runtime/lib/element-template/native/mts-destroy.js +2 -0
  55. package/runtime/lib/element-template/native/mts-destroy.js.map +1 -1
  56. package/runtime/lib/element-template/native/patch-listener.js +1 -1
  57. package/runtime/lib/element-template/native/patch-listener.js.map +1 -1
  58. package/runtime/lib/element-template/native/reload-background.d.ts +1 -0
  59. package/runtime/lib/element-template/native/{reload.js → reload-background.js} +1 -26
  60. package/runtime/lib/element-template/native/reload-background.js.map +1 -0
  61. package/runtime/lib/element-template/native/{reload.d.ts → reload-main-thread.d.ts} +0 -1
  62. package/runtime/lib/element-template/native/reload-main-thread.js +35 -0
  63. package/runtime/lib/element-template/native/reload-main-thread.js.map +1 -0
  64. package/runtime/lib/element-template/protocol/opcodes.d.ts +3 -0
  65. package/runtime/lib/element-template/protocol/opcodes.js +3 -0
  66. package/runtime/lib/element-template/protocol/opcodes.js.map +1 -1
  67. package/runtime/lib/element-template/protocol/template-type.d.ts +6 -0
  68. package/runtime/lib/element-template/protocol/template-type.js +20 -0
  69. package/runtime/lib/element-template/protocol/template-type.js.map +1 -0
  70. package/runtime/lib/element-template/protocol/types.d.ts +33 -13
  71. package/runtime/lib/element-template/runtime/list/list.d.ts +65 -0
  72. package/runtime/lib/element-template/runtime/list/list.js +587 -0
  73. package/runtime/lib/element-template/runtime/list/list.js.map +1 -0
  74. package/runtime/lib/element-template/runtime/patch.js +177 -74
  75. package/runtime/lib/element-template/runtime/patch.js.map +1 -1
  76. package/runtime/lib/element-template/runtime/render/render-main-thread.js +13 -0
  77. package/runtime/lib/element-template/runtime/render/render-main-thread.js.map +1 -1
  78. package/runtime/lib/element-template/runtime/render/render-opcodes.js +80 -43
  79. package/runtime/lib/element-template/runtime/render/render-opcodes.js.map +1 -1
  80. package/runtime/lib/element-template/runtime/render/render-to-opcodes.js +32 -1
  81. package/runtime/lib/element-template/runtime/render/render-to-opcodes.js.map +1 -1
  82. package/runtime/lib/element-template/runtime/template/handle.d.ts +3 -2
  83. package/runtime/lib/element-template/runtime/template/handle.js +5 -0
  84. package/runtime/lib/element-template/runtime/template/handle.js.map +1 -1
  85. package/runtime/lib/element-template/runtime/template/registry.d.ts +2 -0
  86. package/runtime/lib/element-template/runtime/template/registry.js +5 -0
  87. package/runtime/lib/element-template/runtime/template/registry.js.map +1 -1
  88. package/runtime/lib/element-template/runtime-backend-marker.js +6 -0
  89. package/runtime/lib/element-template/runtime-backend-marker.js.map +1 -0
  90. package/runtime/lib/index.d.ts +1 -1
  91. package/runtime/lib/index.js +3 -1
  92. package/runtime/lib/index.js.map +1 -1
  93. package/runtime/lib/internal.d.ts +4 -3
  94. package/runtime/lib/internal.js +5 -4
  95. package/runtime/lib/internal.js.map +1 -1
  96. package/runtime/lib/runtime-backend-marker.d.ts +1 -0
  97. package/runtime/lib/runtime-backend-marker.js +6 -0
  98. package/runtime/lib/runtime-backend-marker.js.map +1 -0
  99. package/runtime/lib/snapshot/lifecycle/patch/commit.js +1 -1
  100. package/runtime/lib/snapshot/lifecycle/patch/commit.js.map +1 -1
  101. package/runtime/lib/snapshot/lifecycle/patch/updateMainThread.js +1 -1
  102. package/runtime/lib/snapshot/lifecycle/patch/updateMainThread.js.map +1 -1
  103. package/runtime/lib/snapshot/lynx/calledByNative.js +1 -1
  104. package/runtime/lib/snapshot/lynx/calledByNative.js.map +1 -1
  105. package/runtime/lib/snapshot/lynx/performance.d.ts +0 -21
  106. package/runtime/lib/snapshot/lynx/performance.js +7 -121
  107. package/runtime/lib/snapshot/lynx/performance.js.map +1 -1
  108. package/runtime/lib/snapshot/lynx/tt.js +1 -1
  109. package/runtime/lib/snapshot/lynx/tt.js.map +1 -1
  110. package/runtime/lib/snapshot/snapshot/backgroundSnapshot.js +1 -1
  111. package/runtime/lib/snapshot/snapshot/backgroundSnapshot.js.map +1 -1
  112. package/runtime/lib/snapshot/snapshot/snapshot.js +1 -1
  113. package/runtime/lib/snapshot/snapshot/snapshot.js.map +1 -1
  114. package/runtime/lib/tsconfig.tsbuildinfo +1 -1
  115. package/runtime/worklet-runtime/dev.js +1 -2
  116. package/runtime/worklet-runtime/main.js +1 -1
  117. package/testing-library/dist/{rslib-runtime.js → 0~rslib-runtime.js} +14 -13
  118. package/testing-library/dist/env/vitest.js +1 -1
  119. package/testing-library/dist/plugins/index.js +1 -1
  120. package/testing-library/dist/pure.js +18 -18
  121. package/testing-library/dist/rstest-config.js +2 -4
  122. package/testing-library/dist/setupFiles/common/bootstrap.js +1 -0
  123. package/testing-library/dist/setupFiles/common/runtime-setup.js +1 -1
  124. package/testing-library/dist/setupFiles/inner/rstest.js +2 -1
  125. package/testing-library/dist/setupFiles/inner/vitest.js +2 -1
  126. package/testing-library/dist/type-entry/index.js +1 -0
  127. package/transform/dist/wasm.cjs +113 -40
  128. package/runtime/lib/element-template/native/reload.js.map +0 -1
  129. package/runtime/lib/snapshot/compat/lynxComponent.js.map +0 -1
  130. package/runtime/lib/snapshot/legacy-react-runtime/index.js.map +0 -1
  131. package/runtime/lib/snapshot/lynx/component.js.map +0 -1
  132. package/runtime/lib/snapshot/lynx/dynamic-js.js.map +0 -1
  133. package/runtime/lib/snapshot/lynx/lazy-bundle.js.map +0 -1
  134. package/testing-library/dist/881.js +0 -1
  135. /package/runtime/lib/{snapshot/lynx/dynamic-js.d.ts → core/lynx/dynamic-import.d.ts} +0 -0
  136. /package/runtime/lib/{snapshot → core}/lynx/lazy-bundle.d.ts +0 -0
  137. /package/runtime/lib/{snapshot → core}/lynx/lazy-bundle.js +0 -0
  138. /package/runtime/lib/{snapshot/lynx/component.d.ts → element-template/runtime-backend-marker.d.ts} +0 -0
  139. /package/testing-library/dist/{0~123.js → 0~@rstest/adapter-rsbuild.js} +0 -0
@@ -1,6 +1,7 @@
1
1
  // Copyright 2026 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 { composeElementTemplateListAttributes, createElementTemplateListStateFromItems, flushInitialElementTemplateListUpdates, flushPendingElementTemplateListUpdates, insertElementTemplateListItem, markElementTemplateListDestroyed, registerElementTemplateListState, removeElementTemplateListItem, updateElementTemplateListAttributes, updateElementTemplateListItem, } from './list/list.js';
4
5
  import { elementTemplateRegistry } from './template/registry.js';
5
6
  import { ElementTemplateUpdateOps } from '../protocol/opcodes.js';
6
7
  export function applyElementTemplateUpdateCommands(stream) {
@@ -22,10 +23,10 @@ export function applyElementTemplateUpdateCommands(stream) {
22
23
  }
23
24
  }
24
25
  const resolvedElementSlots = resolveElementSlots(elementSlots);
25
- if (__DEV__ && resolvedElementSlots.hasError) {
26
+ if (resolvedElementSlots === undefined) {
26
27
  continue;
27
28
  }
28
- const nativeRef = __CreateElementTemplate(templateKey, bundleUrl, normalizeAttributeSlots(attributeSlots), resolvedElementSlots.value, handleId);
29
+ const nativeRef = __CreateElementTemplate(templateKey, bundleUrl, normalizeAttributeSlots(attributeSlots), resolvedElementSlots, handleId);
29
30
  if (nativeRef) {
30
31
  elementTemplateRegistry.set(handleId, nativeRef);
31
32
  }
@@ -35,10 +36,17 @@ export function applyElementTemplateUpdateCommands(stream) {
35
36
  const targetId = stream[i++];
36
37
  const attrSlotIndex = stream[i++];
37
38
  const value = stream[i++];
38
- const nativeRef = resolveHandle(targetId, 'target');
39
+ const nativeRef = resolveTargetHandle(targetId, 'target');
39
40
  if (!nativeRef) {
40
41
  continue;
41
42
  }
43
+ if (attrSlotIndex === 0) {
44
+ const listAttributes = updateElementTemplateListAttributes(targetId, value);
45
+ if (listAttributes) {
46
+ __SetAttributeOfElementTemplate(nativeRef, attrSlotIndex, listAttributes, null);
47
+ break;
48
+ }
49
+ }
42
50
  __SetAttributeOfElementTemplate(nativeRef, attrSlotIndex, value, null);
43
51
  break;
44
52
  }
@@ -48,6 +56,7 @@ export function applyElementTemplateUpdateCommands(stream) {
48
56
  const attributes = stream[i++];
49
57
  const elementSlots = stream[i++];
50
58
  const options = stream[i++];
59
+ const isTypedList = type === 'list';
51
60
  if (__DEV__) {
52
61
  const createError = validateCreateHandleId(handleId);
53
62
  if (createError) {
@@ -55,28 +64,91 @@ export function applyElementTemplateUpdateCommands(stream) {
55
64
  continue;
56
65
  }
57
66
  }
58
- const resolvedElementSlots = resolveElementSlots(elementSlots);
59
- const resolvedOptions = resolveRuntimeOptions(options);
60
- if ((__DEV__ && resolvedElementSlots.hasError) || resolvedOptions.hasError) {
67
+ if (__DEV__ && elementSlots != null && !Array.isArray(elementSlots)) {
68
+ lynx.reportError(new Error('ElementTemplate update create elementSlots must be an array, null, or undefined.'));
69
+ continue;
70
+ }
71
+ if (__DEV__
72
+ && isTypedList
73
+ && !isTypedListElementSlotsEmpty(elementSlots)) {
74
+ lynx.reportError(new Error('ElementTemplate typed list create must keep logical children in options.listChildren.'));
75
+ continue;
76
+ }
77
+ const resolvedElementSlots = isTypedList ? null : resolveElementSlots(elementSlots);
78
+ if (resolvedElementSlots === undefined) {
61
79
  continue;
62
80
  }
63
- const nativeRef = __CreateTypedElementTemplate(type, attributes, resolvedElementSlots.value, handleId, resolvedOptions.value);
81
+ let resolvedListItems = null;
82
+ let nativeOptions;
83
+ if (isTypedList) {
84
+ const listChildren = getTypedListChildren(options);
85
+ if (__DEV__ && !Array.isArray(listChildren)) {
86
+ lynx.reportError(new Error('ElementTemplate typed list create must keep logical children in options.listChildren.'));
87
+ continue;
88
+ }
89
+ resolvedListItems = resolveTypedListItems(listChildren);
90
+ if (resolvedListItems === null) {
91
+ continue;
92
+ }
93
+ nativeOptions = resolveTypedListOptions(options, resolvedListItems);
94
+ }
95
+ else {
96
+ nativeOptions = options;
97
+ }
98
+ const listState = resolvedListItems
99
+ ? createElementTemplateListStateFromItems(resolvedListItems, attributes)
100
+ : null;
101
+ const typedAttributes = listState
102
+ ? composeElementTemplateListAttributes(undefined, listState)
103
+ : attributes;
104
+ const nativeRef = __CreateTypedElementTemplate(type, typedAttributes, isTypedList ? null : resolvedElementSlots, handleId, nativeOptions);
64
105
  if (nativeRef) {
65
106
  elementTemplateRegistry.set(handleId, nativeRef);
107
+ if (listState) {
108
+ registerElementTemplateListState(handleId, listState, true, nativeRef);
109
+ }
66
110
  }
67
111
  break;
68
112
  }
113
+ case ElementTemplateUpdateOps.insertTypedListItem: {
114
+ const listId = stream[i++];
115
+ const item = stream[i++];
116
+ const beforeId = stream[i++];
117
+ const resolvedItem = resolveTypedListItem(item, 'typed list insert item');
118
+ if (resolvedItem === null) {
119
+ continue;
120
+ }
121
+ insertElementTemplateListItem(listId, resolvedItem, beforeId);
122
+ break;
123
+ }
124
+ case ElementTemplateUpdateOps.removeTypedListItem: {
125
+ const listId = stream[i++];
126
+ const itemId = stream[i++];
127
+ const removedSubtreeHandleIds = stream[i++];
128
+ removeElementTemplateListItem(listId, itemId, removedSubtreeHandleIds);
129
+ break;
130
+ }
131
+ case ElementTemplateUpdateOps.updateTypedListItem: {
132
+ const listId = stream[i++];
133
+ const item = stream[i++];
134
+ const resolvedItem = resolveTypedListItem(item, 'typed list update item');
135
+ if (resolvedItem === null) {
136
+ continue;
137
+ }
138
+ updateElementTemplateListItem(listId, resolvedItem);
139
+ break;
140
+ }
69
141
  case ElementTemplateUpdateOps.insertNode: {
70
142
  const targetId = stream[i++];
71
143
  const elementSlotIndex = stream[i++];
72
144
  const childId = stream[i++];
73
145
  const referenceId = stream[i++];
74
- const nativeRef = resolveHandle(targetId, 'target');
75
- const childRef = resolveHandle(childId, 'child');
146
+ const nativeRef = resolveTargetHandle(targetId, 'target');
147
+ const childRef = resolveTargetHandle(childId, 'child');
76
148
  if (!nativeRef || !childRef) {
77
149
  continue;
78
150
  }
79
- const referenceRef = referenceId === 0 ? null : resolveHandle(referenceId, 'reference');
151
+ const referenceRef = referenceId === 0 ? null : resolveTargetHandle(referenceId, 'reference');
80
152
  if (referenceId !== 0 && !referenceRef) {
81
153
  continue;
82
154
  }
@@ -88,92 +160,123 @@ export function applyElementTemplateUpdateCommands(stream) {
88
160
  const elementSlotIndex = stream[i++];
89
161
  const childId = stream[i++];
90
162
  const removedSubtreeHandleIds = stream[i++];
91
- const nativeRef = resolveHandle(targetId, 'target');
92
- const childRef = resolveHandle(childId, 'child');
163
+ const nativeRef = resolveTargetHandle(targetId, 'target');
164
+ const childRef = resolveTargetHandle(childId, 'child');
93
165
  if (!nativeRef || !childRef) {
94
166
  continue;
95
167
  }
96
168
  __RemoveNodeFromElementTemplate(nativeRef, elementSlotIndex, childRef);
97
- // The native API only detaches from the slot. Releasing ET runtime's
98
- // strong refs after a successful detach lets JS GC reclaim the subtree.
99
- for (const handleId of removedSubtreeHandleIds) {
100
- elementTemplateRegistry.delete(handleId);
101
- }
169
+ releaseRemovedSubtreeHandles(removedSubtreeHandleIds);
102
170
  break;
103
171
  }
104
172
  default: {
105
- lynx.reportError(new Error(`ElementTemplate update opcode ${String(op)} is not supported.`));
173
+ if (__DEV__) {
174
+ lynx.reportError(new Error(`ElementTemplate update opcode ${String(op)} is not supported.`));
175
+ }
106
176
  }
107
177
  }
108
178
  }
179
+ flushPendingListUpdates();
180
+ }
181
+ function flushPendingListUpdates() {
182
+ applyListFlushResults(flushPendingElementTemplateListUpdates());
183
+ applyListFlushResults(flushInitialElementTemplateListUpdates());
184
+ }
185
+ function applyListFlushResults(results) {
186
+ for (let index = 0; index < results.length; index += 1) {
187
+ const result = results[index];
188
+ const listRef = resolveTargetHandle(result.uid, 'typed list');
189
+ if (!listRef) {
190
+ continue;
191
+ }
192
+ __SetAttributeOfElementTemplate(listRef, 0, result.attributes, null);
193
+ if (result.removedSubtreeHandleIds) {
194
+ releaseRemovedSubtreeHandles(result.removedSubtreeHandleIds);
195
+ }
196
+ }
197
+ }
198
+ function releaseRemovedSubtreeHandles(removedSubtreeHandleIds) {
199
+ for (const handleId of removedSubtreeHandleIds) {
200
+ const pendingRemovedSubtreeHandleIds = markElementTemplateListDestroyed(handleId);
201
+ elementTemplateRegistry.delete(handleId);
202
+ if (pendingRemovedSubtreeHandleIds) {
203
+ releaseRemovedSubtreeHandles(pendingRemovedSubtreeHandleIds);
204
+ }
205
+ }
109
206
  }
110
207
  function resolveElementSlots(elementSlots) {
111
- if (!Array.isArray(elementSlots)) {
112
- return { hasError: false, value: null };
208
+ if (elementSlots == null) {
209
+ return null;
113
210
  }
114
211
  let hasError = false;
115
- const value = elementSlots.map((children, slotIndex) => {
116
- if (!Array.isArray(children)) {
117
- if (__DEV__) {
118
- lynx.reportError(new Error(`ElementTemplate create slot ${slotIndex} must be an array of child handles.`));
119
- hasError = true;
120
- }
121
- return [];
212
+ const value = [];
213
+ for (let slotIndex = 0; slotIndex < elementSlots.length; slotIndex += 1) {
214
+ const children = elementSlots[slotIndex];
215
+ if (children == null) {
216
+ continue;
217
+ }
218
+ if (__DEV__ && !Array.isArray(children)) {
219
+ lynx.reportError(new Error(`ElementTemplate create slot ${slotIndex} must be an array of child handles, null, or undefined.`));
220
+ hasError = true;
221
+ continue;
122
222
  }
123
- return children
124
- .map((childId) => {
125
- const childRef = __DEV__
126
- ? resolveHandle(childId, 'child')
127
- : (elementTemplateRegistry.get(childId) ?? null);
128
- if (__DEV__ && childRef === null) {
223
+ const resolvedChildren = [];
224
+ for (let childIndex = 0; childIndex < children.length; childIndex += 1) {
225
+ const childId = children[childIndex];
226
+ const childRef = resolveTargetHandle(childId, 'child');
227
+ if (childRef === null) {
129
228
  hasError = true;
229
+ continue;
130
230
  }
131
- return childRef;
132
- })
133
- .filter((childRef) => childRef !== null);
134
- });
135
- return { hasError, value };
136
- }
137
- function resolveRuntimeOptions(options) {
138
- if (options == null) {
139
- return { hasError: false, value: options };
140
- }
141
- const listChildren = options.listChildren;
142
- if (!Array.isArray(listChildren)) {
143
- return { hasError: false, value: options };
144
- }
145
- const resolvedListChildren = [];
146
- for (let index = 0; index < listChildren.length; index++) {
147
- const child = listChildren[index];
148
- if (child == null
149
- || typeof child !== 'object'
150
- || !('__etHandleRef' in child)
151
- || !Number.isInteger(child.__etHandleRef)) {
152
- lynx.reportError(new Error(`ElementTemplate update options.listChildren[${index}] must contain a valid __etHandleRef.`));
153
- return {
154
- hasError: true,
155
- value: null,
156
- };
231
+ resolvedChildren.push(childRef);
157
232
  }
158
- const ref = resolveHandle(child.__etHandleRef, `options.listChildren[${index}]`);
159
- if (ref === null) {
160
- return {
161
- hasError: true,
162
- value: null,
163
- };
233
+ value[slotIndex] = resolvedChildren;
234
+ }
235
+ if (hasError) {
236
+ return undefined;
237
+ }
238
+ return value;
239
+ }
240
+ function resolveTypedListOptions(options, items) {
241
+ return {
242
+ ...options,
243
+ listChildren: items.map(item => item.ref),
244
+ };
245
+ }
246
+ function getTypedListChildren(options) {
247
+ return (__DEV__ ? options?.listChildren : options.listChildren);
248
+ }
249
+ function resolveTypedListItems(items) {
250
+ const resolvedItems = [];
251
+ for (let index = 0; index < items.length; index += 1) {
252
+ const resolvedItem = resolveTypedListItem(items[index], `typed list item ${index}`);
253
+ if (resolvedItem === null) {
254
+ return null;
164
255
  }
165
- resolvedListChildren.push(ref);
256
+ resolvedItems.push(resolvedItem);
257
+ }
258
+ return resolvedItems;
259
+ }
260
+ function resolveTypedListItem(item, role) {
261
+ const ref = resolveTargetHandle(item.__etHandleRef, role);
262
+ if (ref === null) {
263
+ return null;
166
264
  }
167
265
  return {
168
- hasError: false,
169
- value: ({
170
- ...options,
171
- listChildren: resolvedListChildren,
172
- }),
266
+ uid: item.__etHandleRef,
267
+ ref,
268
+ templateKey: item.type,
269
+ platformInfo: item.platformInfo,
173
270
  };
174
271
  }
175
- function resolveHandle(id, role) {
176
- const nativeRef = elementTemplateRegistry.get(id);
272
+ function isTypedListElementSlotsEmpty(elementSlots) {
273
+ if (!Array.isArray(elementSlots)) {
274
+ return true;
275
+ }
276
+ return elementSlots.every(slot => slot == null || (Array.isArray(slot) && slot.length === 0));
277
+ }
278
+ function resolveTargetHandle(id, role) {
279
+ const nativeRef = elementTemplateRegistry.getTarget(id);
177
280
  if (!nativeRef) {
178
281
  lynx.reportError(new Error(`ElementTemplate update ${role} handle ${id} not found.`));
179
282
  return null;
@@ -206,7 +309,7 @@ function validateCreateTemplatePayload(handleId, attributeSlots, elementSlots) {
206
309
  return null;
207
310
  }
208
311
  function normalizeAttributeSlots(attributeSlots) {
209
- if (!Array.isArray(attributeSlots)) {
312
+ if (attributeSlots == null) {
210
313
  return attributeSlots;
211
314
  }
212
315
  return attributeSlots.map((value) => (value === undefined ? null : value));
@@ -1 +1 @@
1
- {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/element-template/runtime/patch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/element-template/runtime/patch.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAE1D,OAAO,EACL,oCAAoC,EACpC,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,6BAA6B,EAC7B,gCAAgC,EAChC,gCAAgC,EAChC,6BAA6B,EAC7B,mCAAmC,EACnC,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAgBlE,MAAM,UAAU,kCAAkC,CAChD,MAA0C;IAE1C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAA4B,CAAC;QAElD,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,CAA8B,CAAC;gBAC3D,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,EAAE,CAA2C,CAAC;gBAC7E,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,EAAE,CAAyD,CAAC;gBAEzF,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,WAAW,GAAG,6BAA6B,CAC/C,QAAQ,EACR,cAAc,EACd,YAAY,CACb,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;wBAC9B,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBAC/D,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;oBACvC,SAAS;gBACX,CAAC;gBAED,MAAM,SAAS,GAAG,uBAAuB,CACvC,WAAW,EACX,SAAS,EACT,uBAAuB,CAAC,cAAc,CAAC,EACvC,oBAAoB,EACpB,QAAQ,CACT,CAAC;gBAEF,IAAI,SAAS,EAAE,CAAC;oBACd,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE,CAA6B,CAAC;gBACtD,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,cAAc,GAAG,mCAAmC,CACxD,QAAQ,EACR,KAA6C,CAC9C,CAAC;oBACF,IAAI,cAAc,EAAE,CAAC;wBACnB,+BAA+B,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;wBAChF,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,+BAA+B,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACvE,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACnC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,EAAE,CAAqD,CAAC;gBACnF,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,EAAE,CAAyD,CAAC;gBACzF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,CAA6C,CAAC;gBACxE,MAAM,WAAW,GAAG,IAAI,KAAK,MAAM,CAAC;gBAEpC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;oBACrD,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;wBAC9B,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpE,IAAI,CAAC,WAAW,CACd,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAC9F,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IACE,OAAO;uBACJ,WAAW;uBACX,CAAC,4BAA4B,CAAC,YAAY,CAAC,EAC9C,CAAC;oBACD,IAAI,CAAC,WAAW,CACd,IAAI,KAAK,CAAC,uFAAuF,CAAC,CACnG,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACpF,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,IAAI,iBAAiB,GAA8B,IAAI,CAAC;gBACxD,IAAI,aAAgD,CAAC;gBACrD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBACnD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC5C,IAAI,CAAC,WAAW,CACd,IAAI,KAAK,CAAC,uFAAuF,CAAC,CACnG,CAAC;wBACF,SAAS;oBACX,CAAC;oBACD,iBAAiB,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;oBACxD,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAC/B,SAAS;oBACX,CAAC;oBACD,aAAa,GAAG,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,OAA4C,CAAC;gBAC/D,CAAC;gBACD,MAAM,SAAS,GAAG,iBAAiB;oBACjC,CAAC,CAAC,uCAAuC,CACvC,iBAAiB,EACjB,UAAU,CACX;oBACD,CAAC,CAAC,IAAI,CAAC;gBACT,MAAM,eAAe,GAAG,SAAS;oBAC/B,CAAC,CAAC,oCAAoC,CACpC,SAAS,EACT,SAAS,CACV;oBACD,CAAC,CAAC,UAAU,CAAC;gBAEf,MAAM,SAAS,GAAG,4BAA4B,CAC5C,IAAI,EACJ,eAAe,EACf,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAqB,EAC1C,QAAQ,EACR,aAAa,CACd,CAAC;gBAEF,IAAI,SAAS,EAAE,CAAC;oBACd,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACjD,IAAI,SAAS,EAAE,CAAC;wBACd,gCAAgC,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAA+B,CAAC;gBACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;gBAC1E,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,6BAA6B,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAC9D,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACrC,MAAM,uBAAuB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAa,CAAC;gBACxD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;gBACvE,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAA+B,CAAC;gBACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;gBAC1E,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,6BAA6B,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBACpD,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACtC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBAC1C,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,MAAM,YAAY,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAC9F,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,6BAA6B,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACnF,MAAM;YACR,CAAC;YAED,KAAK,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,CAAW,CAAC;gBACtC,MAAM,uBAAuB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAa,CAAC;gBACxD,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,+BAA+B,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACvE,4BAA4B,CAAC,uBAAuB,CAAC,CAAC;gBACtD,MAAM;YACR,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC/F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,uBAAuB,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,uBAAuB;IAC9B,qBAAqB,CAAC,sCAAsC,EAAE,CAAC,CAAC;IAChE,qBAAqB,CAAC,sCAAsC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA4B;IACzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,+BAA+B,CAC7B,OAAO,EACP,CAAC,EACD,MAAM,CAAC,UAAU,EACjB,IAAI,CACL,CAAC;QACF,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACnC,4BAA4B,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,uBAAiC;IAEjC,KAAK,MAAM,QAAQ,IAAI,uBAAuB,EAAE,CAAC;QAC/C,MAAM,8BAA8B,GAAG,gCAAgC,CAAC,QAAQ,CAAC,CAAC;QAClF,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,8BAA8B,EAAE,CAAC;YACnC,4BAA4B,CAAC,8BAA8B,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAAkE;IAElE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,CACd,IAAI,KAAK,CAAC,+BAA+B,SAAS,yDAAyD,CAAC,CAC7G,CAAC;YACF,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,gBAAgB,GAAiB,EAAE,CAAC;QAC1C,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC;IACtC,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAiD,EACjD,KAAyB;IAEzB,OAAO;QACL,GAAG,OAAQ;QACX,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAiD;IAEjD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAQ,CAAC,YAAa,CAAE,CAAC;AACrE,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAmC;IAEnC,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAE,EAAE,mBAAmB,KAAK,EAAE,CAAC,CAAC;QACrF,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAgC,EAChC,IAAY;IAEZ,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,aAAa;QACvB,GAAG;QACH,WAAW,EAAE,IAAI,CAAC,IAAI;QACtB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,YAAkE;IACtG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAU,EAAE,IAAY;IACnD,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,0BAA0B,IAAI,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,KAAK,CAAC,sDAAsD,QAAQ,GAAG,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CACpC,QAAgB,EAChB,cAAsD,EACtD,YAAkE;IAElE,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,cAAc,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAC9B,cAAsD;IAEtD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC"}
@@ -9,8 +9,10 @@ import { render as renderToString } from './render-to-opcodes.js';
9
9
  import { getReloadVersion } from '../../../core/reload-version.js';
10
10
  import { profileEnd, profileStart } from '../../debug/profile.js';
11
11
  import { ElementTemplateLifecycleConstant } from '../../protocol/lifecycle-constant.js';
12
+ import { flushInitialElementTemplateListUpdates } from '../list/list.js';
12
13
  import { insertRootIntoPage, removeRootFromPage } from '../page/page.js';
13
14
  import { __root } from '../page/root-instance.js';
15
+ import { getElementTemplateNativeRef } from '../template/registry.js';
14
16
  // ET reload reuses the native page, so the main-thread render path owns the
15
17
  // root refs it appended and can remove only those roots before rebuilding.
16
18
  let mainThreadRootRefs = [];
@@ -43,6 +45,7 @@ function renderMainThread() {
43
45
  for (const rootRef of rootRefs) {
44
46
  insertRootIntoPage(rootRef);
45
47
  }
48
+ flushInitialListUpdates();
46
49
  mainThreadRootRefs = rootRefs;
47
50
  }
48
51
  finally {
@@ -67,5 +70,15 @@ function renderMainThread() {
67
70
  profileEnd();
68
71
  }
69
72
  }
73
+ function flushInitialListUpdates() {
74
+ const results = flushInitialElementTemplateListUpdates();
75
+ for (let index = 0; index < results.length; index += 1) {
76
+ const result = results[index];
77
+ const listRef = getElementTemplateNativeRef(result.uid);
78
+ if (listRef) {
79
+ __SetAttributeOfElementTemplate(listRef, 0, result.attributes, null);
80
+ }
81
+ }
82
+ }
70
83
  export { removeMainThreadRootRefs, renderMainThread, resetMainThreadRootRefs };
71
84
  //# sourceMappingURL=render-main-thread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-main-thread.js","sourceRoot":"","sources":["../../../../src/element-template/runtime/render/render-main-thread.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAE1D;;GAEG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,4EAA4E;AAC5E,2EAA2E;AAC3E,IAAI,kBAAkB,GAAiB,EAAE,CAAC;AAE1C,SAAS,uBAAuB;IAC9B,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC;IACpC,kBAAkB,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,OAAO,CAAC;IACZ,YAAY,CAAC,6BAA6B,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,WAAW,CAAC,CAAU,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;IAED,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,kBAAkB,GAAG,QAAQ,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;IAED,YAAY,CAAC,qCAAqC,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,OAAO,GAAwC;YACnD,SAAS;YACT,aAAa,EAAE,gBAAgB,EAAE;SAClC,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC;YAChC,IAAI,EAAE,gCAAgC,CAAC,OAAO;YAC9C,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"render-main-thread.js","sourceRoot":"","sources":["../../../../src/element-template/runtime/render/render-main-thread.ts"],"names":[],"mappings":"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"}
@@ -2,86 +2,110 @@
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 { __OpAttr, __OpBegin, __OpEnd, __OpSlot, __OpText } from './render-to-opcodes.js';
5
+ import { parseElementTemplateType } from '../../protocol/template-type.js';
6
+ import { composeElementTemplateListAttributes, createElementTemplateListState, registerElementTemplateListItem, registerElementTemplateListState, } from '../list/list.js';
5
7
  import { __etAttrPlanMap } from '../template/attr-slot-plan.js';
6
- import { createElementTemplateWithReservedHandle, reserveElementTemplateId } from '../template/handle.js';
8
+ import { createElementTemplateWithReservedHandle, createTypedElementTemplateWithReservedHandle, reserveElementTemplateId, } from '../template/handle.js';
7
9
  const BUILTIN_RAW_TEXT_TEMPLATE_KEY = '_et_builtin_raw_text';
8
- function appendChildToParent(parentTemplateKey, parentActiveElementSlot, rootRefs, elementRef) {
9
- /* v8 ignore start -- stackTop is always rooted with `null`, never `undefined`. */
10
- if (parentTemplateKey === undefined) {
11
- return;
12
- }
13
- /* v8 ignore end */
10
+ const TYPED_LIST_HOST_TYPE = 'list';
11
+ const EMPTY_LIST_ITEM_UIDS = [];
12
+ function appendChildToParent(parentTemplateKey, parentActiveElementSlot, parentListItemUids, rootRefs, elementRef, uid) {
14
13
  if (parentTemplateKey === null) {
15
14
  rootRefs.push(elementRef);
16
15
  return;
17
16
  }
18
- if (!parentActiveElementSlot) {
17
+ if (__DEV__ && !parentActiveElementSlot) {
19
18
  throw new Error(`Template '${parentTemplateKey}' received a child outside of any element slot.`);
20
19
  }
21
20
  parentActiveElementSlot.push(elementRef);
21
+ parentListItemUids?.push(uid);
22
22
  }
23
23
  export function renderOpcodesIntoElementTemplate(opcodes) {
24
24
  const rootRefs = [];
25
- const templateKeyStack = [null];
25
+ const typeStack = [null];
26
26
  const attributeSlotsStack = [undefined];
27
+ const typedAttributesStack = [undefined];
27
28
  const elementSlotsStack = [undefined];
29
+ const listItemUidsStack = [undefined];
28
30
  const activeElementSlotStack = [undefined];
31
+ const activeListItemUidsStack = [undefined];
32
+ const listItemPlatformInfoStack = [undefined];
33
+ const deferredListItemMarkerStack = [false];
29
34
  let stackTop = 0;
30
35
  for (let i = 0; i < opcodes.length;) {
31
36
  const opcode = opcodes[i];
32
37
  switch (opcode) {
33
38
  case __OpBegin: {
34
39
  const vnode = opcodes[i + 1];
40
+ const props = vnode.props;
35
41
  stackTop += 1;
36
- templateKeyStack[stackTop] = vnode.type;
42
+ typeStack[stackTop] = vnode.type;
37
43
  attributeSlotsStack[stackTop] = undefined;
44
+ typedAttributesStack[stackTop] = undefined;
38
45
  elementSlotsStack[stackTop] = undefined;
46
+ listItemUidsStack[stackTop] = undefined;
39
47
  activeElementSlotStack[stackTop] = undefined;
48
+ activeListItemUidsStack[stackTop] = undefined;
49
+ listItemPlatformInfoStack[stackTop] = props?.['__listItemPlatformInfo'];
50
+ deferredListItemMarkerStack[stackTop] = props?.['isReady'] !== undefined;
40
51
  i += 2;
41
52
  break;
42
53
  }
43
54
  case __OpEnd: {
44
- if (stackTop === 0) {
55
+ if (__DEV__ && stackTop === 0) {
45
56
  throw new Error('Instruction mismatch: Popped root frame at __OpEnd');
46
57
  }
47
- const templateKey = templateKeyStack[stackTop];
58
+ const type = typeStack[stackTop];
48
59
  const attributeSlots = attributeSlotsStack[stackTop];
60
+ const typedAttributes = typedAttributesStack[stackTop];
49
61
  const elementSlots = elementSlotsStack[stackTop];
62
+ const listItemUids = listItemUidsStack[stackTop];
63
+ const listItemPlatformInfo = listItemPlatformInfoStack[stackTop];
64
+ const deferredListItemMarker = deferredListItemMarkerStack[stackTop];
50
65
  stackTop -= 1;
51
- // If templateKey is null, it means we popped the root frame?
52
- // But __OpEnd should pair with __OpBegin.
53
- // The Root frame is manually pushed and has no __OpBegin.
54
- // So we should never pop the Root frame via __OpEnd unless there's an extra End.
55
- if (templateKey === null) {
56
- // This should effectively not happen if opcodes are balanced?
57
- // Actually, if we are at root, and opcode has __OpEnd, it implies we are closing a component.
58
- // The structure is: Root -> [Begin ... End] -> Root.
59
- // Wait, if opcodes list ends, loop finishes.
60
- // __OpEnd corresponds to a component.
61
- // So if we pop, we must get a valid component frame.
62
- /* v8 ignore start -- the synthetic root frame cannot be popped by balanced opcodes. */
63
- throw new Error('Instruction mismatch: Popped root frame at __OpEnd');
64
- /* v8 ignore end */
65
- }
66
- const concreteTemplateKey = templateKey;
67
- const parentTemplateKey = templateKeyStack[stackTop];
66
+ const concreteType = type;
67
+ const parentTemplateKey = stackTop === 0 ? null : typeStack[stackTop];
68
68
  const parentActiveElementSlot = activeElementSlotStack[stackTop];
69
- const attrPlan = __etAttrPlanMap[concreteTemplateKey];
70
- const handleId = reserveElementTemplateId();
71
- let elementRef;
72
- if (attrPlan === undefined) {
73
- elementRef = createElementTemplateWithReservedHandle(handleId, concreteTemplateKey, null, attributeSlots ?? null, elementSlots ?? null);
69
+ const parentListItemUids = activeListItemUidsStack[stackTop];
70
+ if (concreteType === TYPED_LIST_HOST_TYPE) {
71
+ const listChildren = elementSlots?.[0] ?? [];
72
+ const listState = createElementTemplateListState(listItemUids ?? EMPTY_LIST_ITEM_UIDS, typedAttributes ?? null);
73
+ const attrsWithCallbacks = composeElementTemplateListAttributes(undefined, listState);
74
+ const handleId = reserveElementTemplateId();
75
+ const elementRef = createTypedElementTemplateWithReservedHandle(handleId, TYPED_LIST_HOST_TYPE, attrsWithCallbacks, null, { listChildren });
76
+ registerElementTemplateListState(handleId, listState, true, elementRef);
77
+ appendChildToParent(parentTemplateKey, parentActiveElementSlot, parentListItemUids, rootRefs, elementRef, handleId);
78
+ i += 1;
79
+ break;
74
80
  }
75
- else {
76
- const preparedAttributeSlots = attributeSlots?.slice() ?? [];
81
+ if (__DEV__ && parentTemplateKey === TYPED_LIST_HOST_TYPE) {
82
+ if (deferredListItemMarker) {
83
+ throw new Error('Element Template typed list does not support deferred list items.');
84
+ }
85
+ if (listItemPlatformInfo === undefined) {
86
+ throw new Error('Element Template typed list received a non-list-item root in logical slot $0.');
87
+ }
88
+ }
89
+ const attrPlan = __etAttrPlanMap[concreteType];
90
+ const handleId = reserveElementTemplateId();
91
+ let preparedAttributeSlots = attributeSlots ?? null;
92
+ if (attrPlan !== undefined) {
93
+ preparedAttributeSlots = attributeSlots?.slice() ?? [];
77
94
  for (let planIndex = 0; planIndex < attrPlan.length; planIndex += 2) {
78
95
  const attrSlotIndex = attrPlan[planIndex];
79
96
  const adapter = attrPlan[planIndex + 1];
80
97
  preparedAttributeSlots[attrSlotIndex] = adapter(handleId, attrSlotIndex, preparedAttributeSlots[attrSlotIndex]);
81
98
  }
82
- elementRef = createElementTemplateWithReservedHandle(handleId, concreteTemplateKey, null, preparedAttributeSlots, elementSlots ?? null);
83
99
  }
84
- appendChildToParent(parentTemplateKey, parentActiveElementSlot, rootRefs, elementRef);
100
+ const nativeTemplate = parseElementTemplateType(concreteType);
101
+ const elementRef = createElementTemplateWithReservedHandle(handleId, nativeTemplate.templateKey, nativeTemplate.bundleUrl, preparedAttributeSlots, elementSlots ?? null);
102
+ if (listItemPlatformInfo !== undefined) {
103
+ registerElementTemplateListItem(handleId, elementRef, {
104
+ templateKey: concreteType,
105
+ platformInfo: listItemPlatformInfo,
106
+ });
107
+ }
108
+ appendChildToParent(parentTemplateKey, parentActiveElementSlot, parentListItemUids, rootRefs, elementRef, handleId);
85
109
  i += 1;
86
110
  break;
87
111
  }
@@ -91,28 +115,44 @@ export function renderOpcodesIntoElementTemplate(opcodes) {
91
115
  if (name === 'attributeSlots') {
92
116
  attributeSlotsStack[stackTop] = value;
93
117
  }
118
+ else if (name === 'typedAttributes') {
119
+ typedAttributesStack[stackTop] = value;
120
+ }
94
121
  i += 3;
95
122
  break;
96
123
  }
97
124
  case __OpSlot: {
98
125
  const slotId = opcodes[i + 1];
126
+ if (__DEV__ && typeStack[stackTop] === TYPED_LIST_HOST_TYPE && slotId !== 0) {
127
+ throw new Error('Element Template typed list only supports logical slot $0.');
128
+ }
99
129
  const elementSlots = elementSlotsStack[stackTop] ?? (elementSlotsStack[stackTop] = []);
100
130
  const activeElementSlot = elementSlots[slotId] = [];
101
131
  activeElementSlotStack[stackTop] = activeElementSlot;
132
+ if (typeStack[stackTop] === TYPED_LIST_HOST_TYPE && slotId === 0) {
133
+ const activeListItemUids = listItemUidsStack[stackTop] = [];
134
+ activeListItemUidsStack[stackTop] = activeListItemUids;
135
+ }
136
+ else {
137
+ activeListItemUidsStack[stackTop] = undefined;
138
+ }
102
139
  i += 2;
103
140
  break;
104
141
  }
105
142
  case __OpText: {
106
143
  const text = opcodes[i + 1];
144
+ const parentTemplateKey = stackTop === 0 ? null : typeStack[stackTop];
145
+ if (__DEV__ && parentTemplateKey === TYPED_LIST_HOST_TYPE) {
146
+ throw new Error('Element Template typed list received text logical child.');
147
+ }
107
148
  const handleId = reserveElementTemplateId();
108
149
  const textRef = createElementTemplateWithReservedHandle(handleId, BUILTIN_RAW_TEXT_TEMPLATE_KEY, null, [String(text)], []);
109
- const parentTemplateKey = templateKeyStack[stackTop];
110
150
  if (parentTemplateKey === null) {
111
151
  rootRefs.push(textRef);
112
152
  }
113
153
  else {
114
154
  const activeElementSlot = activeElementSlotStack[stackTop];
115
- if (!activeElementSlot) {
155
+ if (__DEV__ && !activeElementSlot) {
116
156
  throw new Error(`Template '${parentTemplateKey}' received a text child outside of any element slot.`);
117
157
  }
118
158
  activeElementSlot.push(textRef);
@@ -121,9 +161,6 @@ export function renderOpcodesIntoElementTemplate(opcodes) {
121
161
  break;
122
162
  }
123
163
  default:
124
- // Unknown opcode, maybe skip? or throw?
125
- // renderToString loop increments manually.
126
- // If we hit here, something is desync.
127
164
  throw new Error(`Unknown opcode: ${opcode}`);
128
165
  }
129
166
  }