@sprig-and-prose/sprig 0.5.1 → 0.6.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.
- package/CHANGELOG.md +12 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -9
- package/dist/cli.js.map +1 -1
- package/dist/compiler.d.ts +6 -0
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +26 -2
- package/dist/compiler.js.map +1 -1
- package/dist/prose.d.ts +1 -1
- package/dist/prose.d.ts.map +1 -1
- package/dist/prose.js +5 -2
- package/dist/prose.js.map +1 -1
- package/dist/scene-compiler.d.ts +18 -0
- package/dist/scene-compiler.d.ts.map +1 -0
- package/dist/scene-compiler.js +115 -0
- package/dist/scene-compiler.js.map +1 -0
- package/package.json +3 -2
- package/src/cli.ts +45 -9
- package/src/compiler.ts +29 -4
- package/src/prose.ts +5 -2
- package/src/scene-compiler.ts +131 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# @sprig-and-prose/sprig
|
|
2
|
+
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9557987: Add dataset expectations, sprig-edge initial commit, and scene tutorial scaffolder
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [9557987]
|
|
12
|
+
- @sprig-and-prose/sprig-scenes@0.1.1
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA6PA,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ElF"}
|
package/dist/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { existsSync, writeFileSync } from "node:fs";
|
|
|
4
4
|
import { discoverUniverseRoot } from "./root.js";
|
|
5
5
|
import { loadProseFiles } from "./prose.js";
|
|
6
6
|
import { compileUniverse } from "./compiler.js";
|
|
7
|
+
import { compileScenes } from "./scene-compiler.js";
|
|
7
8
|
import { startUIServer } from "./ui.js";
|
|
8
9
|
const commands = ["compile", "validate", "ui", "init"];
|
|
9
10
|
function printHelp() {
|
|
@@ -17,6 +18,7 @@ function printHelp() {
|
|
|
17
18
|
console.log("");
|
|
18
19
|
console.log("Options:");
|
|
19
20
|
console.log(" -p, --port <number> Port to listen on (default: 6336)");
|
|
21
|
+
console.log(" --out <dir> Output directory for manifests (default: .sprig/)");
|
|
20
22
|
console.log(" --legacy Use the legacy parser/graph pipeline");
|
|
21
23
|
console.log("");
|
|
22
24
|
console.log("Root discovery:");
|
|
@@ -46,6 +48,7 @@ function parseArgs() {
|
|
|
46
48
|
let path = process.cwd();
|
|
47
49
|
let port;
|
|
48
50
|
let legacy = false;
|
|
51
|
+
let out;
|
|
49
52
|
for (let i = 1; i < args.length; i++) {
|
|
50
53
|
const arg = args[i];
|
|
51
54
|
if (arg === "--port" || arg === "-p") {
|
|
@@ -62,6 +65,15 @@ function parseArgs() {
|
|
|
62
65
|
port = parsedPort;
|
|
63
66
|
i++; // Skip the port value
|
|
64
67
|
}
|
|
68
|
+
else if (arg === "--out") {
|
|
69
|
+
const outValue = args[i + 1];
|
|
70
|
+
if (!outValue) {
|
|
71
|
+
console.error("Error: --out requires a value");
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
out = resolve(outValue);
|
|
75
|
+
i++; // Skip the out value
|
|
76
|
+
}
|
|
65
77
|
else if (arg === "--legacy") {
|
|
66
78
|
legacy = true;
|
|
67
79
|
}
|
|
@@ -75,27 +87,46 @@ function parseArgs() {
|
|
|
75
87
|
process.exit(1);
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
|
-
return { command, path, port, legacy };
|
|
90
|
+
return { command, path, port, legacy, out };
|
|
79
91
|
}
|
|
80
|
-
async function handleCompile(path, legacy = false) {
|
|
92
|
+
async function handleCompile(path, outDir, legacy = false) {
|
|
81
93
|
const root = discoverUniverseRoot(path);
|
|
82
94
|
if (!root) {
|
|
83
|
-
console.error("
|
|
95
|
+
console.error("Could not find universe.prose when walking upward from", path);
|
|
84
96
|
console.error("");
|
|
85
97
|
console.error("Make sure you're inside a universe repository.");
|
|
86
98
|
process.exit(1);
|
|
87
99
|
}
|
|
100
|
+
// Resolve output directory: --out flag takes precedence over default
|
|
101
|
+
const outputDir = outDir || join(root, ".sprig");
|
|
102
|
+
// Compile universe
|
|
88
103
|
const files = await loadProseFiles(root);
|
|
89
|
-
const
|
|
90
|
-
if (!
|
|
91
|
-
const errors =
|
|
104
|
+
const universeResult = await compileUniverse(root, files, true, { legacy, outputDir });
|
|
105
|
+
if (!universeResult.success) {
|
|
106
|
+
const errors = universeResult.diagnostics.filter((d) => d.severity === "error");
|
|
92
107
|
if (errors.length > 0) {
|
|
93
108
|
printDiagnostics(errors, "Error");
|
|
94
109
|
}
|
|
95
110
|
process.exit(1);
|
|
96
111
|
}
|
|
97
|
-
|
|
112
|
+
// Compile scenes
|
|
113
|
+
const sceneResult = await compileScenes(root, outputDir);
|
|
114
|
+
// Combine diagnostics
|
|
115
|
+
const allDiagnostics = [...universeResult.diagnostics, ...sceneResult.diagnostics];
|
|
116
|
+
const errors = allDiagnostics.filter((d) => d.severity === "error");
|
|
117
|
+
const warnings = allDiagnostics.filter((d) => d.severity === "warning");
|
|
118
|
+
if (!sceneResult.success) {
|
|
119
|
+
if (errors.length > 0) {
|
|
120
|
+
printDiagnostics(errors, "Error");
|
|
121
|
+
}
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
// Print summary
|
|
125
|
+
const sceneCount = sceneResult.scenes.length;
|
|
126
|
+
const scenesText = sceneCount === 1 ? "scene" : "scenes";
|
|
127
|
+
console.log(`✓ Compiled 1 universe + ${sceneCount} ${scenesText}`);
|
|
98
128
|
if (warnings.length > 0) {
|
|
129
|
+
console.log("");
|
|
99
130
|
printDiagnostics(warnings, "Warning");
|
|
100
131
|
}
|
|
101
132
|
}
|
|
@@ -253,7 +284,7 @@ async function handleUI(path, port, legacy = false) {
|
|
|
253
284
|
await startUIServer(root, port, legacy);
|
|
254
285
|
}
|
|
255
286
|
async function main() {
|
|
256
|
-
const { command, path, port, universeName, legacy } = parseArgs();
|
|
287
|
+
const { command, path, port, universeName, legacy, out } = parseArgs();
|
|
257
288
|
if (!command) {
|
|
258
289
|
printHelp();
|
|
259
290
|
process.exit(0);
|
|
@@ -261,7 +292,7 @@ async function main() {
|
|
|
261
292
|
try {
|
|
262
293
|
switch (command) {
|
|
263
294
|
case "compile":
|
|
264
|
-
await handleCompile(path, legacy);
|
|
295
|
+
await handleCompile(path, out, legacy);
|
|
265
296
|
break;
|
|
266
297
|
case "validate":
|
|
267
298
|
await handleValidate(path, legacy);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export interface CompileResult {
|
|
|
3
3
|
manifest?: Record<string, unknown> & {
|
|
4
4
|
repositories?: Record<string, unknown>;
|
|
5
5
|
generatedAt: string;
|
|
6
|
+
meta?: {
|
|
7
|
+
generatedAt: string;
|
|
8
|
+
manifestId: string;
|
|
9
|
+
};
|
|
6
10
|
};
|
|
7
11
|
diagnostics: Array<{
|
|
8
12
|
severity: string;
|
|
@@ -15,9 +19,11 @@ export interface CompileResult {
|
|
|
15
19
|
* @param universeRoot - Universe root directory
|
|
16
20
|
* @param files - Array of prose file paths
|
|
17
21
|
* @param writeManifest - If true, write manifest to disk
|
|
22
|
+
* @param options - Compilation options (legacy, outputDir)
|
|
18
23
|
* @returns Compile result with success status, manifest, and diagnostics
|
|
19
24
|
*/
|
|
20
25
|
export declare function compileUniverse(universeRoot: string, files: string[], writeManifest?: boolean, options?: {
|
|
21
26
|
legacy?: boolean;
|
|
27
|
+
outputDir?: string;
|
|
22
28
|
}): Promise<CompileResult>;
|
|
23
29
|
//# sourceMappingURL=compiler.d.ts.map
|
package/dist/compiler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACzJ,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC7E;AA0DD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,UAAO,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,aAAa,CAAC,CAsFxB"}
|
package/dist/compiler.js
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
|
|
2
2
|
import { join, dirname } from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
3
4
|
// @ts-expect-error - sprig-universe doesn't have TypeScript types
|
|
4
5
|
import { parseFiles, parseFilesLegacy } from "@sprig-and-prose/sprig-universe";
|
|
6
|
+
/**
|
|
7
|
+
* Generate manifestId: git:<sha> if available, else time:<iso>
|
|
8
|
+
*/
|
|
9
|
+
function generateManifestId() {
|
|
10
|
+
try {
|
|
11
|
+
const sha = execSync("git rev-parse HEAD", { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
12
|
+
if (sha) {
|
|
13
|
+
return `git:${sha}`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Git not available or not in a git repo
|
|
18
|
+
}
|
|
19
|
+
return `time:${new Date().toISOString()}`;
|
|
20
|
+
}
|
|
5
21
|
/**
|
|
6
22
|
* Validates that exactly one universe declaration exists in the parsed graph
|
|
7
23
|
*/
|
|
@@ -40,10 +56,12 @@ function validateUniverseCount(graph) {
|
|
|
40
56
|
* @param universeRoot - Universe root directory
|
|
41
57
|
* @param files - Array of prose file paths
|
|
42
58
|
* @param writeManifest - If true, write manifest to disk
|
|
59
|
+
* @param options - Compilation options (legacy, outputDir)
|
|
43
60
|
* @returns Compile result with success status, manifest, and diagnostics
|
|
44
61
|
*/
|
|
45
62
|
export async function compileUniverse(universeRoot, files, writeManifest = true, options) {
|
|
46
|
-
const
|
|
63
|
+
const outputDir = options?.outputDir || join(universeRoot, ".sprig");
|
|
64
|
+
const manifestPath = join(outputDir, "manifest.json");
|
|
47
65
|
const useLegacy = options?.legacy ?? false;
|
|
48
66
|
// Read and parse files
|
|
49
67
|
const fileContents = files.map((file) => ({
|
|
@@ -66,10 +84,16 @@ export async function compileUniverse(universeRoot, files, writeManifest = true,
|
|
|
66
84
|
};
|
|
67
85
|
}
|
|
68
86
|
// Add repositories and metadata to manifest
|
|
87
|
+
const generatedAt = new Date().toISOString();
|
|
88
|
+
const manifestId = generateManifestId();
|
|
69
89
|
const manifest = {
|
|
70
90
|
...graph,
|
|
71
91
|
repositories: graph.repositories || {},
|
|
72
|
-
generatedAt
|
|
92
|
+
generatedAt,
|
|
93
|
+
meta: {
|
|
94
|
+
generatedAt,
|
|
95
|
+
manifestId,
|
|
96
|
+
},
|
|
73
97
|
};
|
|
74
98
|
// Check for parsing errors
|
|
75
99
|
const hasErrors = graph.diagnostics.some((d) => d.severity === "error");
|
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,kEAAkE;AAClE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQ/E;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAA8B;IAK3D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAgD,CAAC;IACzE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAEnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,+EAA+E;SACvF,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAmE,CAAC;QACxF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;aACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,IAAI,CAAkC,CAAC;YACpE,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,OAAO,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC;QAC7C,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,eAAe;aACzE,IAAI,EAAE;aACN,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,sCAAsC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,QAAQ,iDAAiD;SAC3I,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/prose.d.ts
CHANGED
package/dist/prose.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose.d.ts","sourceRoot":"","sources":["../src/prose.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"prose.d.ts","sourceRoot":"","sources":["../src/prose.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYpE"}
|
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 with default excludes
|
|
5
|
+
* Loads all .prose files under root (excluding .scene.prose files) with default excludes
|
|
6
6
|
* @param root - Universe root directory
|
|
7
7
|
* @returns Array of prose file paths, sorted deterministically
|
|
8
8
|
*/
|
|
@@ -10,7 +10,10 @@ 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:
|
|
13
|
+
ignore: [
|
|
14
|
+
...DEFAULT_EXCLUDES.map((exclude) => join(root, exclude)),
|
|
15
|
+
join(root, "**/*.scene.prose"), // Exclude scene files
|
|
16
|
+
],
|
|
14
17
|
});
|
|
15
18
|
// Sort for deterministic ordering
|
|
16
19
|
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,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,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;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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SceneCompileResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
scenes: string[];
|
|
4
|
+
diagnostics: Array<{
|
|
5
|
+
severity: string;
|
|
6
|
+
message: string;
|
|
7
|
+
source?: unknown;
|
|
8
|
+
scene?: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Compile all scene files in the universe
|
|
13
|
+
* @param universeRoot - Universe root directory
|
|
14
|
+
* @param outputDir - Output directory for scene manifests
|
|
15
|
+
* @returns Compile result with success status and list of compiled scenes
|
|
16
|
+
*/
|
|
17
|
+
export declare function compileScenes(universeRoot: string, outputDir: string): Promise<SceneCompileResult>;
|
|
18
|
+
//# sourceMappingURL=scene-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-compiler.d.ts","sourceRoot":"","sources":["../src/scene-compiler.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7F;AAiBD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA4F7B"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import fg from "fast-glob";
|
|
5
|
+
// Import directly from compile_scene to avoid scene-engine dependency
|
|
6
|
+
// @ts-expect-error - sprig-scenes doesn't have full TypeScript types
|
|
7
|
+
import { compileSceneFromText } from "@sprig-and-prose/sprig-scenes/compiler/compile_scene";
|
|
8
|
+
/**
|
|
9
|
+
* Generate manifestId: git:<sha> if available, else time:<iso>
|
|
10
|
+
*/
|
|
11
|
+
function generateManifestId() {
|
|
12
|
+
try {
|
|
13
|
+
const sha = execSync("git rev-parse HEAD", { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
14
|
+
if (sha) {
|
|
15
|
+
return `git:${sha}`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Git not available or not in a git repo
|
|
20
|
+
}
|
|
21
|
+
return `time:${new Date().toISOString()}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compile all scene files in the universe
|
|
25
|
+
* @param universeRoot - Universe root directory
|
|
26
|
+
* @param outputDir - Output directory for scene manifests
|
|
27
|
+
* @returns Compile result with success status and list of compiled scenes
|
|
28
|
+
*/
|
|
29
|
+
export async function compileScenes(universeRoot, outputDir) {
|
|
30
|
+
const diagnostics = [];
|
|
31
|
+
const compiledScenes = [];
|
|
32
|
+
try {
|
|
33
|
+
// Find all .scene.prose files
|
|
34
|
+
const sceneFiles = await fg("**/*.scene.prose", {
|
|
35
|
+
cwd: universeRoot,
|
|
36
|
+
absolute: true,
|
|
37
|
+
ignore: ["node_modules/**", ".git/**"],
|
|
38
|
+
});
|
|
39
|
+
if (sceneFiles.length === 0) {
|
|
40
|
+
// No scenes to compile is not an error
|
|
41
|
+
return {
|
|
42
|
+
success: true,
|
|
43
|
+
scenes: [],
|
|
44
|
+
diagnostics: [],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Ensure output directory exists
|
|
48
|
+
try {
|
|
49
|
+
mkdirSync(outputDir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
// Directory might already exist, ignore
|
|
53
|
+
}
|
|
54
|
+
const generatedAt = new Date().toISOString();
|
|
55
|
+
const manifestId = generateManifestId();
|
|
56
|
+
// Compile each scene
|
|
57
|
+
for (const sceneFile of sceneFiles) {
|
|
58
|
+
try {
|
|
59
|
+
const sourceText = readFileSync(sceneFile, "utf-8");
|
|
60
|
+
const manifest = compileSceneFromText(sourceText);
|
|
61
|
+
if (!manifest || !manifest.sceneName) {
|
|
62
|
+
diagnostics.push({
|
|
63
|
+
severity: "error",
|
|
64
|
+
message: `Failed to compile scene: no sceneName found`,
|
|
65
|
+
source: sceneFile,
|
|
66
|
+
});
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Inject metadata
|
|
70
|
+
const manifestWithMeta = {
|
|
71
|
+
...manifest,
|
|
72
|
+
meta: {
|
|
73
|
+
generatedAt,
|
|
74
|
+
manifestId,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
// Write to output directory
|
|
78
|
+
const outputPath = join(outputDir, `${manifest.sceneName}.scene.json`);
|
|
79
|
+
const tempPath = `${outputPath}.tmp`;
|
|
80
|
+
const json = JSON.stringify(manifestWithMeta, null, 2);
|
|
81
|
+
writeFileSync(tempPath, json, "utf-8");
|
|
82
|
+
renameSync(tempPath, outputPath);
|
|
83
|
+
compiledScenes.push(manifest.sceneName);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
87
|
+
diagnostics.push({
|
|
88
|
+
severity: "error",
|
|
89
|
+
message: `Scene compilation error: ${message}`,
|
|
90
|
+
source: sceneFile,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const hasErrors = diagnostics.some((d) => d.severity === "error");
|
|
95
|
+
return {
|
|
96
|
+
success: !hasErrors,
|
|
97
|
+
scenes: compiledScenes,
|
|
98
|
+
diagnostics,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
scenes: [],
|
|
106
|
+
diagnostics: [
|
|
107
|
+
{
|
|
108
|
+
severity: "error",
|
|
109
|
+
message: `Scene discovery error: ${message}`,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=scene-compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-compiler.js","sourceRoot":"","sources":["../src/scene-compiler.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.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Sprig CLI tool for compiling and serving universes",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -21,8 +21,9 @@
|
|
|
21
21
|
"author": "",
|
|
22
22
|
"license": "ISC",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@sprig-and-prose/sprig-universe": "^0.5.1",
|
|
25
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": "*",
|
|
26
27
|
"chokidar": "^3.6.0",
|
|
27
28
|
"fast-glob": "^3.3.2"
|
|
28
29
|
},
|
package/src/cli.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { existsSync, writeFileSync } from "node:fs";
|
|
|
5
5
|
import { discoverUniverseRoot } from "./root.js";
|
|
6
6
|
import { loadProseFiles } from "./prose.js";
|
|
7
7
|
import { compileUniverse } from "./compiler.js";
|
|
8
|
+
import { compileScenes } from "./scene-compiler.js";
|
|
8
9
|
import { startUIServer } from "./ui.js";
|
|
9
10
|
|
|
10
11
|
const commands = ["compile", "validate", "ui", "init"] as const;
|
|
@@ -21,6 +22,7 @@ function printHelp() {
|
|
|
21
22
|
console.log("");
|
|
22
23
|
console.log("Options:");
|
|
23
24
|
console.log(" -p, --port <number> Port to listen on (default: 6336)");
|
|
25
|
+
console.log(" --out <dir> Output directory for manifests (default: .sprig/)");
|
|
24
26
|
console.log(" --legacy Use the legacy parser/graph pipeline");
|
|
25
27
|
console.log("");
|
|
26
28
|
console.log("Root discovery:");
|
|
@@ -34,6 +36,7 @@ function parseArgs(): {
|
|
|
34
36
|
port?: number;
|
|
35
37
|
universeName?: string;
|
|
36
38
|
legacy?: boolean;
|
|
39
|
+
out?: string;
|
|
37
40
|
} {
|
|
38
41
|
const args = process.argv.slice(2);
|
|
39
42
|
|
|
@@ -61,6 +64,7 @@ function parseArgs(): {
|
|
|
61
64
|
let path = process.cwd();
|
|
62
65
|
let port: number | undefined;
|
|
63
66
|
let legacy = false;
|
|
67
|
+
let out: string | undefined;
|
|
64
68
|
|
|
65
69
|
for (let i = 1; i < args.length; i++) {
|
|
66
70
|
const arg = args[i];
|
|
@@ -77,6 +81,14 @@ function parseArgs(): {
|
|
|
77
81
|
}
|
|
78
82
|
port = parsedPort;
|
|
79
83
|
i++; // Skip the port value
|
|
84
|
+
} else if (arg === "--out") {
|
|
85
|
+
const outValue = args[i + 1];
|
|
86
|
+
if (!outValue) {
|
|
87
|
+
console.error("Error: --out requires a value");
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
out = resolve(outValue);
|
|
91
|
+
i++; // Skip the out value
|
|
80
92
|
} else if (arg === "--legacy") {
|
|
81
93
|
legacy = true;
|
|
82
94
|
} else if (!arg.startsWith("-")) {
|
|
@@ -89,31 +101,55 @@ function parseArgs(): {
|
|
|
89
101
|
}
|
|
90
102
|
}
|
|
91
103
|
|
|
92
|
-
return { command, path, port, legacy };
|
|
104
|
+
return { command, path, port, legacy, out };
|
|
93
105
|
}
|
|
94
106
|
|
|
95
|
-
async function handleCompile(path: string, legacy = false): Promise<void> {
|
|
107
|
+
async function handleCompile(path: string, outDir: string | undefined, legacy = false): Promise<void> {
|
|
96
108
|
const root = discoverUniverseRoot(path);
|
|
97
109
|
if (!root) {
|
|
98
|
-
console.error("
|
|
110
|
+
console.error("Could not find universe.prose when walking upward from", path);
|
|
99
111
|
console.error("");
|
|
100
112
|
console.error("Make sure you're inside a universe repository.");
|
|
101
113
|
process.exit(1);
|
|
102
114
|
}
|
|
103
115
|
|
|
116
|
+
// Resolve output directory: --out flag takes precedence over default
|
|
117
|
+
const outputDir = outDir || join(root, ".sprig");
|
|
118
|
+
|
|
119
|
+
// Compile universe
|
|
104
120
|
const files = await loadProseFiles(root);
|
|
105
|
-
const
|
|
121
|
+
const universeResult = await compileUniverse(root, files, true, { legacy, outputDir });
|
|
106
122
|
|
|
107
|
-
if (!
|
|
108
|
-
const errors =
|
|
123
|
+
if (!universeResult.success) {
|
|
124
|
+
const errors = universeResult.diagnostics.filter((d) => d.severity === "error");
|
|
109
125
|
if (errors.length > 0) {
|
|
110
126
|
printDiagnostics(errors, "Error");
|
|
111
127
|
}
|
|
112
128
|
process.exit(1);
|
|
113
129
|
}
|
|
114
130
|
|
|
115
|
-
|
|
131
|
+
// Compile scenes
|
|
132
|
+
const sceneResult = await compileScenes(root, outputDir);
|
|
133
|
+
|
|
134
|
+
// Combine diagnostics
|
|
135
|
+
const allDiagnostics = [...universeResult.diagnostics, ...sceneResult.diagnostics];
|
|
136
|
+
const errors = allDiagnostics.filter((d) => d.severity === "error");
|
|
137
|
+
const warnings = allDiagnostics.filter((d) => d.severity === "warning");
|
|
138
|
+
|
|
139
|
+
if (!sceneResult.success) {
|
|
140
|
+
if (errors.length > 0) {
|
|
141
|
+
printDiagnostics(errors, "Error");
|
|
142
|
+
}
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Print summary
|
|
147
|
+
const sceneCount = sceneResult.scenes.length;
|
|
148
|
+
const scenesText = sceneCount === 1 ? "scene" : "scenes";
|
|
149
|
+
console.log(`✓ Compiled 1 universe + ${sceneCount} ${scenesText}`);
|
|
150
|
+
|
|
116
151
|
if (warnings.length > 0) {
|
|
152
|
+
console.log("");
|
|
117
153
|
printDiagnostics(warnings, "Warning");
|
|
118
154
|
}
|
|
119
155
|
}
|
|
@@ -305,7 +341,7 @@ async function handleUI(path: string, port?: number, legacy = false): Promise<vo
|
|
|
305
341
|
}
|
|
306
342
|
|
|
307
343
|
async function main() {
|
|
308
|
-
const { command, path, port, universeName, legacy } = parseArgs();
|
|
344
|
+
const { command, path, port, universeName, legacy, out } = parseArgs();
|
|
309
345
|
|
|
310
346
|
if (!command) {
|
|
311
347
|
printHelp();
|
|
@@ -315,7 +351,7 @@ async function main() {
|
|
|
315
351
|
try {
|
|
316
352
|
switch (command) {
|
|
317
353
|
case "compile":
|
|
318
|
-
await handleCompile(path, legacy);
|
|
354
|
+
await handleCompile(path, out, legacy);
|
|
319
355
|
break;
|
|
320
356
|
case "validate":
|
|
321
357
|
await handleValidate(path, legacy);
|
package/src/compiler.ts
CHANGED
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
|
|
2
2
|
import { join, dirname } from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
3
4
|
// @ts-expect-error - sprig-universe doesn't have TypeScript types
|
|
4
5
|
import { parseFiles, parseFilesLegacy } from "@sprig-and-prose/sprig-universe";
|
|
5
6
|
|
|
6
7
|
export interface CompileResult {
|
|
7
8
|
success: boolean;
|
|
8
|
-
manifest?: Record<string, unknown> & { repositories?: Record<string, unknown>; generatedAt: string };
|
|
9
|
+
manifest?: Record<string, unknown> & { repositories?: Record<string, unknown>; generatedAt: string; meta?: { generatedAt: string; manifestId: string } };
|
|
9
10
|
diagnostics: Array<{ severity: string; message: string; source?: unknown }>;
|
|
10
11
|
}
|
|
11
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Generate manifestId: git:<sha> if available, else time:<iso>
|
|
15
|
+
*/
|
|
16
|
+
function generateManifestId(): string {
|
|
17
|
+
try {
|
|
18
|
+
const sha = execSync("git rev-parse HEAD", { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
19
|
+
if (sha) {
|
|
20
|
+
return `git:${sha}`;
|
|
21
|
+
}
|
|
22
|
+
} catch {
|
|
23
|
+
// Git not available or not in a git repo
|
|
24
|
+
}
|
|
25
|
+
return `time:${new Date().toISOString()}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
12
28
|
/**
|
|
13
29
|
* Validates that exactly one universe declaration exists in the parsed graph
|
|
14
30
|
*/
|
|
@@ -55,15 +71,17 @@ function validateUniverseCount(graph: Record<string, unknown>): {
|
|
|
55
71
|
* @param universeRoot - Universe root directory
|
|
56
72
|
* @param files - Array of prose file paths
|
|
57
73
|
* @param writeManifest - If true, write manifest to disk
|
|
74
|
+
* @param options - Compilation options (legacy, outputDir)
|
|
58
75
|
* @returns Compile result with success status, manifest, and diagnostics
|
|
59
76
|
*/
|
|
60
77
|
export async function compileUniverse(
|
|
61
78
|
universeRoot: string,
|
|
62
79
|
files: string[],
|
|
63
80
|
writeManifest = true,
|
|
64
|
-
options?: { legacy?: boolean },
|
|
81
|
+
options?: { legacy?: boolean; outputDir?: string },
|
|
65
82
|
): Promise<CompileResult> {
|
|
66
|
-
const
|
|
83
|
+
const outputDir = options?.outputDir || join(universeRoot, ".sprig");
|
|
84
|
+
const manifestPath = join(outputDir, "manifest.json");
|
|
67
85
|
const useLegacy = options?.legacy ?? false;
|
|
68
86
|
|
|
69
87
|
// Read and parse files
|
|
@@ -90,10 +108,17 @@ export async function compileUniverse(
|
|
|
90
108
|
}
|
|
91
109
|
|
|
92
110
|
// Add repositories and metadata to manifest
|
|
111
|
+
const generatedAt = new Date().toISOString();
|
|
112
|
+
const manifestId = generateManifestId();
|
|
113
|
+
|
|
93
114
|
const manifest = {
|
|
94
115
|
...graph,
|
|
95
116
|
repositories: graph.repositories || {},
|
|
96
|
-
generatedAt
|
|
117
|
+
generatedAt,
|
|
118
|
+
meta: {
|
|
119
|
+
generatedAt,
|
|
120
|
+
manifestId,
|
|
121
|
+
},
|
|
97
122
|
};
|
|
98
123
|
|
|
99
124
|
// Check for parsing errors
|
package/src/prose.ts
CHANGED
|
@@ -4,7 +4,7 @@ import fastGlob from "fast-glob";
|
|
|
4
4
|
const DEFAULT_EXCLUDES = [".sprig/**", "dist/**", "node_modules/**", ".git/**"];
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Loads all .prose files under root with default excludes
|
|
7
|
+
* Loads all .prose files under root (excluding .scene.prose files) with default excludes
|
|
8
8
|
* @param root - Universe root directory
|
|
9
9
|
* @returns Array of prose file paths, sorted deterministically
|
|
10
10
|
*/
|
|
@@ -12,7 +12,10 @@ export async function loadProseFiles(root: string): Promise<string[]> {
|
|
|
12
12
|
const pattern = join(root, "**/*.prose");
|
|
13
13
|
const allFiles = await fastGlob(pattern, {
|
|
14
14
|
absolute: true,
|
|
15
|
-
ignore:
|
|
15
|
+
ignore: [
|
|
16
|
+
...DEFAULT_EXCLUDES.map((exclude) => join(root, exclude)),
|
|
17
|
+
join(root, "**/*.scene.prose"), // Exclude scene files
|
|
18
|
+
],
|
|
16
19
|
});
|
|
17
20
|
|
|
18
21
|
// Sort for deterministic ordering
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import fg from "fast-glob";
|
|
5
|
+
// Import directly from compile_scene to avoid scene-engine dependency
|
|
6
|
+
// @ts-expect-error - sprig-scenes doesn't have full TypeScript types
|
|
7
|
+
import { compileSceneFromText } from "@sprig-and-prose/sprig-scenes/compiler/compile_scene";
|
|
8
|
+
|
|
9
|
+
export interface SceneCompileResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
scenes: string[];
|
|
12
|
+
diagnostics: Array<{ severity: string; message: string; source?: unknown; scene?: string }>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Generate manifestId: git:<sha> if available, else time:<iso>
|
|
17
|
+
*/
|
|
18
|
+
function generateManifestId(): string {
|
|
19
|
+
try {
|
|
20
|
+
const sha = execSync("git rev-parse HEAD", { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
21
|
+
if (sha) {
|
|
22
|
+
return `git:${sha}`;
|
|
23
|
+
}
|
|
24
|
+
} catch {
|
|
25
|
+
// Git not available or not in a git repo
|
|
26
|
+
}
|
|
27
|
+
return `time:${new Date().toISOString()}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Compile all scene files in the universe
|
|
32
|
+
* @param universeRoot - Universe root directory
|
|
33
|
+
* @param outputDir - Output directory for scene manifests
|
|
34
|
+
* @returns Compile result with success status and list of compiled scenes
|
|
35
|
+
*/
|
|
36
|
+
export async function compileScenes(
|
|
37
|
+
universeRoot: string,
|
|
38
|
+
outputDir: string,
|
|
39
|
+
): Promise<SceneCompileResult> {
|
|
40
|
+
const diagnostics: Array<{ severity: string; message: string; source?: unknown; scene?: string }> = [];
|
|
41
|
+
const compiledScenes: string[] = [];
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
// Find all .scene.prose files
|
|
45
|
+
const sceneFiles = await fg("**/*.scene.prose", {
|
|
46
|
+
cwd: universeRoot,
|
|
47
|
+
absolute: true,
|
|
48
|
+
ignore: ["node_modules/**", ".git/**"],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if (sceneFiles.length === 0) {
|
|
52
|
+
// No scenes to compile is not an error
|
|
53
|
+
return {
|
|
54
|
+
success: true,
|
|
55
|
+
scenes: [],
|
|
56
|
+
diagnostics: [],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Ensure output directory exists
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(outputDir, { recursive: true });
|
|
63
|
+
} catch (error) {
|
|
64
|
+
// Directory might already exist, ignore
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const generatedAt = new Date().toISOString();
|
|
68
|
+
const manifestId = generateManifestId();
|
|
69
|
+
|
|
70
|
+
// Compile each scene
|
|
71
|
+
for (const sceneFile of sceneFiles) {
|
|
72
|
+
try {
|
|
73
|
+
const sourceText = readFileSync(sceneFile, "utf-8");
|
|
74
|
+
const manifest = compileSceneFromText(sourceText);
|
|
75
|
+
|
|
76
|
+
if (!manifest || !manifest.sceneName) {
|
|
77
|
+
diagnostics.push({
|
|
78
|
+
severity: "error",
|
|
79
|
+
message: `Failed to compile scene: no sceneName found`,
|
|
80
|
+
source: sceneFile,
|
|
81
|
+
});
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Inject metadata
|
|
86
|
+
const manifestWithMeta = {
|
|
87
|
+
...manifest,
|
|
88
|
+
meta: {
|
|
89
|
+
generatedAt,
|
|
90
|
+
manifestId,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// Write to output directory
|
|
95
|
+
const outputPath = join(outputDir, `${manifest.sceneName}.scene.json`);
|
|
96
|
+
const tempPath = `${outputPath}.tmp`;
|
|
97
|
+
const json = JSON.stringify(manifestWithMeta, null, 2);
|
|
98
|
+
writeFileSync(tempPath, json, "utf-8");
|
|
99
|
+
renameSync(tempPath, outputPath);
|
|
100
|
+
|
|
101
|
+
compiledScenes.push(manifest.sceneName);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
104
|
+
diagnostics.push({
|
|
105
|
+
severity: "error",
|
|
106
|
+
message: `Scene compilation error: ${message}`,
|
|
107
|
+
source: sceneFile,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const hasErrors = diagnostics.some((d) => d.severity === "error");
|
|
113
|
+
return {
|
|
114
|
+
success: !hasErrors,
|
|
115
|
+
scenes: compiledScenes,
|
|
116
|
+
diagnostics,
|
|
117
|
+
};
|
|
118
|
+
} catch (error) {
|
|
119
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
scenes: [],
|
|
123
|
+
diagnostics: [
|
|
124
|
+
{
|
|
125
|
+
severity: "error",
|
|
126
|
+
message: `Scene discovery error: ${message}`,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|