@weave-framework/cli 0.2.107 → 0.2.162
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/README.md +2 -2
- package/bin/weave.mjs +3 -0
- package/dist/cli.js +86 -5
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The Weave CLI — `weave build`, `weave dev` (watch + live-reload), `weave check`, `weave routes`.
|
|
4
4
|
|
|
5
|
-
Part of **[Weave](https://
|
|
5
|
+
Part of **[Weave](https://weaveframework.dev/)** — a fine-grained reactive, signal-native UI framework: no Virtual DOM, zero third-party runtime dependencies.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install -D @weave-framework/cli
|
|
@@ -14,7 +14,7 @@ Scaffolded apps already include it (with scripts wired up):
|
|
|
14
14
|
npm create weave@latest my-app
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
📚 **Guides + full API reference:** [
|
|
17
|
+
📚 **Guides + full API reference:** [weaveframework.dev](https://weaveframework.dev/)
|
|
18
18
|
|
|
19
19
|
## License
|
|
20
20
|
|
package/bin/weave.mjs
CHANGED
|
@@ -23,6 +23,9 @@ await esbuild({
|
|
|
23
23
|
bundle: true,
|
|
24
24
|
format: 'esm',
|
|
25
25
|
platform: 'node',
|
|
26
|
+
// NB: @weave-framework/mcp stays INLINED in the dev bin (unlike the prod build, which
|
|
27
|
+
// externalizes it) — the dev bundle runs from node_modules/.weave/, whose module
|
|
28
|
+
// resolution can't reach the workspace-linked package, so we bundle it in.
|
|
26
29
|
external: ['esbuild', 'typescript', 'sass'],
|
|
27
30
|
outfile: out,
|
|
28
31
|
});
|
package/dist/cli.js
CHANGED
|
@@ -507,6 +507,9 @@ var Parser = class {
|
|
|
507
507
|
if (rawName.startsWith("class:")) {
|
|
508
508
|
return { type: "class", name: rawName.slice(6), expr: exprOf(), offset };
|
|
509
509
|
}
|
|
510
|
+
if (rawName.startsWith("style:")) {
|
|
511
|
+
return { type: "style", name: rawName.slice(6), expr: exprOf(), offset };
|
|
512
|
+
}
|
|
510
513
|
if (rawName.startsWith("bind:")) {
|
|
511
514
|
return { type: "bind", name: rawName.slice(5), expr: exprOf(), offset };
|
|
512
515
|
}
|
|
@@ -1005,9 +1008,9 @@ var Gen = class {
|
|
|
1005
1008
|
this.usedComponents.add(name);
|
|
1006
1009
|
return this.mode === "function" ? `_c.${name}` : name;
|
|
1007
1010
|
}
|
|
1008
|
-
tpl(html) {
|
|
1011
|
+
tpl(html, svg = false) {
|
|
1009
1012
|
const v = `_t${this.tplN++}`;
|
|
1010
|
-
this.templates.push(`const ${v} = ${this.H("template")}(${JSON.stringify(html)});`);
|
|
1013
|
+
this.templates.push(`const ${v} = ${this.H(svg ? "templateSvg" : "template")}(${JSON.stringify(html)});`);
|
|
1011
1014
|
return v;
|
|
1012
1015
|
}
|
|
1013
1016
|
fn(prefix = "_b") {
|
|
@@ -1031,6 +1034,62 @@ function compileTemplate(input, options = {}) {
|
|
|
1031
1034
|
const code = [domImport + "\n" + coreImport, ...gen.templates, `export default ${render}`].join("\n");
|
|
1032
1035
|
return { code, components };
|
|
1033
1036
|
}
|
|
1037
|
+
var SVG_TAGS = /* @__PURE__ */ new Set([
|
|
1038
|
+
"path",
|
|
1039
|
+
"rect",
|
|
1040
|
+
"circle",
|
|
1041
|
+
"ellipse",
|
|
1042
|
+
"line",
|
|
1043
|
+
"polyline",
|
|
1044
|
+
"polygon",
|
|
1045
|
+
"g",
|
|
1046
|
+
"defs",
|
|
1047
|
+
"use",
|
|
1048
|
+
"symbol",
|
|
1049
|
+
"marker",
|
|
1050
|
+
"mask",
|
|
1051
|
+
"pattern",
|
|
1052
|
+
"clipPath",
|
|
1053
|
+
"linearGradient",
|
|
1054
|
+
"radialGradient",
|
|
1055
|
+
"stop",
|
|
1056
|
+
"image",
|
|
1057
|
+
"foreignObject",
|
|
1058
|
+
"text",
|
|
1059
|
+
"tspan",
|
|
1060
|
+
"textPath",
|
|
1061
|
+
"desc",
|
|
1062
|
+
"view",
|
|
1063
|
+
"filter",
|
|
1064
|
+
"feBlend",
|
|
1065
|
+
"feColorMatrix",
|
|
1066
|
+
"feComponentTransfer",
|
|
1067
|
+
"feComposite",
|
|
1068
|
+
"feConvolveMatrix",
|
|
1069
|
+
"feDiffuseLighting",
|
|
1070
|
+
"feDisplacementMap",
|
|
1071
|
+
"feDropShadow",
|
|
1072
|
+
"feFlood",
|
|
1073
|
+
"feFuncA",
|
|
1074
|
+
"feFuncB",
|
|
1075
|
+
"feFuncG",
|
|
1076
|
+
"feFuncR",
|
|
1077
|
+
"feGaussianBlur",
|
|
1078
|
+
"feImage",
|
|
1079
|
+
"feMerge",
|
|
1080
|
+
"feMergeNode",
|
|
1081
|
+
"feMorphology",
|
|
1082
|
+
"feOffset",
|
|
1083
|
+
"feSpecularLighting",
|
|
1084
|
+
"feTile",
|
|
1085
|
+
"feTurbulence",
|
|
1086
|
+
"animate",
|
|
1087
|
+
"animateMotion",
|
|
1088
|
+
"animateTransform",
|
|
1089
|
+
"mpath",
|
|
1090
|
+
"set"
|
|
1091
|
+
]);
|
|
1092
|
+
var TRANSITION_PHASES = /* @__PURE__ */ new Set(["enterstart", "enterend", "leavestart", "leaveend"]);
|
|
1034
1093
|
function pascalToKebab(tag) {
|
|
1035
1094
|
return tag.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2").toLowerCase();
|
|
1036
1095
|
}
|
|
@@ -1200,6 +1259,9 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1200
1259
|
case "class":
|
|
1201
1260
|
sink.push(`${gen.H("bindClass")}(${n}, ${q(attr.name)}, () => ${rewrite(attr.expr, sc).code});`);
|
|
1202
1261
|
break;
|
|
1262
|
+
case "style":
|
|
1263
|
+
sink.push(`${gen.H("bindStyleProp")}(${n}, ${q(attr.name)}, () => ${rewrite(attr.expr, sc).code});`);
|
|
1264
|
+
break;
|
|
1203
1265
|
case "show":
|
|
1204
1266
|
sink.push(`${gen.H("bindShow")}(${n}, () => ${rewrite(attr.expr, sc).code});`);
|
|
1205
1267
|
break;
|
|
@@ -1210,6 +1272,10 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1210
1272
|
break;
|
|
1211
1273
|
}
|
|
1212
1274
|
case "event": {
|
|
1275
|
+
if (TRANSITION_PHASES.has(attr.name)) {
|
|
1276
|
+
sink.push(`${gen.H("transitionEvent")}(${n}, ${q(attr.name)}, ${rewrite(attr.expr, sc).code});`);
|
|
1277
|
+
break;
|
|
1278
|
+
}
|
|
1213
1279
|
const handler = wrapHandler(attr, sc);
|
|
1214
1280
|
const opts = eventOpts(attr.modifiers);
|
|
1215
1281
|
sink.push(`${gen.H("listen")}(${n}, ${q(attr.name)}, ${handler}${opts ? `, ${opts}` : ""});`);
|
|
@@ -1221,7 +1287,7 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1221
1287
|
case "use": {
|
|
1222
1288
|
const action = rewrite(attr.name, sc).code;
|
|
1223
1289
|
sink.push(
|
|
1224
|
-
attr.expr !== void 0 ? `${gen.H("applyAction")}(${n}, ${action}, ${rewrite(attr.expr, sc).code});` : `${gen.H("applyAction")}(${n}, ${action});`
|
|
1290
|
+
attr.expr !== void 0 ? `${gen.H("applyAction")}(${n}, ${action}, () => ${rewrite(attr.expr, sc).code});` : `${gen.H("applyAction")}(${n}, ${action});`
|
|
1225
1291
|
);
|
|
1226
1292
|
break;
|
|
1227
1293
|
}
|
|
@@ -1404,8 +1470,10 @@ function compileFragment(gen, nodes, scope, name, param = "", isHost = false) {
|
|
|
1404
1470
|
}
|
|
1405
1471
|
if (singleRoot) emitElement(sole, [], scope, isHost);
|
|
1406
1472
|
else emitChildren(top, [], scope, isHost);
|
|
1473
|
+
const topEls = top.filter((n) => n.type === "element");
|
|
1474
|
+
const svgRoot = topEls.length > 0 && SVG_TAGS.has(topEls[0].tag);
|
|
1407
1475
|
const ctor = singleRoot ? gen.H("clone") : gen.H("cloneFragment");
|
|
1408
|
-
const tplVar = gen.tpl(html);
|
|
1476
|
+
const tplVar = gen.tpl(html, svgRoot);
|
|
1409
1477
|
const body = [
|
|
1410
1478
|
`const _r = ${ctor}(${tplVar});`,
|
|
1411
1479
|
...nodeDecls,
|
|
@@ -3334,8 +3402,21 @@ weave check: ${errors} error${errors === 1 ? "" : "s"}`);
|
|
|
3334
3402
|
console.log(`weave routes \u2192 ${written}`);
|
|
3335
3403
|
return;
|
|
3336
3404
|
}
|
|
3405
|
+
if (cmd === "mcp") {
|
|
3406
|
+
try {
|
|
3407
|
+
const mcp = await import("@weave-framework/mcp");
|
|
3408
|
+
await mcp.runStdioServer();
|
|
3409
|
+
} catch (e) {
|
|
3410
|
+
console.error(
|
|
3411
|
+
`weave mcp: could not start the MCP server \u2014 is @weave-framework/mcp installed?
|
|
3412
|
+
${e?.message ?? String(e)}`
|
|
3413
|
+
);
|
|
3414
|
+
process.exit(1);
|
|
3415
|
+
}
|
|
3416
|
+
return;
|
|
3417
|
+
}
|
|
3337
3418
|
console.error(
|
|
3338
|
-
"usage: weave <build|dev|check|routes> [entry|paths\u2026] [--config file] [--out dir] [--serve dir] [--port n] [--no-minify] [--eager]"
|
|
3419
|
+
"usage: weave <build|dev|check|routes|mcp> [entry|paths\u2026] [--config file] [--out dir] [--serve dir] [--port n] [--no-minify] [--eager]"
|
|
3339
3420
|
);
|
|
3340
3421
|
process.exit(1);
|
|
3341
3422
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weave-framework/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.162",
|
|
4
4
|
"description": "Weave CLI — `weave build`, `weave dev` (watch + live-reload), `weave check`, `weave routes`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"esbuild": "^0.25.0",
|
|
34
|
-
"typescript": "^5.7.0"
|
|
34
|
+
"typescript": "^5.7.0",
|
|
35
|
+
"@weave-framework/mcp": "0.2.162"
|
|
35
36
|
},
|
|
36
37
|
"optionalDependencies": {
|
|
37
38
|
"sass": "^1.0.0"
|