@sprig-and-prose/sprig 0.9.0 → 0.10.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 (48) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +22 -129
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compiler.d.ts +1 -3
  7. package/dist/compiler.d.ts.map +1 -1
  8. package/dist/compiler.js +30 -63
  9. package/dist/compiler.js.map +1 -1
  10. package/dist/diagnostics.d.ts +7 -0
  11. package/dist/diagnostics.d.ts.map +1 -0
  12. package/dist/diagnostics.js +69 -0
  13. package/dist/diagnostics.js.map +1 -0
  14. package/dist/prose.d.ts +1 -1
  15. package/dist/prose.d.ts.map +1 -1
  16. package/dist/prose.js +2 -5
  17. package/dist/prose.js.map +1 -1
  18. package/dist/ui.d.ts +1 -1
  19. package/dist/ui.d.ts.map +1 -1
  20. package/dist/ui.js +11 -12
  21. package/dist/ui.js.map +1 -1
  22. package/package.json +4 -7
  23. package/src/cli.ts +21 -168
  24. package/src/compiler.ts +40 -76
  25. package/src/diagnostics.ts +100 -0
  26. package/src/prose.ts +2 -5
  27. package/src/ui.ts +9 -12
  28. package/tests/compile.test.js +44 -17
  29. package/tests/compile.test.ts +65 -14
  30. package/tests/init.test.ts +8 -0
  31. package/tests/root.test.js +1 -1
  32. package/scripts/switch-deps.js +0 -44
  33. package/src/scene-compiler.ts +0 -192
  34. package/src/scene-discovery.ts +0 -51
  35. package/tests/compile-scene-only.test.js +0 -109
  36. package/tests/fixtures/scene-only-invalid/.sprig-out/bad.error.txt +0 -2
  37. package/tests/fixtures/scene-only-invalid/bad.scene.prose +0 -10
  38. package/tests/fixtures/scene-only-valid/.sprig-emit/AnotherScene.scene.json +0 -15
  39. package/tests/fixtures/scene-only-valid/.sprig-emit/SimpleScene.scene.json +0 -15
  40. package/tests/fixtures/scene-only-valid/.sprig-out/AnotherScene.scene.json +0 -15
  41. package/tests/fixtures/scene-only-valid/.sprig-out/SimpleScene.scene.json +0 -15
  42. package/tests/fixtures/scene-only-valid/another.scene.prose +0 -3
  43. package/tests/fixtures/scene-only-valid/simple.scene.prose +0 -3
  44. package/tests/fixtures/universe-unchanged/.sprig/TestScene.scene.json +0 -15
  45. package/tests/fixtures/universe-unchanged/custom-out/TestScene.scene.json +0 -15
  46. package/tests/fixtures/universe-unchanged/scene.scene.prose +0 -3
  47. package/tests/fixtures/universe-upstream/subdir/.sprig/OneScene.scene.json +0 -15
  48. package/tests/fixtures/universe-upstream/subdir/one.scene.prose +0 -3
package/dist/prose.js CHANGED
@@ -2,7 +2,7 @@ import { join } from "node:path";
2
2
  import fastGlob from "fast-glob";
3
3
  const DEFAULT_EXCLUDES = [".sprig/**", "dist/**", "node_modules/**", ".git/**"];
4
4
  /**
5
- * Loads all .prose files under root (excluding .scene.prose files) with default excludes
5
+ * Loads all .prose files under root with default excludes
6
6
  * @param root - Universe root directory
7
7
  * @returns Array of prose file paths, sorted deterministically
8
8
  */
@@ -10,10 +10,7 @@ export async function loadProseFiles(root) {
10
10
  const pattern = join(root, "**/*.prose");
11
11
  const allFiles = await fastGlob(pattern, {
12
12
  absolute: true,
13
- ignore: [
14
- ...DEFAULT_EXCLUDES.map((exclude) => join(root, exclude)),
15
- join(root, "**/*.scene.prose"), // Exclude scene files
16
- ],
13
+ ignore: [...DEFAULT_EXCLUDES.map((exclude) => join(root, exclude))],
17
14
  });
18
15
  // Sort for deterministic ordering
19
16
  return allFiles.sort();
package/dist/prose.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"prose.js","sourceRoot":"","sources":["../src/prose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE;QACvC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE;YACN,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,sBAAsB;SACvD;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"prose.js","sourceRoot":"","sources":["../src/prose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE;QACvC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;KACpE,CAAC,CAAC;IAEH,kCAAkC;IAClC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
package/dist/ui.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Starts the UI server with watch mode
3
3
  */
4
- export declare function startUIServer(universeRoot: string, port?: number, legacy?: boolean): Promise<void>;
4
+ export declare function startUIServer(universeRoot: string, port?: number): Promise<void>;
5
5
  //# sourceMappingURL=ui.d.ts.map
package/dist/ui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAuNA;;GAEG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,MAAa,EACnB,MAAM,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAuHf"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAuNA;;GAEG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,MAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAqHf"}
package/dist/ui.js CHANGED
@@ -6,6 +6,7 @@ import { createRequire } from "node:module";
6
6
  import chokidar from "chokidar";
7
7
  import { loadProseFiles } from "./prose.js";
8
8
  import { compileUniverse } from "./compiler.js";
9
+ import { printDiagnostics } from "./diagnostics.js";
9
10
  const __filename = fileURLToPath(import.meta.url);
10
11
  const __dirname = dirname(__filename);
11
12
  const require = createRequire(import.meta.url);
@@ -25,14 +26,14 @@ const mimeTypes = {
25
26
  ".eot": "application/vnd.ms-fontobject",
26
27
  };
27
28
  /**
28
- * Resolves the dist directory path for sprig-ui-csr
29
+ * Resolves the dist directory path for sprig-ui
29
30
  * Works for both local and global installations
30
31
  */
31
32
  function resolveUIDist() {
32
33
  try {
33
34
  // Use Node's module resolution to find the package location
34
35
  // This works for both local (node_modules) and global installations
35
- const packageJsonPath = require.resolve("@sprig-and-prose/sprig-ui-csr/package.json");
36
+ const packageJsonPath = require.resolve("@sprig-and-prose/sprig-ui/package.json");
36
37
  const packageDir = dirname(packageJsonPath);
37
38
  const distPath = join(packageDir, "dist");
38
39
  if (existsSync(distPath)) {
@@ -42,12 +43,12 @@ function resolveUIDist() {
42
43
  }
43
44
  catch (error) {
44
45
  // Fallback: try relative to current package (for development)
45
- const fallbackPath = resolve(__dirname, "../../sprig-ui-csr/dist");
46
+ const fallbackPath = resolve(__dirname, "../../sprig-ui/dist");
46
47
  if (existsSync(fallbackPath)) {
47
48
  return fallbackPath;
48
49
  }
49
50
  const errorMessage = error instanceof Error ? error.message : String(error);
50
- throw new Error(`Could not locate sprig-ui-csr dist directory: ${errorMessage}`);
51
+ throw new Error(`Could not locate sprig-ui dist directory: ${errorMessage}`);
51
52
  }
52
53
  }
53
54
  let revisionCounter = 0;
@@ -170,10 +171,10 @@ function createServerHandler(uiDistDir, manifestPath) {
170
171
  * Rebuilds the manifest and broadcasts SSE event
171
172
  * Only broadcasts after successful compile and atomic manifest write
172
173
  */
173
- async function rebuildManifest(universeRoot, manifestPath, legacy) {
174
+ async function rebuildManifest(universeRoot, manifestPath) {
174
175
  try {
175
176
  const files = await loadProseFiles(universeRoot);
176
- const result = await compileUniverse(universeRoot, files, true, { legacy });
177
+ const result = await compileUniverse(universeRoot, files, true);
177
178
  // Only broadcast if compilation succeeded (manifest was atomically written)
178
179
  if (result.success) {
179
180
  broadcastManifestChanged();
@@ -188,19 +189,17 @@ async function rebuildManifest(universeRoot, manifestPath, legacy) {
188
189
  /**
189
190
  * Starts the UI server with watch mode
190
191
  */
191
- export async function startUIServer(universeRoot, port = 6336, legacy = false) {
192
+ export async function startUIServer(universeRoot, port = 6336) {
192
193
  const uiDistDir = resolveUIDist();
193
194
  const manifestPath = join(universeRoot, ".sprig", "manifest.json");
194
195
  // Compile once on startup
195
196
  console.log("Compiling universe...");
196
197
  const files = await loadProseFiles(universeRoot);
197
- const result = await compileUniverse(universeRoot, files, true, { legacy });
198
+ const result = await compileUniverse(universeRoot, files, true);
198
199
  if (!result.success) {
199
200
  const errors = result.diagnostics.filter((d) => d.severity === "error");
200
201
  if (errors.length > 0) {
201
- for (const error of errors) {
202
- console.error(`Error: ${error.message}`);
203
- }
202
+ printDiagnostics(errors, "Error");
204
203
  }
205
204
  process.exit(1);
206
205
  }
@@ -251,7 +250,7 @@ export async function startUIServer(universeRoot, port = 6336, legacy = false) {
251
250
  clearTimeout(rebuildTimeout);
252
251
  }
253
252
  rebuildTimeout = setTimeout(async () => {
254
- const success = await rebuildManifest(universeRoot, manifestPath, legacy);
253
+ const success = await rebuildManifest(universeRoot, manifestPath);
255
254
  if (success) {
256
255
  // One-line status per rebuild (calm output)
257
256
  process.stdout.write("\r✓ Rebuilt\n");
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sprig-and-prose/sprig",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "description": "Sprig CLI tool for compiling and serving universes",
6
6
  "main": "dist/cli.js",
@@ -13,17 +13,14 @@
13
13
  "test": "node --test",
14
14
  "format": "biome format . --write",
15
15
  "lint": "biome lint .",
16
- "typecheck": "tsc --noEmit",
17
- "deps:local": "node scripts/switch-deps.js local && rm package-lock.json && rm -rf node_modules && npm install",
18
- "deps:published": "node scripts/switch-deps.js published && rm package-lock.json && rm -rf node_modules && npm install"
16
+ "typecheck": "tsc --noEmit"
19
17
  },
20
18
  "keywords": [],
21
19
  "author": "",
22
20
  "license": "ISC",
23
21
  "dependencies": {
24
- "@sprig-and-prose/sprig-ui-csr": "^0.3.6",
25
- "@sprig-and-prose/sprig-universe": "^0.5.1",
26
- "@sprig-and-prose/sprig-scenes": "*",
22
+ "@sprig-and-prose/prose-parser": "^0.2.0",
23
+ "@sprig-and-prose/sprig-ui": "^0.1.0",
27
24
  "chokidar": "^3.6.0",
28
25
  "fast-glob": "^3.3.2"
29
26
  },
package/src/cli.ts CHANGED
@@ -3,11 +3,10 @@
3
3
  import { resolve, join } from "node:path";
4
4
  import { existsSync, writeFileSync } from "node:fs";
5
5
  import { discoverUniverseRoot } from "./root.js";
6
- import { discoverSceneFiles } from "./scene-discovery.js";
7
6
  import { loadProseFiles } from "./prose.js";
8
7
  import { compileUniverse } from "./compiler.js";
9
- import { compileScenes } from "./scene-compiler.js";
10
8
  import { startUIServer } from "./ui.js";
9
+ import { printDiagnostics } from "./diagnostics.js";
11
10
 
12
11
  const commands = ["compile", "validate", "ui", "init"] as const;
13
12
  type Command = (typeof commands)[number];
@@ -24,12 +23,10 @@ function printHelp() {
24
23
  console.log("Options:");
25
24
  console.log(" -p, --port <number> Port to listen on (default: 6336)");
26
25
  console.log(" --out <dir> Output directory for manifests (default: .sprig/)");
27
- console.log(" --legacy Use the legacy parser/graph pipeline");
28
26
  console.log("");
29
27
  console.log("Root discovery:");
30
28
  console.log(" - Walks upward from path (or cwd for 'sprig compile')");
31
29
  console.log(" - Finds directory containing universe.prose");
32
- console.log(" - Scene-only mode: requires --out when no universe.prose");
33
30
  }
34
31
 
35
32
  function parseArgs(): {
@@ -38,7 +35,6 @@ function parseArgs(): {
38
35
  pathExplicit: boolean;
39
36
  port?: number;
40
37
  universeName?: string;
41
- legacy?: boolean;
42
38
  out?: string;
43
39
  } {
44
40
  const args = process.argv.slice(2);
@@ -67,7 +63,6 @@ function parseArgs(): {
67
63
  let path = process.cwd();
68
64
  let pathExplicit = false;
69
65
  let port: number | undefined;
70
- let legacy = false;
71
66
  let out: string | undefined;
72
67
 
73
68
  for (let i = 1; i < args.length; i++) {
@@ -93,8 +88,6 @@ function parseArgs(): {
93
88
  }
94
89
  out = resolve(outValue);
95
90
  i++; // Skip the out value
96
- } else if (arg === "--legacy") {
97
- legacy = true;
98
91
  } else if (!arg.startsWith("-")) {
99
92
  // First non-option argument is the path (in-directory)
100
93
  path = resolve(arg);
@@ -106,113 +99,44 @@ function parseArgs(): {
106
99
  }
107
100
  }
108
101
 
109
- return { command, path, pathExplicit, port, legacy, out };
102
+ return { command, path, pathExplicit, port, out };
110
103
  }
111
104
 
112
105
  async function handleCompile(
113
106
  path: string,
114
107
  outDir: string | undefined,
115
- legacy = false,
116
108
  pathExplicit = false,
117
109
  ): Promise<void> {
118
110
  const root = discoverUniverseRoot(path);
119
111
 
120
- if (!pathExplicit) {
121
- // sprig compile (no path): discover from cwd, require universe
122
- if (!root) {
123
- console.error("No universe.prose found.");
124
- process.exit(1);
125
- }
126
- const outputDir = outDir || join(root, ".sprig");
127
- await runUniverseCompile(root, outputDir, legacy);
128
- return;
129
- }
130
-
131
- // sprig compile <in-directory>: path was explicitly provided
132
- if (root) {
133
- // Universe found: output to in-directory/.sprig or --out
134
- const outputDir = outDir || join(path, ".sprig");
135
- await runUniverseCompile(root, outputDir, legacy);
136
- return;
137
- }
138
-
139
- // Universe not found: scene-only gated by --out
140
- if (!outDir) {
141
- console.error(`No universe.prose found for ${path}. Provide --out <out-directory> to compile scenes only.`);
142
- process.exit(1);
143
- }
144
-
145
- const discovery = discoverSceneFiles(path);
146
- if (!discovery) {
147
- console.error("No universe.prose found and no *.scene.prose files found in:", path);
148
- process.exit(1);
149
- }
150
-
151
- const sceneResult = await compileScenes(discovery.searchRoot, outDir, {
152
- sceneFiles: discovery.sceneFiles,
153
- emitManifests: true,
154
- });
155
-
156
- const errors = sceneResult.diagnostics.filter((d) => d.severity === "error");
157
- const warnings = sceneResult.diagnostics.filter((d) => d.severity === "warning");
158
-
159
- if (!sceneResult.success) {
160
- if (errors.length > 0) {
161
- printDiagnostics(errors, "Error");
162
- }
112
+ if (!root) {
113
+ const target = pathExplicit ? path : process.cwd();
114
+ console.error(`No universe.prose found for ${target}.`);
163
115
  process.exit(1);
164
116
  }
165
117
 
166
- const sceneCount = sceneResult.scenes.length;
167
- const scenesText = sceneCount === 1 ? "scene" : "scenes";
168
- console.log(`✓ Compiled ${sceneCount} ${scenesText}`);
169
-
170
- if (warnings.length > 0) {
171
- console.log("");
172
- printDiagnostics(warnings, "Warning");
173
- }
174
- }
175
-
176
- async function runUniverseCompile(
177
- root: string,
178
- outputDir: string,
179
- legacy: boolean,
180
- ): Promise<void> {
118
+ const outputDir = outDir || (pathExplicit ? join(path, ".sprig") : join(root, ".sprig"));
181
119
  const files = await loadProseFiles(root);
182
- const universeResult = await compileUniverse(root, files, true, { legacy, outputDir });
120
+ const result = await compileUniverse(root, files, true, { outputDir });
183
121
 
184
- if (!universeResult.success) {
185
- const errors = universeResult.diagnostics.filter((d) => d.severity === "error");
186
- if (errors.length > 0) {
187
- printDiagnostics(errors, "Error");
188
- }
189
- process.exit(1);
190
- }
191
-
192
- const sceneResult = await compileScenes(root, outputDir);
193
-
194
- const allDiagnostics = [...universeResult.diagnostics, ...sceneResult.diagnostics];
195
- const errors = allDiagnostics.filter((d) => d.severity === "error");
196
- const warnings = allDiagnostics.filter((d) => d.severity === "warning");
197
-
198
- if (!sceneResult.success) {
122
+ if (!result.success) {
123
+ const errors = result.diagnostics.filter((d) => d.severity === "error");
199
124
  if (errors.length > 0) {
200
125
  printDiagnostics(errors, "Error");
201
126
  }
202
127
  process.exit(1);
203
128
  }
204
129
 
205
- const sceneCount = sceneResult.scenes.length;
206
- const scenesText = sceneCount === 1 ? "scene" : "scenes";
207
- console.log(`✓ Compiled 1 universe + ${sceneCount} ${scenesText}`);
130
+ console.log("✓ Compiled 1 universe");
208
131
 
132
+ const warnings = result.diagnostics.filter((d) => d.severity === "warning");
209
133
  if (warnings.length > 0) {
210
134
  console.log("");
211
135
  printDiagnostics(warnings, "Warning");
212
136
  }
213
137
  }
214
138
 
215
- async function handleValidate(path: string, legacy = false): Promise<void> {
139
+ async function handleValidate(path: string): Promise<void> {
216
140
  const root = discoverUniverseRoot(path);
217
141
  if (!root) {
218
142
  console.error("Couldn't find universe.prose");
@@ -222,7 +146,7 @@ async function handleValidate(path: string, legacy = false): Promise<void> {
222
146
  }
223
147
 
224
148
  const files = await loadProseFiles(root);
225
- const result = await compileUniverse(root, files, false, { legacy });
149
+ const result = await compileUniverse(root, files, false);
226
150
 
227
151
  if (!result.success) {
228
152
  const errors = result.diagnostics.filter((d) => d.severity === "error");
@@ -238,77 +162,6 @@ async function handleValidate(path: string, legacy = false): Promise<void> {
238
162
  }
239
163
  }
240
164
 
241
- type Diagnostic = { severity: string; message: string; source?: unknown };
242
-
243
- function printDiagnostics(diagnostics: Diagnostic[], label: "Error" | "Warning"): void {
244
- const grouped = new Map<
245
- string,
246
- { count: number; diagnostic: Diagnostic; diagnosticWithSource: Diagnostic | null }
247
- >();
248
-
249
- for (const diag of diagnostics) {
250
- const key = diag.message;
251
- const entry =
252
- grouped.get(key) || { count: 0, diagnostic: diag, diagnosticWithSource: null };
253
- entry.count += 1;
254
- if (formatSource(diag.source)) {
255
- if (!entry.diagnosticWithSource) {
256
- entry.diagnosticWithSource = diag;
257
- }
258
- }
259
- grouped.set(key, entry);
260
- }
261
-
262
- const entries = Array.from(grouped.values());
263
- entries.forEach(({ count, diagnostic, diagnosticWithSource }, index) => {
264
- const source = formatSource(diagnosticWithSource?.source || diagnostic.source);
265
- const countText = count > 1 ? ` (and ${count - 1} more)` : "";
266
- const location = source ? `${source}: ` : "";
267
- const message = `${label}: ${location}${diagnostic.message}${countText}`;
268
- console.error(message);
269
- if (index < entries.length - 1) {
270
- console.error("");
271
- }
272
- });
273
- }
274
-
275
- function formatSource(source: unknown): string | null {
276
- if (!source) {
277
- return null;
278
- }
279
-
280
- if (typeof source === "string") {
281
- return source;
282
- }
283
-
284
- if (typeof source !== "object") {
285
- return null;
286
- }
287
-
288
- const candidate = source as {
289
- file?: string;
290
- line?: number;
291
- col?: number;
292
- start?: { line?: number; col?: number };
293
- source?: { file?: string; start?: { line?: number; col?: number } };
294
- location?: { file?: string; start?: { line?: number; col?: number } };
295
- };
296
-
297
- const span = candidate.source || candidate.location || candidate;
298
- if (!span.file) {
299
- return null;
300
- }
301
-
302
- const line = span.start?.line ?? candidate.line;
303
- const col = span.start?.col ?? candidate.col;
304
-
305
- if (!line) {
306
- return span.file;
307
- }
308
-
309
- return `${span.file}:${line}${col ? `:${col}` : ""}`;
310
- }
311
-
312
165
  export async function handleInit(universeName: string, path: string): Promise<void> {
313
166
  if (!universeName) {
314
167
  console.error("Usage: sprig init <UniverseName>");
@@ -326,7 +179,7 @@ export async function handleInit(universeName: string, path: string): Promise<vo
326
179
  try {
327
180
  if (!universeProseExists) {
328
181
  const universeProseContent = `universe ${universeName} {
329
- note {
182
+ describe {
330
183
  This universe is prose-first.
331
184
 
332
185
  It contains no executable code.
@@ -359,7 +212,7 @@ This repository contains **no executable code**.
359
212
  ## Learn more
360
213
 
361
214
  - sprig & prose: https://sprig-and-prose.io
362
- - language reference: https://sprig-and-prose.io/reference
215
+ - language reference: https://sprig-and-prose.io/docs
363
216
 
364
217
  ## Notes
365
218
 
@@ -386,7 +239,7 @@ Structure may change. Meaning is preserved.
386
239
  }
387
240
  }
388
241
 
389
- async function handleUI(path: string, port?: number, legacy = false): Promise<void> {
242
+ async function handleUI(path: string, port?: number): Promise<void> {
390
243
  const root = discoverUniverseRoot(path);
391
244
  if (!root) {
392
245
  console.error("Couldn't find universe.prose");
@@ -395,11 +248,11 @@ async function handleUI(path: string, port?: number, legacy = false): Promise<vo
395
248
  process.exit(1);
396
249
  }
397
250
 
398
- await startUIServer(root, port, legacy);
251
+ await startUIServer(root, port);
399
252
  }
400
253
 
401
254
  async function main() {
402
- const { command, path, pathExplicit, port, universeName, legacy, out } = parseArgs();
255
+ const { command, path, pathExplicit, port, universeName, out } = parseArgs();
403
256
 
404
257
  if (!command) {
405
258
  printHelp();
@@ -409,13 +262,13 @@ async function main() {
409
262
  try {
410
263
  switch (command) {
411
264
  case "compile":
412
- await handleCompile(path, out, legacy, pathExplicit);
265
+ await handleCompile(path, out, pathExplicit);
413
266
  break;
414
267
  case "validate":
415
- await handleValidate(path, legacy);
268
+ await handleValidate(path);
416
269
  break;
417
270
  case "ui":
418
- await handleUI(path, port, legacy);
271
+ await handleUI(path, port);
419
272
  break;
420
273
  case "init":
421
274
  if (!universeName) {