bobe 0.0.58 → 0.0.59

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.
@@ -253,7 +253,6 @@ class Tokenizer {
253
253
  }
254
254
  isEof() {
255
255
  if (!this.token) return false;
256
- if (this.i >= this.code.length && !this.waitingTokens.len) return true;
257
256
  return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;
258
257
  }
259
258
  setToken(type, value, dt = 1) {
@@ -282,6 +281,7 @@ class Tokenizer {
282
281
  if (this.isEof()) {
283
282
  return this.token;
284
283
  }
284
+ if (this.i >= this.code.length && !this.waitingTokens.len) return this.token;
285
285
  this.token = undefined;
286
286
  if (this.waitingTokens.len) {
287
287
  const item = this.waitingTokens.shift();
@@ -1504,6 +1504,9 @@ class Interpreter {
1504
1504
  if (this.tokenizer.isEof()) {
1505
1505
  if (!ctx.prevSibling) ctx.prevSibling = before;
1506
1506
  this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);
1507
+ if (ctx.current) {
1508
+ ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);
1509
+ }
1507
1510
  break;
1508
1511
  }
1509
1512
  const token = this.tokenizer.token;
@@ -1515,6 +1518,7 @@ class Interpreter {
1515
1518
  prev: ctx.prevSibling
1516
1519
  }, !ctx.current.__logicType ? NodeSort.Real : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) | (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) | (ctx.current.__logicType & ContextBit ? NodeSort.Context : 0) | (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) | (ctx.current.__logicType & CtxProviderBit ? NodeSort.CtxProvider : 0));
1517
1520
  if (ctx.current.__logicType) {
1521
+ this.beforeLogicIndent?.(ctx.current);
1518
1522
  if (isLogicNode) {
1519
1523
  aoye.setPulling(ctx.current.effect);
1520
1524
  if (ctx.current.__logicType & FakeType.ForItem) {
@@ -1523,6 +1527,12 @@ class Interpreter {
1523
1527
  }
1524
1528
  } else {
1525
1529
  if (ctx.current) {
1530
+ if (this.beforeIndent?.(ctx.current) === false) {
1531
+ const dentLen = this.tokenizer.dentStack[this.tokenizer.dentStack.length - 1];
1532
+ this.tokenizer.skip(dentLen);
1533
+ ctx.current = null;
1534
+ continue;
1535
+ }
1526
1536
  ctx.realParent = ctx.current;
1527
1537
  }
1528
1538
  ctx.prevSibling = null;
@@ -1535,6 +1545,7 @@ class Interpreter {
1535
1545
  ctx.prevSibling = before;
1536
1546
  }
1537
1547
  this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);
1548
+ ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);
1538
1549
  }
1539
1550
  if (this.tokenizer.token.type & TokenType.Dedent) {
1540
1551
  this.tokenizer.nextToken();
@@ -1569,6 +1580,7 @@ class Interpreter {
1569
1580
  const i = forNode.i,
1570
1581
  arr = forNode.arr,
1571
1582
  snapshot = forNode.snapshot;
1583
+ this.leaveLogicNode?.(parent, false);
1572
1584
  if (i + 1 < arr.length) {
1573
1585
  this.tokenizer.resume(snapshot);
1574
1586
  this.tokenizer.nextToken();
@@ -1591,13 +1603,13 @@ class Interpreter {
1591
1603
  }
1592
1604
  return componentNode;
1593
1605
  }
1594
- insertAfterAnchor(name = 'anchor') {
1606
+ insertAnchor(name = 'anchor', isBefore = false) {
1595
1607
  const _this$ctx = this.ctx,
1596
1608
  realParent = _this$ctx.realParent,
1597
1609
  prevSibling = _this$ctx.prevSibling,
1598
1610
  stack = _this$ctx.stack,
1599
1611
  before = _this$ctx.before;
1600
- const afterAnchor = this.createAnchor(name);
1612
+ const afterAnchor = this.createAnchor(name, isBefore);
1601
1613
  this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;
1602
1614
  this.handleInsert(realParent, afterAnchor, prevSibling);
1603
1615
  return afterAnchor;
@@ -1651,7 +1663,7 @@ class Interpreter {
1651
1663
  _node = this.componentOrFragmentDeclaration(value, ctx);
1652
1664
  } else {
1653
1665
  _node = this.createNode('text');
1654
- _node.text = String(value);
1666
+ this.setProp(_node, 'text', String(value));
1655
1667
  }
1656
1668
  } else {
1657
1669
  return this.dynamicDeclaration(data, value, ctx);
@@ -1685,7 +1697,7 @@ class Interpreter {
1685
1697
  parentDataProvider: ctx.stack.peekByType(NodeSort.CtxProvider)?.node
1686
1698
  };
1687
1699
  let isUpdate = false;
1688
- node.realAfter = this.insertAfterAnchor(`dynamic-after`);
1700
+ node.realAfter = this.insertAnchor(`dynamic-after`);
1689
1701
  node.effect = this.effect(({
1690
1702
  old,
1691
1703
  val
@@ -1721,11 +1733,13 @@ class Interpreter {
1721
1733
  this.tokenizer = node.tokenizer;
1722
1734
  if (node.fragmentSnapshot) {
1723
1735
  this.tokenizer.resume(node.fragmentSnapshot);
1724
- this.tokenizer.useDedentAsEof = true;
1725
- this.tokenizer.initIndentWhenUseDedentAsEof();
1726
1736
  }
1727
1737
  if (isUpdate) {
1738
+ this.tokenizer.useDedentAsEof = false;
1728
1739
  this.program(node.realParent, node.owner, node.realBefore, node);
1740
+ } else {
1741
+ this.tokenizer.useDedentAsEof = true;
1742
+ this.tokenizer.initIndentWhenUseDedentAsEof();
1729
1743
  }
1730
1744
  } else {
1731
1745
  node.__logicType = FakeType.DynamicText;
@@ -1734,7 +1748,7 @@ class Interpreter {
1734
1748
  if (isNewTextNode) {
1735
1749
  textNode = node.textNode = this.createNode('text');
1736
1750
  }
1737
- textNode.text = String(val);
1751
+ this.setProp(textNode, 'text', String(val));
1738
1752
  if (isNewTextNode) {
1739
1753
  if (isUpdate) {
1740
1754
  this.handleInsert(node.realParent, textNode, node.realBefore);
@@ -1746,6 +1760,7 @@ class Interpreter {
1746
1760
  prevSibling = _this$ctx2.prevSibling;
1747
1761
  this.handleInsert(realParent, textNode, prevSibling);
1748
1762
  }
1763
+ this.leaveNode?.(textNode, false);
1749
1764
  }
1750
1765
  }
1751
1766
  isUpdate = true;
@@ -1776,7 +1791,7 @@ class Interpreter {
1776
1791
  realBefore: null,
1777
1792
  realAfter: null
1778
1793
  };
1779
- node.realAfter = this.insertAfterAnchor('context-after');
1794
+ node.realAfter = this.insertAnchor('context-after');
1780
1795
  return node;
1781
1796
  }
1782
1797
  formatForCollection(collection) {
@@ -1874,7 +1889,7 @@ class Interpreter {
1874
1889
  const hasArrExpKey = Reflect.has(data[aoye.Keys.Raw], arrExp);
1875
1890
  const arrSignal = hasArrExpKey ? (data[arrExp], cells.get(arrExp)) : new aoye.Computed(this.getFn(data, arrExp));
1876
1891
  forNode.arrSignal = arrSignal;
1877
- forNode.realAfter = this.insertAfterAnchor('for-after');
1892
+ forNode.realAfter = this.insertAnchor('for-after');
1878
1893
  const _forNode$snapshot = forNode.snapshot;
1879
1894
  _forNode$snapshot.dentStack;
1880
1895
  _forNode$snapshot.isFirstToken;
@@ -1897,8 +1912,8 @@ class Interpreter {
1897
1912
  const len = arr.length;
1898
1913
  for (let i = len; i--;) {
1899
1914
  const item = this.createForItem(forNode, i, data);
1900
- item.realAfter = this.insertAfterAnchor('for-item-after');
1901
- item.realBefore = this.insertAfterAnchor('for-item-before');
1915
+ item.realAfter = this.insertAnchor('for-item-after');
1916
+ item.realBefore = this.insertAnchor('for-item-before', true);
1902
1917
  item.realParent = forNode.realParent;
1903
1918
  children[i] = item;
1904
1919
  }
@@ -2065,7 +2080,7 @@ class Interpreter {
2065
2080
  newChildren[i] = item;
2066
2081
  let realAfter = this.createAnchor('for-item-after');
2067
2082
  this.handleInsert(forNode.realParent, realAfter, before);
2068
- let realBefore = this.createAnchor('for-item-before');
2083
+ let realBefore = this.createAnchor('for-item-before', true);
2069
2084
  this.handleInsert(forNode.realParent, realBefore, before);
2070
2085
  item.realBefore = realBefore;
2071
2086
  item.realAfter = realAfter;
@@ -2234,7 +2249,7 @@ class Interpreter {
2234
2249
  resumeSnapshot
2235
2250
  };
2236
2251
  this.onePropParsed = onePropParsed;
2237
- node.realAfter = this.insertAfterAnchor('component-after');
2252
+ node.realAfter = this.insertAnchor('component-after');
2238
2253
  return node;
2239
2254
  }
2240
2255
  getFn(data, expression) {
@@ -2329,7 +2344,7 @@ class Interpreter {
2329
2344
  break;
2330
2345
  }
2331
2346
  ifNode.condition = signal;
2332
- ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);
2347
+ ifNode.realAfter = this.insertAnchor(`${keyWord.value}-after`);
2333
2348
  const ef = this.effect(({
2334
2349
  val
2335
2350
  }) => {
@@ -2514,10 +2529,11 @@ class Interpreter {
2514
2529
  firstChild(node) {
2515
2530
  return node.firstChild;
2516
2531
  }
2517
- createAnchor(name) {
2532
+ createAnchor(name, isBefore) {
2518
2533
  return {
2519
2534
  name,
2520
- nextSibling: null
2535
+ nextSibling: null,
2536
+ isBefore
2521
2537
  };
2522
2538
  }
2523
2539
  insertAfter(parent, node, prev) {
@@ -2603,6 +2619,7 @@ function customRender(option) {
2603
2619
  tokenizer
2604
2620
  };
2605
2621
  terp.program(root, componentNode);
2622
+ option.onBeforeFlush?.();
2606
2623
  aoye.flushMicroEffectManual();
2607
2624
  return [componentNode, store];
2608
2625
  };