@debuffjp/cli 0.0.0-stage → 0.1.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 (81) hide show
  1. package/README.md +63 -2
  2. package/bin/debuff.js +3 -0
  3. package/client.d.ts +3 -0
  4. package/dist/agent-link.d.ts +28 -0
  5. package/dist/agent-link.d.ts.map +1 -0
  6. package/dist/agent-link.js +122 -0
  7. package/dist/agent-link.js.map +1 -0
  8. package/dist/assets/atlas.d.ts +58 -0
  9. package/dist/assets/atlas.d.ts.map +1 -0
  10. package/dist/assets/atlas.js +164 -0
  11. package/dist/assets/atlas.js.map +1 -0
  12. package/dist/assets/builtin.d.ts +5 -0
  13. package/dist/assets/builtin.d.ts.map +1 -0
  14. package/dist/assets/builtin.js +47 -0
  15. package/dist/assets/builtin.js.map +1 -0
  16. package/dist/assets/command.d.ts +4 -0
  17. package/dist/assets/command.d.ts.map +1 -0
  18. package/dist/assets/command.js +35 -0
  19. package/dist/assets/command.js.map +1 -0
  20. package/dist/assets/compile.d.ts +29 -0
  21. package/dist/assets/compile.d.ts.map +1 -0
  22. package/dist/assets/compile.js +209 -0
  23. package/dist/assets/compile.js.map +1 -0
  24. package/dist/assets/index.d.ts +5 -0
  25. package/dist/assets/index.d.ts.map +1 -0
  26. package/dist/assets/index.js +5 -0
  27. package/dist/assets/index.js.map +1 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +212 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/config.d.ts +24 -0
  33. package/dist/config.d.ts.map +1 -0
  34. package/dist/config.js +53 -0
  35. package/dist/config.js.map +1 -0
  36. package/dist/index.d.ts +11 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +10 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/inspect.d.ts +35 -0
  41. package/dist/inspect.d.ts.map +1 -0
  42. package/dist/inspect.js +37 -0
  43. package/dist/inspect.js.map +1 -0
  44. package/dist/plugin.d.ts +146 -0
  45. package/dist/plugin.d.ts.map +1 -0
  46. package/dist/plugin.js +2 -0
  47. package/dist/plugin.js.map +1 -0
  48. package/dist/report.d.ts +26 -0
  49. package/dist/report.d.ts.map +1 -0
  50. package/dist/report.js +80 -0
  51. package/dist/report.js.map +1 -0
  52. package/dist/scenario/browser.d.ts +6 -0
  53. package/dist/scenario/browser.d.ts.map +1 -0
  54. package/dist/scenario/browser.js +47 -0
  55. package/dist/scenario/browser.js.map +1 -0
  56. package/dist/scenario/index.d.ts +5 -0
  57. package/dist/scenario/index.d.ts.map +1 -0
  58. package/dist/scenario/index.js +4 -0
  59. package/dist/scenario/index.js.map +1 -0
  60. package/dist/scenario/run.d.ts +12 -0
  61. package/dist/scenario/run.d.ts.map +1 -0
  62. package/dist/scenario/run.js +230 -0
  63. package/dist/scenario/run.js.map +1 -0
  64. package/dist/scenario/schema.d.ts +8 -0
  65. package/dist/scenario/schema.d.ts.map +1 -0
  66. package/dist/scenario/schema.js +23 -0
  67. package/dist/scenario/schema.js.map +1 -0
  68. package/dist/scenario/types.d.ts +96 -0
  69. package/dist/scenario/types.d.ts.map +1 -0
  70. package/dist/scenario/types.js +2 -0
  71. package/dist/scenario/types.js.map +1 -0
  72. package/dist/vite-plugin.d.ts +18 -0
  73. package/dist/vite-plugin.d.ts.map +1 -0
  74. package/dist/vite-plugin.js +122 -0
  75. package/dist/vite-plugin.js.map +1 -0
  76. package/dist/vite.d.ts +13 -0
  77. package/dist/vite.d.ts.map +1 -0
  78. package/dist/vite.js +24 -0
  79. package/dist/vite.js.map +1 -0
  80. package/package.json +63 -4
  81. package/schema/scenario.schema.json +111 -0
@@ -0,0 +1,209 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
3
+ import { join, relative, sep } from "node:path";
4
+ import { buildAtlases } from "./atlas.js";
5
+ import { builtinImporter } from "./builtin.js";
6
+ import { runCommandImporter } from "./command.js";
7
+ const IGNORED = (rel) => rel === "manifest.json" || rel.endsWith(".license") || rel.split("/").some((p) => p.startsWith("."));
8
+ function walk(dir) {
9
+ if (!existsSync(dir))
10
+ return [];
11
+ return readdirSync(dir).flatMap((name) => {
12
+ const path = join(dir, name);
13
+ return statSync(path).isDirectory() ? walk(path) : [path];
14
+ });
15
+ }
16
+ const sha = (data) => createHash("sha256").update(data).digest("hex");
17
+ /** The importer claiming `rel`: the longest matching suffix wins, plugins before built-ins on ties. */
18
+ function pick(rel, importers) {
19
+ const lower = rel.toLowerCase();
20
+ let best;
21
+ for (const importer of importers) {
22
+ for (const ext of importer.extensions) {
23
+ const e = ext.toLowerCase();
24
+ if (lower.endsWith(e) && (!best || e.length > best.ext.length))
25
+ best = { importer, ext: e };
26
+ }
27
+ }
28
+ return best;
29
+ }
30
+ /**
31
+ * Turn `assets/` into a manifest plus generated files, entirely in memory.
32
+ * Source files are never modified; nothing is written into the source tree.
33
+ */
34
+ export async function compileAssets(root, options = {}) {
35
+ const dir = join(root, "assets");
36
+ const importers = [...(options.plugins ?? []).flatMap((p) => p.assets ?? []), builtinImporter];
37
+ const cacheDir = join(root, ".debuff", "cache", "assets");
38
+ const useCache = options.cache ?? true;
39
+ const files = walk(dir)
40
+ .map((path) => ({ path, rel: relative(dir, path).split(sep).join("/") }))
41
+ .filter((f) => !IGNORED(f.rel))
42
+ .sort((a, b) => (a.rel < b.rel ? -1 : 1));
43
+ const warnings = [];
44
+ const assets = {};
45
+ const outputs = new Map();
46
+ const importedBy = {};
47
+ const consumed = new Set();
48
+ const results = [];
49
+ // Plugin importers run first so they can consume files (e.g. a sheet's PNG) before built-ins see them.
50
+ const ordered = files
51
+ .map((f) => ({ ...f, match: pick(f.rel, importers) }))
52
+ .sort((a, b) => Number(a.match?.importer === builtinImporter) - Number(b.match?.importer === builtinImporter));
53
+ for (const { path, rel, match } of ordered) {
54
+ if (consumed.has(rel))
55
+ continue;
56
+ if (!match) {
57
+ warnings.push(`Skipped ${rel}: no importer for this file type`);
58
+ continue;
59
+ }
60
+ const parts = rel.split("/");
61
+ const group = parts.length > 1 ? parts[0] : undefined;
62
+ const base = (parts.at(-1) ?? rel).slice(0, -match.ext.length);
63
+ const file = { path, rel, id: (group ? `${group}/` : "") + base, ext: match.ext, ...(group ? { group } : {}) };
64
+ let result;
65
+ try {
66
+ result = await runImporter(match.importer, file, root, useCache ? cacheDir : undefined);
67
+ }
68
+ catch (err) {
69
+ warnings.push(`${rel}: ${err instanceof Error ? err.message : String(err)}`);
70
+ continue;
71
+ }
72
+ for (const c of result.consumes ?? [])
73
+ consumed.add(c);
74
+ results.push({ file, importer: match.importer, result });
75
+ }
76
+ for (const { file, importer, result } of results) {
77
+ warnings.push(...(result.warnings ?? []).map((w) => (w.includes(file.rel) ? w : `${file.rel}: ${w}`)));
78
+ for (const out of result.outputs ?? [])
79
+ outputs.set(out.path, toBuffer(out));
80
+ for (const [id, entry] of Object.entries(result.assets)) {
81
+ if (assets[id]) {
82
+ warnings.push(`Duplicate asset id "${id}" from ${file.rel} (${importer.name}); keeping ${assets[id].src}`);
83
+ continue;
84
+ }
85
+ const bytes = bytesOf(entry.src, dir, outputs);
86
+ if (!bytes) {
87
+ warnings.push(`${importer.name}: asset "${id}" points at ${entry.src}, which is neither a source file nor a generated output`);
88
+ continue;
89
+ }
90
+ assets[id] = { ...entry, bytes: bytes.length, hash: sha(bytes).slice(0, 12) };
91
+ importedBy[id] = importer.name;
92
+ }
93
+ }
94
+ if (options.atlas !== false)
95
+ packAtlases(dir, assets, importedBy, outputs, options.atlas ?? {}, useCache ? join(root, ".debuff", "cache", "atlas") : undefined, warnings);
96
+ const sorted = Object.fromEntries(Object.entries(assets).sort(([a], [b]) => (a < b ? -1 : 1)));
97
+ return { manifest: { version: 1, assets: sorted }, outputs, warnings, importedBy };
98
+ }
99
+ function toBuffer(out) {
100
+ return Buffer.from(out.contents, out.encoding === "base64" ? "base64" : "utf8");
101
+ }
102
+ function bytesOf(src, dir, outputs) {
103
+ const rel = src.replace(/^assets\//, "");
104
+ const generated = outputs.get(rel);
105
+ if (generated)
106
+ return generated;
107
+ const onDisk = join(dir, rel);
108
+ return existsSync(onDisk) ? readFileSync(onDisk) : undefined;
109
+ }
110
+ async function runImporter(importer, file, root, cacheDir) {
111
+ // The built-in importer only reads the path, so caching it would cost more than it saves.
112
+ const cacheable = cacheDir && importer !== builtinImporter;
113
+ const key = cacheable ? sha(`${importer.name}\0${JSON.stringify(file)}\0${sha(readFileSync(file.path))}`) : "";
114
+ const cacheFile = cacheable ? join(cacheDir, `${key}.json`) : "";
115
+ if (cacheable && existsSync(cacheFile))
116
+ return JSON.parse(readFileSync(cacheFile, "utf8"));
117
+ const result = "command" in importer ? await runCommandImporter(importer, file, root) : await importer.import(file);
118
+ if (!result || typeof result !== "object" || typeof result.assets !== "object") {
119
+ throw new Error(`importer "${importer.name}" returned an invalid result (expected { assets: {...} })`);
120
+ }
121
+ if (cacheable && cacheDir) {
122
+ mkdirSync(cacheDir, { recursive: true });
123
+ writeFileSync(cacheFile, JSON.stringify(result));
124
+ }
125
+ return result;
126
+ }
127
+ /** Asset ids never referenced as a string literal in `src/`. Heuristic: reports, never deletes. */
128
+ export function findUnused(root, manifest) {
129
+ const source = walk(join(root, "src"))
130
+ .filter((f) => /\.(ts|js|tsx|jsx|json)$/.test(f))
131
+ .map((f) => readFileSync(f, "utf8"))
132
+ .join("\n");
133
+ const quoted = (s) => source.includes(`"${s}"`) || source.includes(`'${s}'`) || source.includes(`\`${s}\``);
134
+ return Object.keys(manifest.assets).filter((id) => {
135
+ const group = manifest.assets[id]?.group;
136
+ // Loading a whole group counts as using its members.
137
+ return !quoted(id) && !(group && quoted(group));
138
+ });
139
+ }
140
+ /**
141
+ * Pack the PNGs the built-in importer produced into one or more atlases per preload group.
142
+ * Lossless: pixels are copied exactly, entries gain a `rect` into the atlas, and sources are untouched.
143
+ * Images larger than half the atlas size (backgrounds, splash screens) stay standalone.
144
+ */
145
+ function packAtlases(dir, assets, importedBy, outputs, options, cacheDir, warnings) {
146
+ const maxSize = options.maxSize ?? 2048;
147
+ const excluded = (id) => (options.exclude ?? []).some((e) => (e.endsWith("/") ? id.startsWith(e) : id === e));
148
+ const groups = new Map();
149
+ for (const [id, entry] of Object.entries(assets)) {
150
+ if (entry.type !== "image" || importedBy[id] !== builtinImporter.name || !entry.src.toLowerCase().endsWith(".png") || excluded(id))
151
+ continue;
152
+ const png = readFileSync(join(dir, entry.src.slice("assets/".length)));
153
+ if (png.length < 24 || png.readUInt32BE(0) !== 0x89504e47) {
154
+ warnings.push(`${entry.src}: not a valid PNG, left out of atlases`);
155
+ continue;
156
+ }
157
+ // PNG header: width and height are big-endian u32 at byte 16 and 20.
158
+ const w = png.readUInt32BE(16);
159
+ const h = png.readUInt32BE(20);
160
+ if (w > maxSize / 2 || h > maxSize / 2)
161
+ continue;
162
+ const group = entry.group ?? "default";
163
+ groups.set(group, [...(groups.get(group) ?? []), { id, png }]);
164
+ }
165
+ for (const [group, inputs] of groups) {
166
+ if (inputs.length < 2)
167
+ continue; // a one-image atlas saves nothing
168
+ inputs.sort((a, b) => (a.id < b.id ? -1 : 1));
169
+ const key = sha(JSON.stringify({ options, maxSize, inputs: inputs.map((i) => [i.id, assets[i.id]?.hash]) }));
170
+ const cached = cacheDir ? readAtlasCache(cacheDir, key) : undefined;
171
+ let atlases;
172
+ try {
173
+ atlases = cached ?? buildAtlases(inputs, { ...options, maxSize });
174
+ }
175
+ catch (err) {
176
+ // A corrupt image must never break the pipeline: the group simply stays unpacked.
177
+ warnings.push(`atlas "${group}" skipped: ${err instanceof Error ? err.message : String(err)}`);
178
+ continue;
179
+ }
180
+ if (!cached && cacheDir)
181
+ writeAtlasCache(cacheDir, key, atlases);
182
+ atlases.forEach((atlas, i) => {
183
+ const path = `_atlas/${group.replaceAll("/", "-")}-${i}.png`;
184
+ const png = Buffer.from(atlas.png);
185
+ outputs.set(path, png);
186
+ const hash = sha(png).slice(0, 12);
187
+ for (const [id, rect] of atlas.rects) {
188
+ const entry = assets[id];
189
+ if (!entry)
190
+ continue;
191
+ assets[id] = { ...entry, src: `assets/${path}`, rect, hash };
192
+ }
193
+ });
194
+ }
195
+ }
196
+ function readAtlasCache(cacheDir, key) {
197
+ const meta = join(cacheDir, `${key}.json`);
198
+ if (!existsSync(meta))
199
+ return undefined;
200
+ const entries = JSON.parse(readFileSync(meta, "utf8"));
201
+ return entries.map((e, i) => ({ ...e, png: readFileSync(join(cacheDir, `${key}-${i}.png`)), rects: new Map(e.rects) }));
202
+ }
203
+ function writeAtlasCache(cacheDir, key, atlases) {
204
+ mkdirSync(cacheDir, { recursive: true });
205
+ for (const [i, a] of atlases.entries())
206
+ writeFileSync(join(cacheDir, `${key}-${i}.png`), a.png);
207
+ writeFileSync(join(cacheDir, `${key}.json`), JSON.stringify(atlases.map((a) => ({ width: a.width, height: a.height, rects: [...a.rects] }))));
208
+ }
209
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/assets/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { type AtlasOptions, buildAtlases, decodePng, packRects } from "./atlas.js";
2
+ export { BUILTIN_EXTENSIONS, builtinImporter } from "./builtin.js";
3
+ export { runCommandImporter } from "./command.js";
4
+ export { type CompiledManifest, type CompileOptions, type CompileResult, compileAssets, findUnused } from "./compile.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { buildAtlases, decodePng, packRects } from "./atlas.js";
2
+ export { BUILTIN_EXTENSIONS, builtinImporter } from "./builtin.js";
3
+ export { runCommandImporter } from "./command.js";
4
+ export { compileAssets, findUnused } from "./compile.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAkE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env node
2
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join, resolve } from "node:path";
4
+ import * as p from "@clack/prompts";
5
+ import cac from "cac";
6
+ import { amber, banner, lime, paint, pink, sky } from "create-debuff";
7
+ import pc from "picocolors";
8
+ import { compileAssets, findUnused } from "./assets/index.js";
9
+ import { loadConfig } from "./config.js";
10
+ import { inspectProject } from "./inspect.js";
11
+ import { buildReport, formatReport } from "./report.js";
12
+ import { createDevServer, viteConfig } from "./vite.js";
13
+ const cli = cac("debuff");
14
+ const version = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
15
+ const rootOf = (o) => resolve(o.root ?? process.cwd());
16
+ /** Command header: buff beside the name, version, command and a tagline. */
17
+ const header = (title, tagline) => console.log(`\n${banner("idle", [`${lime(pc.bold("debuff"))} ${pc.dim(`v${version}`)}`, pc.bold(title), pc.dim(pc.italic(tagline))])}\n`);
18
+ /** Result footer: buff reacts to how it went. */
19
+ const finish = (ok, title, detail = "") => console.log(`\n${banner(ok ? "happy" : "oops", [ok ? lime(pc.bold(title)) : paint("red", pc.bold(title)), detail, ""])}\n`);
20
+ const violetType = (type) => paint("violet", type);
21
+ cli
22
+ .command("create [dir]", "Scaffold a new game")
23
+ .option("--template <id>", "Template to use")
24
+ .option("-y, --yes", "Accept defaults without prompting")
25
+ .action(async (dir, o) => {
26
+ const { runCreate } = await import("create-debuff");
27
+ return runCreate({ dir, template: o.template, yes: o.yes ?? false });
28
+ });
29
+ cli
30
+ .command("dev", "Start the dev server with hot reload")
31
+ .option("--root <dir>", "Project root")
32
+ .option("--port <port>", "Port", { default: 5173 })
33
+ .option("--host", "Expose on the local network (test on phones)")
34
+ .action(async (o) => {
35
+ const server = await createDevServer(rootOf(o), { port: o.port, host: o.host ?? false, agentLink: true });
36
+ await server.listen();
37
+ header("dev server", "more room for play");
38
+ for (const url of server.resolvedUrls?.local ?? [])
39
+ console.log(` ${lime("➜")} ${pc.bold("local")} ${sky(url)}`);
40
+ for (const url of server.resolvedUrls?.network ?? [])
41
+ console.log(` ${lime("➜")} ${pc.bold("network")} ${sky(url)}`);
42
+ console.log(`\n ${pc.dim("press")} ${amber("`")} ${pc.dim("in the game for the dev overlay ·")} ${pink("h + enter")} ${pc.dim("for shortcuts")}\n`);
43
+ server.bindCLIShortcuts({ print: false });
44
+ return new Promise(() => { });
45
+ });
46
+ cli
47
+ .command("build", "Production build with size report; fails if dev code leaks")
48
+ .option("--root <dir>", "Project root")
49
+ .option("--json", "Machine-readable report")
50
+ .option("--sourcemap", "Emit source maps")
51
+ .action(async (o) => {
52
+ const root = rootOf(o);
53
+ const { build } = await import("vite");
54
+ if (!o.json)
55
+ header("build", "shipping only what you use");
56
+ const s = o.json ? undefined : p.spinner();
57
+ s?.start("Bundling");
58
+ await build(await viteConfig(root, { logLevel: "error", build: { sourcemap: o.sourcemap ?? false } }));
59
+ s?.stop("Bundled");
60
+ return report(root, o.json ?? false);
61
+ });
62
+ cli
63
+ .command("report", "Size report for an existing build")
64
+ .option("--root <dir>", "Project root")
65
+ .option("--json", "Machine-readable output")
66
+ .action((o) => report(rootOf(o), o.json ?? false));
67
+ cli
68
+ .command("assets", "Run the asset pipeline and print the manifest summary")
69
+ .option("--root <dir>", "Project root")
70
+ .option("--json", "Print the full manifest and diagnostics as JSON")
71
+ .action(async (o) => {
72
+ const root = rootOf(o);
73
+ const config = await loadConfig(root);
74
+ const { manifest, warnings, importedBy, outputs } = await compileAssets(root, { plugins: config.plugins, atlas: config.atlas });
75
+ const unused = findUnused(root, manifest);
76
+ const count = Object.keys(manifest.assets).length;
77
+ if (o.json) {
78
+ console.log(JSON.stringify({ manifest, importedBy, generated: [...outputs.keys()], warnings, unused }, null, 2));
79
+ return 0;
80
+ }
81
+ header("assets", "your source files, never touched");
82
+ for (const [id, a] of Object.entries(manifest.assets)) {
83
+ const packed = a.rect ? ` · ${sky(`atlas ${a.src.slice(a.src.lastIndexOf("/") + 1)}`)}` : "";
84
+ p.log.message(`${pink(id)} ${violetType(a.type)} ${pc.dim(`${(a.bytes / 1024).toFixed(1)} kB · ${importedBy[id]}`)}${packed}`);
85
+ }
86
+ p.log.success(`${count} assets${outputs.size ? `, ${outputs.size} generated` : ""}`);
87
+ for (const w of warnings)
88
+ p.log.warn(w);
89
+ if (unused.length)
90
+ p.log.info(`Possibly unused (no id reference in src/): ${unused.map((u) => amber(u)).join(", ")}`);
91
+ finish(true, `${count} assets ready`, outputs.size ? sky(`${outputs.size} generated`) : "");
92
+ return 0;
93
+ });
94
+ cli
95
+ .command("scenario [...files]", "Run scenarios/*.json in a headless browser")
96
+ .option("--root <dir>", "Project root")
97
+ .option("--update", "Overwrite baselines with new captures")
98
+ .option("--strict", "Fail when a baseline is missing (use in CI)")
99
+ .option("--json", "Machine-readable output")
100
+ .action(async (files, o) => {
101
+ const { runScenarios, formatScenario } = await import("./scenario/index.js");
102
+ // Never let an early exit read as success in CI.
103
+ let finished = false;
104
+ process.once("exit", (code) => {
105
+ if (!finished && code === 0)
106
+ process.exitCode = 1;
107
+ });
108
+ if (!o.json) {
109
+ header("scenarios", "same inputs, same game");
110
+ // A spinner here cancels itself when the browser process starts, so use a plain status line.
111
+ p.log.step("Starting dev server and browser");
112
+ }
113
+ const root = rootOf(o);
114
+ const { plugins } = await loadConfig(root);
115
+ // Write the scenario schema including plugin steps, so editors and agents can validate them.
116
+ const { scenarioSchema } = await import("./scenario/index.js");
117
+ mkdirSync(join(root, ".debuff"), { recursive: true });
118
+ writeFileSync(join(root, ".debuff", "scenario.schema.json"), `${JSON.stringify(scenarioSchema(plugins), null, 2)}
119
+ `);
120
+ const reports = await runScenarios({ root, files, plugins, update: o.update ?? false, strict: o.strict ?? false });
121
+ finished = true;
122
+ const failed = reports.filter((r) => !r.ok).length;
123
+ if (o.json)
124
+ console.log(JSON.stringify(reports, null, 2));
125
+ else {
126
+ for (const r of reports) {
127
+ const text = formatScenario(r);
128
+ if (r.ok)
129
+ p.log.success(text);
130
+ else
131
+ p.log.error(text);
132
+ }
133
+ const summary = `${reports.length - failed}/${reports.length} scenarios passed`;
134
+ finish(!failed, summary, failed ? amber("details in .debuff/reports/") : "");
135
+ }
136
+ return failed ? 1 : 0;
137
+ });
138
+ cli
139
+ .command("inspect", "JSON summary of the project for agents and tools")
140
+ .option("--root <dir>", "Project root")
141
+ .action(async (o) => {
142
+ console.log(JSON.stringify(await inspectProject(rootOf(o)), null, 2));
143
+ return 0;
144
+ });
145
+ function report(root, json) {
146
+ const r = buildReport(join(root, "dist"));
147
+ writeFileSync(join(root, "dist", "debuff-report.json"), `${JSON.stringify(r, null, 2)}\n`);
148
+ if (json)
149
+ console.log(JSON.stringify(r, null, 2));
150
+ else {
151
+ console.log(formatReport(r));
152
+ const kb = (n) => `${(n / 1024).toFixed(1)} kB`;
153
+ if (r.leaks.length)
154
+ finish(false, "dev-only code leaked into the build", amber(r.leaks.map((l) => l.path).join(", ")));
155
+ else
156
+ finish(true, "build ready in dist/", `${sky(kb(r.totals.code.brotli))} ${pc.dim("code, brotli ·")} ${pink(kb(r.totals.asset.bytes))} ${pc.dim("assets")}`);
157
+ }
158
+ return r.leaks.length ? 1 : 0;
159
+ }
160
+ cli.help();
161
+ cli.version(version);
162
+ /** Register `debuff <plugin>:<command>` for every command contributed by plugins in debuff.config.ts. */
163
+ async function registerPluginCommands() {
164
+ const argv = process.argv.slice(2);
165
+ const command = argv.find((a) => !a.startsWith("-"));
166
+ const wantsHelp = argv.length === 0 || argv.includes("--help") || argv.includes("-h");
167
+ if (!command?.includes(":") && !wantsHelp)
168
+ return;
169
+ const rootIndex = argv.indexOf("--root");
170
+ const root = resolve(rootIndex >= 0 ? (argv[rootIndex + 1] ?? ".") : process.cwd());
171
+ let plugins;
172
+ try {
173
+ ({ plugins } = await loadConfig(root));
174
+ }
175
+ catch (err) {
176
+ if (!wantsHelp)
177
+ throw err;
178
+ return;
179
+ }
180
+ for (const plugin of plugins) {
181
+ for (const def of plugin.commands ?? []) {
182
+ const cmd = cli.command(`${plugin.name}:${def.name} [...args]`, `${def.description} ${pc.dim(`(${plugin.name})`)}`);
183
+ cmd.option("--root <dir>", "Project root").option("--json", "Machine-readable output");
184
+ for (const opt of def.options ?? [])
185
+ cmd.option(opt.flags, opt.description, opt.default === undefined ? undefined : { default: opt.default });
186
+ cmd.action((args, options) => def.run({ root: rootOf(options), args, options, json: Boolean(options.json) }));
187
+ }
188
+ }
189
+ }
190
+ async function main() {
191
+ await registerPluginCommands();
192
+ cli.parse(process.argv, { run: false });
193
+ if (!cli.matchedCommand) {
194
+ // cac has already printed help or the version for these flags.
195
+ if (cli.options.help || cli.options.version)
196
+ return;
197
+ if (process.argv.length > 2) {
198
+ console.error(pc.red(`Unknown command: ${process.argv.slice(2).join(" ")}\n`));
199
+ cli.outputHelp();
200
+ process.exit(1);
201
+ }
202
+ cli.outputHelp();
203
+ return;
204
+ }
205
+ const code = (await cli.runMatchedCommand());
206
+ process.exit(code ?? 0);
207
+ }
208
+ main().catch((err) => {
209
+ p.log.error(err instanceof Error ? err.message : String(err));
210
+ process.exit(1);
211
+ });
212
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AtlasOptions } from "./assets/atlas.js";
2
+ import { type ToolingPlugin } from "./plugin.js";
3
+ /** Contents of `debuff.config.ts`. */
4
+ export interface DebuffConfig {
5
+ plugins?: ToolingPlugin[];
6
+ assets?: {
7
+ /** Atlas packing for PNG images (default on). `false` disables it. */
8
+ atlas?: AtlasOptions | false;
9
+ };
10
+ }
11
+ export interface ResolvedConfig {
12
+ root: string;
13
+ /** Absolute path of the loaded config file, if any. */
14
+ file: string | undefined;
15
+ plugins: ToolingPlugin[];
16
+ atlas: AtlasOptions | false;
17
+ }
18
+ /** Identity helper that gives `debuff.config.ts` full type checking and editor completion. */
19
+ export declare function defineConfig(config: DebuffConfig): DebuffConfig;
20
+ export declare const CONFIG_FILES: string[];
21
+ /** Load and validate `debuff.config.*` from `root`. A missing file is a valid empty config. */
22
+ export declare function loadConfig(root: string): Promise<ResolvedConfig>;
23
+ export declare function validatePlugins(plugins: unknown[], source?: string): ToolingPlugin[];
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtE,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE;QACP,sEAAsE;QACtE,KAAK,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC;CAC7B;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED,eAAO,MAAM,YAAY,UAAqF,CAAC;AAI/G,+FAA+F;AAC/F,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAStE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,SAAW,GAAG,aAAa,EAAE,CA0BtF"}
package/dist/config.js ADDED
@@ -0,0 +1,53 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { TOOLING_API_VERSION } from "./plugin.js";
4
+ /** Identity helper that gives `debuff.config.ts` full type checking and editor completion. */
5
+ export function defineConfig(config) {
6
+ return config;
7
+ }
8
+ export const CONFIG_FILES = ["debuff.config.ts", "debuff.config.mts", "debuff.config.js", "debuff.config.mjs"];
9
+ const NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
10
+ /** Load and validate `debuff.config.*` from `root`. A missing file is a valid empty config. */
11
+ export async function loadConfig(root) {
12
+ const file = CONFIG_FILES.map((f) => join(root, f)).find((f) => existsSync(f));
13
+ if (!file)
14
+ return { root, file: undefined, plugins: [], atlas: {} };
15
+ // Vite's module runner transpiles TypeScript without a separate loader dependency.
16
+ const { runnerImport } = await import("vite");
17
+ const { module } = await runnerImport(file);
18
+ const config = module.default;
19
+ if (!config || typeof config !== "object")
20
+ throw new Error(`${file} must \`export default defineConfig({ ... })\``);
21
+ return { root, file, plugins: validatePlugins(config.plugins ?? [], file), atlas: config.assets?.atlas ?? {} };
22
+ }
23
+ export function validatePlugins(plugins, source = "config") {
24
+ const seen = new Set();
25
+ return plugins.map((p, i) => {
26
+ const plugin = p;
27
+ const where = `${source}: plugins[${i}]`;
28
+ if (!plugin || typeof plugin !== "object")
29
+ throw new Error(`${where} is not a plugin object. Did you forget to call the plugin factory?`);
30
+ if (typeof plugin.name !== "string" || !NAME.test(plugin.name))
31
+ throw new Error(`${where} needs a kebab-case "name"`);
32
+ if (plugin.apiVersion !== TOOLING_API_VERSION) {
33
+ throw new Error(`Plugin "${plugin.name}" targets apiVersion ${plugin.apiVersion}; this CLI supports ${TOOLING_API_VERSION}`);
34
+ }
35
+ if (seen.has(plugin.name))
36
+ throw new Error(`Plugin "${plugin.name}" is listed twice`);
37
+ seen.add(plugin.name);
38
+ for (const kind of ["commands", "scenarioSteps"]) {
39
+ for (const def of plugin[kind] ?? []) {
40
+ if (!def || typeof def.name !== "string" || !NAME.test(def.name) || typeof def.run !== "function") {
41
+ throw new Error(`Plugin "${plugin.name}": every entry in ${kind} needs a kebab-case name and a run() function`);
42
+ }
43
+ }
44
+ }
45
+ for (const importer of plugin.assets ?? []) {
46
+ const ok = importer?.extensions?.length && ("import" in importer || ("command" in importer && importer.command?.length));
47
+ if (!ok)
48
+ throw new Error(`Plugin "${plugin.name}": importer "${importer?.name}" needs extensions and either import() or command`);
49
+ }
50
+ return plugin;
51
+ });
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { AGENT_PATHS, type AgentStatus, DEV_SERVER_FILE, type DevServerInfo } from "./agent-link.js";
2
+ export * from "./assets/index.js";
3
+ export { CONFIG_FILES, type DebuffConfig, defineConfig, loadConfig, type ResolvedConfig, validatePlugins } from "./config.js";
4
+ export { inspectProject } from "./inspect.js";
5
+ export type * from "./plugin.js";
6
+ export { TOOLING_API_VERSION } from "./plugin.js";
7
+ export { type BuildReport, buildReport, DEV_TOKENS, type FileReport, formatReport } from "./report.js";
8
+ export * from "./scenario/index.js";
9
+ export { createDevServer, viteConfig } from "./vite.js";
10
+ export { ASSETS_DIR, type DebuffViteOptions, debuff } from "./vite-plugin.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrG,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,mBAAmB,aAAa,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvG,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { AGENT_PATHS, DEV_SERVER_FILE } from "./agent-link.js";
2
+ export * from "./assets/index.js";
3
+ export { CONFIG_FILES, defineConfig, loadConfig, validatePlugins } from "./config.js";
4
+ export { inspectProject } from "./inspect.js";
5
+ export { TOOLING_API_VERSION } from "./plugin.js";
6
+ export { buildReport, DEV_TOKENS, formatReport } from "./report.js";
7
+ export * from "./scenario/index.js";
8
+ export { createDevServer, viteConfig } from "./vite.js";
9
+ export { ASSETS_DIR, debuff } from "./vite-plugin.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,eAAe,EAAsB,MAAM,iBAAiB,CAAC;AACrG,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAqB,YAAY,EAAE,UAAU,EAAuB,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAoB,WAAW,EAAE,UAAU,EAAmB,YAAY,EAAE,MAAM,aAAa,CAAC;AACvG,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAA0B,MAAM,EAAE,MAAM,kBAAkB,CAAC"}