@weave-framework/cli 0.2.0 → 0.2.53
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/dist/cli.js +187 -58
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -411,13 +411,7 @@ var Parser = class {
|
|
|
411
411
|
return this.src[this.pos];
|
|
412
412
|
}
|
|
413
413
|
readInterp() {
|
|
414
|
-
this.
|
|
415
|
-
const start = this.pos;
|
|
416
|
-
const end = this.src.indexOf("}}", this.pos);
|
|
417
|
-
if (end === -1) throw new ParseError("Unclosed {{ interpolation");
|
|
418
|
-
this.pos = end + 2;
|
|
419
|
-
const raw = this.src.slice(start, end);
|
|
420
|
-
return { expr: raw.trim(), offset: start + (raw.length - raw.trimStart().length) };
|
|
414
|
+
return this.readDoubleBracedExpr();
|
|
421
415
|
}
|
|
422
416
|
skipComment() {
|
|
423
417
|
const end = this.src.indexOf("-->", this.pos);
|
|
@@ -684,12 +678,63 @@ function rewrite(expr, scope, ctxRef = "ctx") {
|
|
|
684
678
|
};
|
|
685
679
|
while (i < n) {
|
|
686
680
|
const c = expr[i];
|
|
687
|
-
if (c === '"' || c === "'"
|
|
681
|
+
if (c === '"' || c === "'") {
|
|
688
682
|
const end = scanString(expr, i);
|
|
689
683
|
copy(i, expr.slice(i, end));
|
|
690
684
|
i = end;
|
|
691
685
|
continue;
|
|
692
686
|
}
|
|
687
|
+
if (c === "`") {
|
|
688
|
+
copy(i, "`");
|
|
689
|
+
let k = i + 1;
|
|
690
|
+
while (k < n) {
|
|
691
|
+
const ch = expr[k];
|
|
692
|
+
if (ch === "\\") {
|
|
693
|
+
copy(k, expr.slice(k, k + 2));
|
|
694
|
+
k += 2;
|
|
695
|
+
continue;
|
|
696
|
+
}
|
|
697
|
+
if (ch === "`") {
|
|
698
|
+
copy(k, "`");
|
|
699
|
+
k++;
|
|
700
|
+
break;
|
|
701
|
+
}
|
|
702
|
+
if (ch === "$" && expr[k + 1] === "{") {
|
|
703
|
+
copy(k, "${");
|
|
704
|
+
k += 2;
|
|
705
|
+
const exprStart = k;
|
|
706
|
+
let depth = 1;
|
|
707
|
+
while (k < n && depth > 0) {
|
|
708
|
+
const mc = expr[k];
|
|
709
|
+
if (mc === '"' || mc === "'" || mc === "`") {
|
|
710
|
+
k = scanString(expr, k);
|
|
711
|
+
continue;
|
|
712
|
+
}
|
|
713
|
+
if (mc === "{") depth++;
|
|
714
|
+
else if (mc === "}") {
|
|
715
|
+
depth--;
|
|
716
|
+
if (depth === 0) break;
|
|
717
|
+
}
|
|
718
|
+
k++;
|
|
719
|
+
}
|
|
720
|
+
const sub = rewrite(expr.slice(exprStart, k), scope, ctxRef);
|
|
721
|
+
if (sub.reactive) reactive = true;
|
|
722
|
+
flush();
|
|
723
|
+
const genStart = out.length;
|
|
724
|
+
for (const s of sub.segments) segments.push({ src: exprStart + s.src, gen: genStart + s.gen, len: s.len });
|
|
725
|
+
out += sub.code;
|
|
726
|
+
if (expr[k] === "}") {
|
|
727
|
+
copy(k, "}");
|
|
728
|
+
k++;
|
|
729
|
+
}
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
732
|
+
copy(k, ch);
|
|
733
|
+
k++;
|
|
734
|
+
}
|
|
735
|
+
i = k;
|
|
736
|
+
continue;
|
|
737
|
+
}
|
|
693
738
|
if (ID_START.test(c)) {
|
|
694
739
|
let j = i + 1;
|
|
695
740
|
while (j < n && ID_CHAR.test(expr[j])) j++;
|
|
@@ -697,6 +742,11 @@ function rewrite(expr, scope, ctxRef = "ctx") {
|
|
|
697
742
|
const isProperty = lastNonSpace(out) === ".";
|
|
698
743
|
const binding = scope.get(name);
|
|
699
744
|
if (binding && !isProperty) {
|
|
745
|
+
if (binding.kind !== "local") {
|
|
746
|
+
const prev = lastNonSpace(out);
|
|
747
|
+
const next = firstNonSpaceFrom(expr, j);
|
|
748
|
+
if ((prev === "{" || prev === ",") && (next === "," || next === "}")) insert(`${name}: `);
|
|
749
|
+
}
|
|
700
750
|
if (binding.kind === "ctx") {
|
|
701
751
|
insert(`${ctxRef}.`);
|
|
702
752
|
copy(i, name);
|
|
@@ -736,6 +786,12 @@ function lastNonSpace(s) {
|
|
|
736
786
|
}
|
|
737
787
|
return "";
|
|
738
788
|
}
|
|
789
|
+
function firstNonSpaceFrom(s, from) {
|
|
790
|
+
for (let i = from; i < s.length; i++) {
|
|
791
|
+
if (!/\s/.test(s[i])) return s[i];
|
|
792
|
+
}
|
|
793
|
+
return "";
|
|
794
|
+
}
|
|
739
795
|
var NON_CTX = /* @__PURE__ */ new Set([
|
|
740
796
|
// literals / keywords
|
|
741
797
|
"true",
|
|
@@ -842,10 +898,47 @@ function freeIdentifiers(expr) {
|
|
|
842
898
|
const n = expr.length;
|
|
843
899
|
while (i < n) {
|
|
844
900
|
const c = expr[i];
|
|
845
|
-
if (c === '"' || c === "'"
|
|
901
|
+
if (c === '"' || c === "'") {
|
|
846
902
|
i = scanString(expr, i);
|
|
847
903
|
continue;
|
|
848
904
|
}
|
|
905
|
+
if (c === "`") {
|
|
906
|
+
let k = i + 1;
|
|
907
|
+
while (k < n) {
|
|
908
|
+
const ch = expr[k];
|
|
909
|
+
if (ch === "\\") {
|
|
910
|
+
k += 2;
|
|
911
|
+
continue;
|
|
912
|
+
}
|
|
913
|
+
if (ch === "`") {
|
|
914
|
+
k++;
|
|
915
|
+
break;
|
|
916
|
+
}
|
|
917
|
+
if (ch === "$" && expr[k + 1] === "{") {
|
|
918
|
+
k += 2;
|
|
919
|
+
const start = k;
|
|
920
|
+
let depth = 1;
|
|
921
|
+
while (k < n && depth > 0) {
|
|
922
|
+
const mc = expr[k];
|
|
923
|
+
if (mc === '"' || mc === "'" || mc === "`") {
|
|
924
|
+
k = scanString(expr, k);
|
|
925
|
+
continue;
|
|
926
|
+
}
|
|
927
|
+
if (mc === "{") depth++;
|
|
928
|
+
else if (mc === "}") {
|
|
929
|
+
depth--;
|
|
930
|
+
if (depth === 0) break;
|
|
931
|
+
}
|
|
932
|
+
k++;
|
|
933
|
+
}
|
|
934
|
+
for (const id of freeIdentifiers(expr.slice(start, k))) out.add(id);
|
|
935
|
+
continue;
|
|
936
|
+
}
|
|
937
|
+
k++;
|
|
938
|
+
}
|
|
939
|
+
i = k;
|
|
940
|
+
continue;
|
|
941
|
+
}
|
|
849
942
|
if (ID_START.test(c)) {
|
|
850
943
|
let j = i + 1;
|
|
851
944
|
while (j < n && ID_CHAR.test(expr[j])) j++;
|
|
@@ -1123,6 +1216,7 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1123
1216
|
html += "<!---->";
|
|
1124
1217
|
const anchorVar = nodeExpr(path);
|
|
1125
1218
|
const props = [];
|
|
1219
|
+
const eventKeys = [];
|
|
1126
1220
|
for (const attr of node.attrs) {
|
|
1127
1221
|
switch (attr.type) {
|
|
1128
1222
|
case "static":
|
|
@@ -1131,13 +1225,17 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1131
1225
|
case "attr":
|
|
1132
1226
|
props.push(`get ${propKey(attr.name)}() { return ${rewrite(attr.expr, sc).code}; }`);
|
|
1133
1227
|
break;
|
|
1134
|
-
case "event":
|
|
1135
|
-
|
|
1228
|
+
case "event": {
|
|
1229
|
+
const k = onProp(attr.name);
|
|
1230
|
+
props.push(`${propKey(k)}: ${rewrite(attr.expr, sc).code}`);
|
|
1231
|
+
eventKeys.push(k);
|
|
1136
1232
|
break;
|
|
1233
|
+
}
|
|
1137
1234
|
default:
|
|
1138
1235
|
throw new Error(`'${attr.type}' binding on <${node.tag}> is not supported yet (M5: props + on:event only)`);
|
|
1139
1236
|
}
|
|
1140
1237
|
}
|
|
1238
|
+
if (eventKeys.length) props.push(`'$events': [${eventKeys.map((k) => JSON.stringify(k)).join(", ")}]`);
|
|
1141
1239
|
const groups = /* @__PURE__ */ new Map();
|
|
1142
1240
|
for (const child of node.children) {
|
|
1143
1241
|
let target = child;
|
|
@@ -1620,89 +1718,120 @@ function skipString(s, start) {
|
|
|
1620
1718
|
|
|
1621
1719
|
// packages/compiler/src/infer.ts
|
|
1622
1720
|
var FOR_VARS = ["$index", "$count", "$first", "$last", "$even", "$odd"];
|
|
1721
|
+
function childLists(node) {
|
|
1722
|
+
switch (node.type) {
|
|
1723
|
+
case "element":
|
|
1724
|
+
case "snippet":
|
|
1725
|
+
case "key":
|
|
1726
|
+
return [node.children];
|
|
1727
|
+
case "if":
|
|
1728
|
+
return node.branches.map((b) => b.children);
|
|
1729
|
+
case "for":
|
|
1730
|
+
return node.empty ? [node.children, node.empty] : [node.children];
|
|
1731
|
+
case "switch":
|
|
1732
|
+
return node.cases.map((c) => c.children);
|
|
1733
|
+
case "defer":
|
|
1734
|
+
return node.placeholder ? [node.children, node.placeholder] : [node.children];
|
|
1735
|
+
case "await": {
|
|
1736
|
+
const lists = [];
|
|
1737
|
+
if (node.pending) lists.push(node.pending);
|
|
1738
|
+
if (node.then) lists.push(node.then.children);
|
|
1739
|
+
if (node.catch) lists.push(node.catch.children);
|
|
1740
|
+
return lists;
|
|
1741
|
+
}
|
|
1742
|
+
default:
|
|
1743
|
+
return [];
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1623
1746
|
function inferCtxNames(nodes) {
|
|
1624
1747
|
const used = /* @__PURE__ */ new Set();
|
|
1625
|
-
const
|
|
1626
|
-
const
|
|
1627
|
-
|
|
1748
|
+
const snippetNames = /* @__PURE__ */ new Set();
|
|
1749
|
+
const collectSnippets = (list) => {
|
|
1750
|
+
for (const node of list) {
|
|
1751
|
+
if (node.type === "snippet") snippetNames.add(node.name);
|
|
1752
|
+
for (const cl of childLists(node)) collectSnippets(cl);
|
|
1753
|
+
}
|
|
1754
|
+
};
|
|
1755
|
+
collectSnippets(nodes);
|
|
1756
|
+
const add = (expr, declared) => {
|
|
1757
|
+
if (!expr) return;
|
|
1758
|
+
for (const id of freeIdentifiers(expr)) {
|
|
1759
|
+
if (!declared.has(id) && !snippetNames.has(id)) used.add(id);
|
|
1760
|
+
}
|
|
1628
1761
|
};
|
|
1629
|
-
const walk2 = (list) => {
|
|
1762
|
+
const walk2 = (list, parentDeclared) => {
|
|
1763
|
+
let declared = parentDeclared;
|
|
1630
1764
|
for (const node of list) {
|
|
1631
1765
|
switch (node.type) {
|
|
1632
1766
|
case "text":
|
|
1633
1767
|
break;
|
|
1634
1768
|
case "interp":
|
|
1635
|
-
add(node.expr);
|
|
1769
|
+
add(node.expr, declared);
|
|
1636
1770
|
break;
|
|
1637
1771
|
case "let":
|
|
1638
|
-
add(node.expr);
|
|
1639
|
-
declared.add(node.name);
|
|
1772
|
+
add(node.expr, declared);
|
|
1773
|
+
declared = new Set(declared).add(node.name);
|
|
1640
1774
|
break;
|
|
1641
1775
|
case "element":
|
|
1642
1776
|
for (const attr of node.attrs) {
|
|
1643
|
-
if (attr.type === "use") add(attr.name);
|
|
1644
|
-
if (attr.type === "transition") add(attr.name);
|
|
1645
|
-
if (attr.type !== "static") add(attr.expr);
|
|
1777
|
+
if (attr.type === "use") add(attr.name, declared);
|
|
1778
|
+
if (attr.type === "transition") add(attr.name, declared);
|
|
1779
|
+
if (attr.type !== "static") add(attr.expr, declared);
|
|
1646
1780
|
}
|
|
1647
|
-
walk2(node.children);
|
|
1781
|
+
walk2(node.children, declared);
|
|
1648
1782
|
break;
|
|
1649
1783
|
case "if":
|
|
1650
1784
|
for (const br of node.branches) {
|
|
1651
|
-
add(br.cond);
|
|
1652
|
-
|
|
1653
|
-
walk2(br.children);
|
|
1785
|
+
add(br.cond, declared);
|
|
1786
|
+
walk2(br.children, br.alias ? new Set(declared).add(br.alias) : declared);
|
|
1654
1787
|
}
|
|
1655
1788
|
break;
|
|
1656
|
-
case "for":
|
|
1657
|
-
add(node.list);
|
|
1658
|
-
add(node.
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
walk2(node.children);
|
|
1662
|
-
if (node.empty) walk2(node.empty);
|
|
1789
|
+
case "for": {
|
|
1790
|
+
add(node.list, declared);
|
|
1791
|
+
const inner = new Set(declared).add(node.item);
|
|
1792
|
+
for (const v of FOR_VARS) inner.add(v);
|
|
1793
|
+
add(node.track, inner);
|
|
1794
|
+
walk2(node.children, inner);
|
|
1795
|
+
if (node.empty) walk2(node.empty, declared);
|
|
1663
1796
|
break;
|
|
1797
|
+
}
|
|
1664
1798
|
case "switch":
|
|
1665
|
-
add(node.expr);
|
|
1799
|
+
add(node.expr, declared);
|
|
1666
1800
|
for (const c of node.cases) {
|
|
1667
|
-
add(c.test);
|
|
1668
|
-
walk2(c.children);
|
|
1801
|
+
add(c.test, declared);
|
|
1802
|
+
walk2(c.children, declared);
|
|
1669
1803
|
}
|
|
1670
1804
|
break;
|
|
1671
1805
|
case "defer":
|
|
1672
|
-
if (node.trigger.kind === "when") add(node.trigger.expr);
|
|
1673
|
-
if (node.trigger.kind === "timer") add(node.trigger.ms);
|
|
1674
|
-
walk2(node.children);
|
|
1675
|
-
if (node.placeholder) walk2(node.placeholder);
|
|
1806
|
+
if (node.trigger.kind === "when") add(node.trigger.expr, declared);
|
|
1807
|
+
if (node.trigger.kind === "timer") add(node.trigger.ms, declared);
|
|
1808
|
+
walk2(node.children, declared);
|
|
1809
|
+
if (node.placeholder) walk2(node.placeholder, declared);
|
|
1676
1810
|
break;
|
|
1677
1811
|
case "await":
|
|
1678
|
-
add(node.expr);
|
|
1679
|
-
if (node.pending) walk2(node.pending);
|
|
1680
|
-
if (node.then)
|
|
1681
|
-
|
|
1682
|
-
walk2(node.then.children);
|
|
1683
|
-
}
|
|
1684
|
-
if (node.catch) {
|
|
1685
|
-
if (node.catch.alias) declared.add(node.catch.alias);
|
|
1686
|
-
walk2(node.catch.children);
|
|
1687
|
-
}
|
|
1812
|
+
add(node.expr, declared);
|
|
1813
|
+
if (node.pending) walk2(node.pending, declared);
|
|
1814
|
+
if (node.then) walk2(node.then.children, node.then.alias ? new Set(declared).add(node.then.alias) : declared);
|
|
1815
|
+
if (node.catch) walk2(node.catch.children, node.catch.alias ? new Set(declared).add(node.catch.alias) : declared);
|
|
1688
1816
|
break;
|
|
1689
|
-
case "snippet":
|
|
1690
|
-
declared
|
|
1691
|
-
for (const p of node.params)
|
|
1692
|
-
walk2(node.children);
|
|
1817
|
+
case "snippet": {
|
|
1818
|
+
const inner = new Set(declared);
|
|
1819
|
+
for (const p of node.params) inner.add(p);
|
|
1820
|
+
walk2(node.children, inner);
|
|
1693
1821
|
break;
|
|
1822
|
+
}
|
|
1694
1823
|
case "render":
|
|
1695
|
-
add(node.expr);
|
|
1824
|
+
add(node.expr, declared);
|
|
1696
1825
|
break;
|
|
1697
1826
|
case "key":
|
|
1698
|
-
add(node.expr);
|
|
1699
|
-
walk2(node.children);
|
|
1827
|
+
add(node.expr, declared);
|
|
1828
|
+
walk2(node.children, declared);
|
|
1700
1829
|
break;
|
|
1701
1830
|
}
|
|
1702
1831
|
}
|
|
1703
1832
|
};
|
|
1704
|
-
walk2(nodes);
|
|
1705
|
-
return [...used].
|
|
1833
|
+
walk2(nodes, /* @__PURE__ */ new Set());
|
|
1834
|
+
return [...used].sort();
|
|
1706
1835
|
}
|
|
1707
1836
|
|
|
1708
1837
|
// packages/compiler/src/component.ts
|