@velarscript/cli 0.23.4 → 0.25.0

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 (46) hide show
  1. package/dist/cli.js +20 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +71 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/dev-server.d.ts.map +1 -1
  8. package/dist/dev-server.js +8 -2
  9. package/dist/dev-server.js.map +1 -1
  10. package/dist/extension-metadata.d.ts +12 -0
  11. package/dist/extension-metadata.d.ts.map +1 -1
  12. package/dist/extension-metadata.js +38 -2
  13. package/dist/extension-metadata.js.map +1 -1
  14. package/dist/host-error.d.ts +7 -0
  15. package/dist/host-error.d.ts.map +1 -1
  16. package/dist/host-error.js +9 -0
  17. package/dist/host-error.js.map +1 -1
  18. package/dist/language-server-bundle-entry.js +1 -1
  19. package/dist/language-server-bundle-entry.js.map +1 -1
  20. package/dist/language-server-tool.d.ts.map +1 -1
  21. package/dist/language-server-tool.js +34 -0
  22. package/dist/language-server-tool.js.map +1 -1
  23. package/dist/npm.d.ts.map +1 -1
  24. package/dist/npm.js +147 -16
  25. package/dist/npm.js.map +1 -1
  26. package/dist/official-language-server-extensions.d.ts +12 -1
  27. package/dist/official-language-server-extensions.d.ts.map +1 -1
  28. package/dist/official-language-server-extensions.js +78 -46
  29. package/dist/official-language-server-extensions.js.map +1 -1
  30. package/dist/project-format.d.ts +1 -1
  31. package/dist/project-format.d.ts.map +1 -1
  32. package/dist/project-format.js +6 -0
  33. package/dist/project-format.js.map +1 -1
  34. package/dist/surface-versions.d.ts +42 -0
  35. package/dist/surface-versions.d.ts.map +1 -0
  36. package/dist/surface-versions.js +72 -0
  37. package/dist/surface-versions.js.map +1 -0
  38. package/dist/test-output.d.ts.map +1 -1
  39. package/dist/test-output.js +69 -1
  40. package/dist/test-output.js.map +1 -1
  41. package/dist/version.d.ts +1 -1
  42. package/dist/version.js +1 -1
  43. package/package.json +25 -9
  44. package/skill/ai-skill-server.md +1 -1
  45. package/skill/ai-skill-web.md +24 -4
  46. package/skill/ai-skill.md +10 -0
@@ -0,0 +1,72 @@
1
+ import { VELAR_CORE_API_VERSION } from "@velarscript/compiler";
2
+ /**
3
+ * D110 — one installation number, five surface versions.
4
+ *
5
+ * `VELAR_VERSION` is the number you install. It steps for every package at
6
+ * once, so it cannot say which of the five observable surfaces actually moved:
7
+ * Desktop's surface sat still for several releases while its package climbed
8
+ * with everybody else's. The surface versions answer the question an upgrade
9
+ * really raises — *which code do I have to re-read?*
10
+ *
11
+ * Every number here is read from the package that owns the surface. None of
12
+ * them is written down twice: D110's background is a website that accumulated
13
+ * two dozen hand-typed release numbers and had every one of them go stale in a
14
+ * single release, and a hand-typed number is the failure this whole mechanism
15
+ * exists to remove. `scripts/check-surface-versions.mjs` hashes each surface
16
+ * and refuses a change that leaves its number behind.
17
+ *
18
+ * `0.N`'s `N` counts how many times that surface has changed since counting
19
+ * began, and it is not a maturity grade: a low number beside a high one means
20
+ * that surface started counting later, and nothing else.
21
+ *
22
+ * The four target constants are imported *lazily*, and that is not an
23
+ * optimization detail — it is the difference between this file costing one
24
+ * command and costing all of them. Reading Web's, Server's and Desktop's
25
+ * numbers means loading three compiler extensions the CLI otherwise touches
26
+ * only when a project activates them, and a static import here would put that
27
+ * on the start of `velar check` and every other command for the sake of a
28
+ * banner almost none of them print. Core's constant is already loaded, because
29
+ * the compiler always is.
30
+ *
31
+ * Three of those four are also optional now (D111): a project installs the
32
+ * targets it declares, so a Core project has no Web, Server or Desktop package
33
+ * to read a number out of. The banner answers for the installation it is in —
34
+ * the same reading `velar.json`'s `surfaces` check already takes, where the
35
+ * installed packages, not the CLI's own pins, decide what a project activates.
36
+ * A surface with nothing installed to speak for it is left out rather than
37
+ * printed from a number written down here, which is exactly the second copy
38
+ * this file exists to avoid.
39
+ */
40
+ export async function readSurfaceVersions() {
41
+ const [web, node, server, desktop] = await Promise.all([
42
+ installedSurface(() => import("@velarscript/web/compiler")),
43
+ import("@velarscript/node/compiler"),
44
+ installedSurface(() => import("@velarscript/server/compiler")),
45
+ installedSurface(() => import("@velarscript/desktop")),
46
+ ]);
47
+ // Declaration order is the order the surface table is printed in (D110 rule 6).
48
+ const versions = { core: VELAR_CORE_API_VERSION };
49
+ if (web)
50
+ versions.web = web.VELAR_WEB_API_VERSION;
51
+ versions.node = node.VELAR_NODE_API_VERSION;
52
+ if (server)
53
+ versions.server = server.VELAR_SERVER_API_VERSION;
54
+ if (desktop)
55
+ versions.desktop = desktop.VELAR_DESKTOP_API_VERSION;
56
+ return Object.freeze(versions);
57
+ }
58
+ /** One optional target's module, or null when this project did not install it. */
59
+ async function installedSurface(load) {
60
+ try {
61
+ return await load();
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /** One line, three spaces between entries: `core@<n> web@<n> …`. */
68
+ export async function formatSurfaceVersions() {
69
+ const versions = await readSurfaceVersions();
70
+ return Object.entries(versions).map(([surface, version]) => `${surface}@${version}`).join(" ");
71
+ }
72
+ //# sourceMappingURL=surface-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-versions.js","sourceRoot":"","sources":["../src/surface-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,CAAC,4BAA4B,CAAC;QACpC,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC9D,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;KACvD,CAAC,CAAC;IACH,gFAAgF;IAChF,MAAM,QAAQ,GAA2B,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC1E,IAAI,GAAG;QAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,qBAAqB,CAAC;IAClD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAC5C,IAAI,MAAM;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAC9D,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,gBAAgB,CAAI,IAAsB;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-output.d.ts","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAmBrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAc1H;AAaD,6EAA6E;AAC7E,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3H;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIhH"}
1
+ {"version":3,"file":"test-output.d.ts","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAoBrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1H;AAwED,6EAA6E;AAC7E,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3H;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIhH"}
@@ -1,6 +1,7 @@
1
1
  import { mkdir, mkdtemp, readFile, rm, rmdir, writeFile } from "node:fs/promises";
2
- import { basename, dirname, join, relative } from "node:path";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
3
  import { assertUniqueEmbeddedModuleOutputs, embeddedModuleFileContents, embeddedModuleOutputPath } from "./embedded-modules.js";
4
+ import { importSpecifierSites } from "./module-assets.js";
4
5
  import { usedPackageResourceExports, writeProjectResources } from "./resource-output.js";
5
6
  /**
6
7
  * D51 rule 105: the verdict line is the last link in the trust chain, so what
@@ -46,6 +47,8 @@ export async function createCompiledSandbox(projectRoot, prefix) {
46
47
  type: "module",
47
48
  ...(imports ? { imports } : {}),
48
49
  }), "utf8");
50
+ if (imports)
51
+ await copyPackageImportTargets(projectRoot, sandbox, imports);
49
52
  return sandbox;
50
53
  }
51
54
  async function projectPackageImports(projectRoot) {
@@ -59,6 +62,71 @@ async function projectPackageImports(projectRoot) {
59
62
  return null;
60
63
  }
61
64
  }
65
+ /** Every string leaf of an `imports` target: a plain path, a fallback array, or a conditions object. */
66
+ function packageImportTargets(value) {
67
+ if (typeof value === "string")
68
+ return [value];
69
+ if (Array.isArray(value))
70
+ return value.flatMap(packageImportTargets);
71
+ if (value !== null && typeof value === "object")
72
+ return Object.values(value).flatMap(packageImportTargets);
73
+ return [];
74
+ }
75
+ /**
76
+ * Brings the files a relative `#` import target names into the sandbox.
77
+ *
78
+ * The manifest is copied verbatim, and that is right for a target that names a
79
+ * package: the sandbox lives inside the project precisely so Node's upward
80
+ * `node_modules` walk still reaches the project's real installation. A target
81
+ * that names a *path* has no such fallback — it is anchored to the manifest's
82
+ * own directory, which is now the sandbox — so `velar test` and `velar run`
83
+ * used to fail to resolve a `#` specifier that `velar check` and `velar build`
84
+ * both resolve, because those two resolve from the real importer instead.
85
+ *
86
+ * The file is mirrored at its project-relative path so its own relative imports
87
+ * keep their meaning without a byte being rewritten, and those imports are
88
+ * followed, because a target's neighbours are as necessary to it as the target
89
+ * is to the compiled tree. Bare and `#` specifiers inside a copied file are not
90
+ * followed: those resolve exactly as they did before, through the upward walk
91
+ * and through this same manifest. A target that resolves outside the project is
92
+ * skipped rather than mirrored somewhere it does not belong — Node rejects that
93
+ * shape itself, since an `imports` target may not escape its package.
94
+ */
95
+ async function copyPackageImportTargets(projectRoot, sandbox, imports) {
96
+ const pending = Object.values(imports)
97
+ .flatMap(packageImportTargets)
98
+ .filter((target) => target.startsWith("./") || target.startsWith("../"))
99
+ .map((target) => resolve(projectRoot, target));
100
+ const copied = new Set();
101
+ const velarRoot = join(projectRoot, ".velar");
102
+ while (pending.length > 0) {
103
+ const source = pending.pop();
104
+ if (copied.has(source))
105
+ continue;
106
+ const inside = relative(projectRoot, source);
107
+ if (inside.startsWith("..") || isAbsolute(inside) || source === velarRoot || source.startsWith(`${velarRoot}${sep}`))
108
+ continue;
109
+ let contents;
110
+ try {
111
+ contents = await readFile(source);
112
+ }
113
+ catch {
114
+ // A target that does not exist is the project's own defect, and the
115
+ // resolution failure names it far better than a copier could.
116
+ continue;
117
+ }
118
+ copied.add(source);
119
+ const output = join(sandbox, inside);
120
+ await mkdir(dirname(output), { recursive: true });
121
+ await writeFile(output, contents);
122
+ if (!/\.[cm]?js$/u.test(source))
123
+ continue;
124
+ for (const site of importSpecifierSites(contents.toString("utf8"))) {
125
+ if (site.source.startsWith("./") || site.source.startsWith("../"))
126
+ pending.push(resolve(dirname(source), site.source));
127
+ }
128
+ }
129
+ }
62
130
  /** Removes a compiled sandbox and prunes `.velar/` when it becomes empty. */
63
131
  export async function removeCompiledSandbox(sandbox) {
64
132
  await rm(sandbox, { recursive: true, force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"test-output.js","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-output.js","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const VELAR_VERSION = "0.23.4";
1
+ export declare const VELAR_VERSION = "0.25.0";
2
2
  export { VELAR_STANDARD_API_VERSION } from "@velarscript/core";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const VELAR_VERSION = "0.23.4";
1
+ export const VELAR_VERSION = "0.25.0";
2
2
  export { VELAR_STANDARD_API_VERSION } from "@velarscript/core";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velarscript/cli",
3
- "version": "0.23.4",
3
+ "version": "0.25.0",
4
4
  "description": "The VelarScript command-line compiler, dev server, test runner, and language server.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -30,14 +30,30 @@
30
30
  "velar": "./dist/cli.js"
31
31
  },
32
32
  "dependencies": {
33
- "@velarscript/compiler": "0.23.4",
34
- "@velarscript/core": "0.23.4",
35
- "@velarscript/desktop": "0.23.4",
36
- "@velarscript/node": "0.23.4",
37
- "@velarscript/server": "0.23.4",
38
- "@velarscript/web": "0.23.4",
39
- "create-velar": "0.23.4",
40
- "esbuild": "^0.28.1",
33
+ "@velarscript/compiler": "0.25.0",
34
+ "@velarscript/core": "0.25.0",
35
+ "@velarscript/node": "0.25.0",
36
+ "create-velar": "0.25.0",
37
+ "esbuild": "^0.28.1"
38
+ },
39
+ "peerDependencies": {
40
+ "@velarscript/desktop": "0.25.0",
41
+ "@velarscript/server": "0.25.0",
42
+ "@velarscript/web": "0.25.0",
41
43
  "playwright": "^1.58.2"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "@velarscript/desktop": {
47
+ "optional": true
48
+ },
49
+ "@velarscript/server": {
50
+ "optional": true
51
+ },
52
+ "@velarscript/web": {
53
+ "optional": true
54
+ },
55
+ "playwright": {
56
+ "optional": true
57
+ }
42
58
  }
43
59
  }
@@ -13,7 +13,7 @@ browser application activates `@velarscript/web`:
13
13
  ```json
14
14
  {
15
15
  "dependencies": {
16
- "@velarscript/server": "0.23.4"
16
+ "@velarscript/server": "0.25.0"
17
17
  }
18
18
  }
19
19
  ```
@@ -74,6 +74,13 @@ A resource loads once at mount. Refetching after an input changes is an
74
74
  explicit `watch` plus detached `async resource.reload()`. Actions do not queue;
75
75
  disable or otherwise guard a trigger when concurrent calls are unwanted.
76
76
 
77
+ Markup children are text, and text has no comment form. A `//` or `/* ... */`
78
+ opener standing at the start of its own line inside a children region is
79
+ `VEL5002`, exactly as `<!-- ... -->` and `{/* ... */}` are; it used to render as
80
+ a paragraph of source comment on the page. Put the note above the markup, where
81
+ `//` is a comment, and interpolate the line — `{"// ..."}` — on the rare
82
+ occasion the text really does begin with an opener.
83
+
77
84
  A watch subject is a reactive name — a `state`, a `computed`, a prop, or a
78
85
  resource field — or a read path out of one, such as `items[0].done`. An operator
79
86
  or a call there is refused; declare the value with `computed` and watch that
@@ -109,10 +116,13 @@ Conditional rendering is an expression, and repeated children need stable
109
116
  must still be the same value. `items = items.map(item => { ...item, done: true })`
110
117
  rebuilds every row, so the keyed list recognises none of them and destroys and
111
118
  rebuilds all of its children — an input being typed into loses focus. Change the
112
- field in place, `items[index].done = true`. The compiler raises advisory **A4**
113
- where the rewritten list is the one a keyed position renders; `// velar-allow
114
- A4: <reason>` suppresses it where a `map` is the only spelling, which a
115
- `readonly` list or one API response makes it.
119
+ field in place, `items[index].done = true`. A `computed` that builds a fresh
120
+ record per source element is the same rebuild, once per recompute; there, render
121
+ the source rows and change the field on those, or carry the source records
122
+ through. The compiler raises advisory **A4** for both spellings where the rebuilt
123
+ rows are the ones a keyed position renders; `// velar-allow A4: <reason>`
124
+ suppresses it where building the rows is the only spelling, which a `readonly`
125
+ list or one API response makes it.
116
126
 
117
127
  A native element rejects every attribute name beginning with `on` other than
118
128
  the `on:` directive itself. `onclick`, `onClick`, and `ONCLICK` are one
@@ -186,6 +196,16 @@ defines it. Do not write `var(--name)` as a string and do not wrap it in
186
196
  migrates them. `animation` is the exception: motion is a `keyframes:` value
187
197
  passed to `animate(...)`, never a token.
188
198
 
199
+ Do not write a CSS shorthand beside a longhand it writes — `padding` with
200
+ `paddingTop`, `border` with `borderColor`, `background` with `backgroundColor`.
201
+ Each Look entry becomes its own CSS rule and the stylesheet orders them
202
+ module-wide, so the block's own order does not decide which survives; the pair
203
+ is refused, and the refusal names the longhands to write instead. There is no
204
+ `font` property: it is a shorthand whose value nothing can check, and a value
205
+ that is not a legal `font` shorthand silently resets `fontSize`, `fontFamily`,
206
+ `fontWeight` and `lineHeight` along with it. Write the longhands, and put a
207
+ size token in `fontSize = token("--ui-font-size-body")`.
208
+
189
209
  A `look` written on a component invocation composes after the look the
190
210
  component applies to its own host, per property and per condition: declare a
191
211
  property unconditionally to override the component's outright, and declare it
package/skill/ai-skill.md CHANGED
@@ -88,6 +88,16 @@ Writing the manifest yourself: `formatVersion` is required, `kind` may be
88
88
  omitted by a project that loads none, `entry` defaults to `src/main.vel`,
89
89
  `outDir` to `dist`, and `publicDir` to `public`.
90
90
 
91
+ `surfaces` is optional and records the **surface version** the project was
92
+ written against — `core`, plus one entry per activated extension. `velar create`
93
+ writes it. **Never invent the values**: read them from `velar --version`, which
94
+ prints the five the installed toolchain ships, or leave the key out. A
95
+ declaration that is present must be complete — every activated surface and no
96
+ others — and one that no longer matches what is installed is refused, naming the
97
+ surface, both numbers, and the changelog sections between them. That refusal
98
+ means the surface moved under the project: read those sections, fix the code,
99
+ then write the new number. It is not a range to widen.
100
+
91
101
  A Core project (CLI or library) loads no extensions:
92
102
 
93
103
  ```json