j-templates 7.0.78 → 7.0.80

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/Node/vNode.js CHANGED
@@ -182,22 +182,28 @@ function CreateChildrenScope(vnode, children, data = DefaultData) {
182
182
  return Store_1.ObservableScope.Create(WrapChildren(vnode.injector, children, data));
183
183
  }
184
184
  function WrapChildren(injector, children, data) {
185
- let nodeArray = [];
185
+ let nodeArray;
186
186
  return function () {
187
- const nextData = ToArray(data());
187
+ const nextData = data === DefaultData ? data() : ToArray(data());
188
188
  switch (nextData.length) {
189
189
  case 0: {
190
- for (let x = 0; x < nodeArray.length; x++) {
191
- vNode.DestroyAll(nodeArray[x][1]);
192
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
190
+ if (nodeArray !== undefined) {
191
+ for (let x = 0; x < nodeArray.length; x++) {
192
+ vNode.DestroyAll(nodeArray[x][1]);
193
+ Store_1.ObservableScope.Destroy(nodeArray[x][2]);
194
+ }
195
+ nodeArray = [];
193
196
  }
194
- nodeArray.splice(0);
197
+ break;
195
198
  }
196
199
  default: {
197
- if (nodeArray.length < 21)
200
+ if (nodeArray === undefined)
201
+ nodeArray = InitializeNextNodes(injector, children, nextData);
202
+ else if (nodeArray.length < 11)
198
203
  nodeArray = EvaluateNextNodesSmall(injector, children, nextData, nodeArray);
199
204
  else
200
205
  nodeArray = EvaluateNextNodesLarge(injector, children, nextData, nodeArray);
206
+ break;
201
207
  }
202
208
  }
203
209
  return nodeArray;
@@ -210,54 +216,61 @@ function ToArray(result) {
210
216
  return result;
211
217
  return [result];
212
218
  }
213
- function EvaluateNextNodesSmall(injector, getNextChildren, nextData, nodeArray) {
214
- if (nextData === DEFAULT_DATA) {
215
- const nextChildren = injector_1.Injector.Scope(injector, getNextChildren, nextData[0]);
216
- const children = CreateNodeArray(nextChildren);
217
- for (let x = 0; x < nodeArray.length; x++) {
218
- vNode.DestroyAll(nodeArray[x][1]);
219
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
220
- }
221
- return [
222
- [undefined, children, null],
223
- ];
224
- }
219
+ function GetNextNodeRow(data, injector, getNextChildren, scope) {
220
+ scope ??=
221
+ data === undefined
222
+ ? null
223
+ : Store_1.ObservableScope.Create(function () {
224
+ const children = injector_1.Injector.Scope(injector, getNextChildren, data);
225
+ return CreateNodeArray(children);
226
+ });
227
+ const children = scope === null
228
+ ? CreateNodeArray(injector_1.Injector.Scope(injector, getNextChildren, undefined))
229
+ : Store_1.ObservableScope.Value(scope);
230
+ return [data, children, scope];
231
+ }
232
+ function InitializeNextNodes(injector, getNextChildren, nextData) {
225
233
  const nextNodes = new Array(nextData.length);
226
234
  for (let x = 0; x < nextData.length; x++) {
227
235
  const data = nextData[x];
228
- let i = 0;
229
- for (; i < nodeArray.length &&
230
- (nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
231
- if (i !== nodeArray.length) {
232
- if (nodeArray[i][2]) {
233
- const scope = nodeArray[i][2];
234
- const value = scope.value;
235
- const updatedValue = Store_1.ObservableScope.Value(scope);
236
- if (value !== updatedValue)
237
- nodeArray[i][1] = CreateNodeArray(updatedValue);
238
- }
239
- nextNodes[x] = nodeArray[i];
240
- nodeArray[i] = null;
241
- }
242
- else {
243
- const scope = Store_1.ObservableScope.Create(function () {
244
- return injector_1.Injector.Scope(injector, getNextChildren, data);
245
- });
246
- nextNodes[x] = [
247
- data,
248
- CreateNodeArray(Store_1.ObservableScope.Value(scope)),
249
- scope,
250
- ];
251
- }
252
- }
253
- for (let x = 0; x < nodeArray.length; x++) {
254
- if (nodeArray[x] !== null) {
255
- vNode.DestroyAll(nodeArray[x][1]);
256
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
257
- }
236
+ nextNodes[x] = GetNextNodeRow(data, injector, getNextChildren);
258
237
  }
259
238
  return nextNodes;
260
239
  }
240
+ function GetNextNodeRowSmall(injector, getNextChildren, nodeArray, data) {
241
+ let i = 0;
242
+ for (; i < nodeArray.length && (nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
243
+ if (i === nodeArray.length)
244
+ return GetNextNodeRow(data, injector, getNextChildren);
245
+ const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeArray[i][2]);
246
+ if (nodeArray[i][1] !== nextNodeRow[1])
247
+ vNode.DestroyAll(nodeArray[i][1]);
248
+ nodeArray[i] = null;
249
+ return nextNodeRow;
250
+ }
251
+ function EvaluateNextNodesSmall(injector, getNextChildren, nextData, nodeArray) {
252
+ const nextNodes = new Array(nextData.length);
253
+ for (let x = 0; x < nextData.length; x++)
254
+ nextNodes[x] = GetNextNodeRowSmall(injector, getNextChildren, nodeArray, nextData[x]);
255
+ return nextNodes;
256
+ }
257
+ function GetNextNodeRowLarge(injector, getNextChildren, nodeRowMap, data) {
258
+ const currentChildren = nodeRowMap.get(data);
259
+ let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
260
+ for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
261
+ if (currentChildIndex >= 0) {
262
+ const nodeRow = currentChildren[currentChildIndex];
263
+ if (currentChildIndex === 0)
264
+ nodeRowMap.delete(data);
265
+ else
266
+ currentChildren[currentChildIndex] = null;
267
+ const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeRow[2]);
268
+ if (nodeRow[1] !== nextNodeRow[1])
269
+ vNode.DestroyAll(nodeRow[1]);
270
+ return nextNodeRow;
271
+ }
272
+ return GetNextNodeRow(data, injector, getNextChildren);
273
+ }
261
274
  function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray) {
262
275
  const nextNodes = new Array(nextData.length);
263
276
  const dataMap = new Map();
@@ -267,34 +280,7 @@ function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray)
267
280
  dataMap.set(nodeArray[x][0], arr);
268
281
  }
269
282
  for (let x = 0; x < nextData.length; x++) {
270
- const data = nextData[x];
271
- const currentChildren = dataMap.get(data);
272
- let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
273
- for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
274
- if (currentChildIndex !== -1) {
275
- const currentChild = currentChildren[currentChildIndex];
276
- currentChildren[currentChildIndex] = null;
277
- const scope = currentChild[2];
278
- const value = scope.value;
279
- const updatedValue = Store_1.ObservableScope.Value(scope);
280
- if (value !== updatedValue) {
281
- vNode.DestroyAll(currentChild[1]);
282
- currentChild[1] = CreateNodeArray(updatedValue);
283
- }
284
- nextNodes[x] = currentChild;
285
- if (currentChildIndex === 0)
286
- dataMap.delete(data);
287
- }
288
- else {
289
- const scope = Store_1.ObservableScope.Create(function () {
290
- return injector_1.Injector.Scope(injector, getNextChildren, data);
291
- });
292
- nextNodes[x] = [
293
- data,
294
- CreateNodeArray(Store_1.ObservableScope.Value(scope)),
295
- scope,
296
- ];
297
- }
283
+ nextNodes[x] = GetNextNodeRowLarge(injector, getNextChildren, dataMap, nextData[x]);
298
284
  }
299
285
  for (const value of dataMap.values()) {
300
286
  for (let x = 0; x < value.length; x++) {
@@ -23,7 +23,11 @@ export type vElementNode = {
23
23
  definition: vNodeDefinition<any, any, any>;
24
24
  injector: Injector;
25
25
  node: Node | null;
26
- children: [any, vNode[], IObservableScope<string | vNode | vNode[]> | null][] | null;
26
+ children: (readonly [
27
+ any,
28
+ vNode[],
29
+ IObservableScope<string | vNode | vNode[]> | null
30
+ ])[] | null;
27
31
  destroyed: boolean;
28
32
  onDestroyed: Emitter | null;
29
33
  scopes: IObservableScope<unknown>[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "j-templates",
3
- "version": "7.0.78",
3
+ "version": "7.0.80",
4
4
  "description": "j-templates",
5
5
  "license": "MIT",
6
6
  "repository": "https://github.com/TypesInCode/jTemplates",