@agimon-ai/doompi-style-system 0.0.1-alpha.76 → 0.0.1-alpha.78

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 (96) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/api-contracts.cjs +7 -0
  3. package/dist/api-contracts.d.cts +2 -0
  4. package/dist/api-contracts.d.mts +2 -0
  5. package/dist/api-contracts.mjs +2 -0
  6. package/dist/cli.cjs +242 -0
  7. package/dist/cli.cjs.map +1 -0
  8. package/dist/cli.d.cts +4 -0
  9. package/dist/cli.d.cts.map +1 -0
  10. package/dist/cli.d.mts +4 -0
  11. package/dist/cli.d.mts.map +1 -0
  12. package/dist/cli.mjs +239 -0
  13. package/dist/cli.mjs.map +1 -0
  14. package/dist/extensions/pi.cjs +27 -0
  15. package/dist/extensions/pi.cjs.map +1 -0
  16. package/dist/extensions/pi.d.cts +5 -0
  17. package/dist/extensions/pi.d.cts.map +1 -0
  18. package/dist/extensions/pi.d.mts +5 -0
  19. package/dist/extensions/pi.d.mts.map +1 -0
  20. package/dist/extensions/pi.mjs +22 -0
  21. package/dist/extensions/pi.mjs.map +1 -0
  22. package/dist/extensions/server.cjs +35 -0
  23. package/dist/extensions/server.cjs.map +1 -0
  24. package/dist/extensions/server.d.cts +5 -0
  25. package/dist/extensions/server.d.cts.map +1 -0
  26. package/dist/extensions/server.d.mts +5 -0
  27. package/dist/extensions/server.d.mts.map +1 -0
  28. package/dist/extensions/server.mjs +30 -0
  29. package/dist/extensions/server.mjs.map +1 -0
  30. package/dist/extensions/web.mjs +773 -0
  31. package/dist/extensions/web.mjs.map +1 -0
  32. package/dist/index.cjs +8 -0
  33. package/dist/index.d.cts +5 -0
  34. package/dist/index.d.mts +5 -0
  35. package/dist/index.mjs +3 -0
  36. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.cjs +68 -0
  37. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.cjs.map +1 -0
  38. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.mjs +64 -0
  39. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.mjs.map +1 -0
  40. package/dist/src/extensions/workspaces/sessions/(backend)/api/style-system-preview/route.server.cjs +6 -0
  41. package/dist/src/extensions/workspaces/sessions/(backend)/api/style-system-preview/route.server.cjs.map +1 -0
  42. package/dist/src/extensions/workspaces/sessions/(backend)/api/style-system-preview/route.server.mjs +7 -0
  43. package/dist/src/extensions/workspaces/sessions/(backend)/api/style-system-preview/route.server.mjs.map +1 -0
  44. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs +6 -0
  45. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs.map +1 -0
  46. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.mjs +7 -0
  47. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.mjs.map +1 -0
  48. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +7 -0
  49. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
  50. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +8 -0
  51. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
  52. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +7 -0
  53. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
  54. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +8 -0
  55. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
  56. package/dist/src/schemas/apiContracts.cjs +114 -0
  57. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  58. package/dist/src/schemas/apiContracts.d.cts +52 -0
  59. package/dist/src/schemas/apiContracts.d.cts.map +1 -0
  60. package/dist/src/schemas/apiContracts.d.mts +52 -0
  61. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  62. package/dist/src/schemas/apiContracts.mjs +113 -0
  63. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  64. package/dist/src/services/designCheck/index.cjs +480 -0
  65. package/dist/src/services/designCheck/index.cjs.map +1 -0
  66. package/dist/src/services/designCheck/index.d.cts +59 -0
  67. package/dist/src/services/designCheck/index.d.cts.map +1 -0
  68. package/dist/src/services/designCheck/index.d.mts +59 -0
  69. package/dist/src/services/designCheck/index.d.mts.map +1 -0
  70. package/dist/src/services/designCheck/index.mjs +475 -0
  71. package/dist/src/services/designCheck/index.mjs.map +1 -0
  72. package/dist/src/services/previewApi/index.cjs +77 -0
  73. package/dist/src/services/previewApi/index.cjs.map +1 -0
  74. package/dist/src/services/previewApi/index.mjs +76 -0
  75. package/dist/src/services/previewApi/index.mjs.map +1 -0
  76. package/dist/src/services/storyPreview/index.cjs +361 -0
  77. package/dist/src/services/storyPreview/index.cjs.map +1 -0
  78. package/dist/src/services/storyPreview/index.d.cts +23 -0
  79. package/dist/src/services/storyPreview/index.d.cts.map +1 -0
  80. package/dist/src/services/storyPreview/index.d.mts +23 -0
  81. package/dist/src/services/storyPreview/index.d.mts.map +1 -0
  82. package/dist/src/services/storyPreview/index.mjs +357 -0
  83. package/dist/src/services/storyPreview/index.mjs.map +1 -0
  84. package/dist/src/services/storyPreview/type.d.cts +36 -0
  85. package/dist/src/services/storyPreview/type.d.cts.map +1 -0
  86. package/dist/src/services/storyPreview/type.d.mts +36 -0
  87. package/dist/src/services/storyPreview/type.d.mts.map +1 -0
  88. package/dist/src/types/apiRoutes.cjs +28 -0
  89. package/dist/src/types/apiRoutes.cjs.map +1 -0
  90. package/dist/src/types/apiRoutes.mjs +28 -0
  91. package/dist/src/types/apiRoutes.mjs.map +1 -0
  92. package/dist/src/types/previewApi.d.cts +57 -0
  93. package/dist/src/types/previewApi.d.cts.map +1 -0
  94. package/dist/src/types/previewApi.d.mts +57 -0
  95. package/dist/src/types/previewApi.d.mts.map +1 -0
  96. package/package.json +5 -5
@@ -0,0 +1,23 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ exports.__toESM = __toESM;
@@ -0,0 +1,7 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_apiContracts = require("./src/schemas/apiContracts.cjs");
6
+ exports.apiContracts = require_apiContracts.apiContracts;
7
+ exports.default = require_apiContracts.apiContracts;
@@ -0,0 +1,2 @@
1
+ import { apiContracts } from "./src/schemas/apiContracts.cjs";
2
+ export { apiContracts, apiContracts as default };
@@ -0,0 +1,2 @@
1
+ import { apiContracts } from "./src/schemas/apiContracts.mjs";
2
+ export { apiContracts, apiContracts as default };
@@ -0,0 +1,2 @@
1
+ import { apiContracts } from "./src/schemas/apiContracts.mjs";
2
+ export { apiContracts, apiContracts as default };
package/dist/cli.cjs ADDED
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env node
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
4
+ const require_index = require("./src/services/storyPreview/index.cjs");
5
+ const require_index$1 = require("./src/services/designCheck/index.cjs");
6
+ let node_fs = require("node:fs");
7
+ let node_path = require("node:path");
8
+ node_path = require_runtime.__toESM(node_path, 1);
9
+ let node_url = require("node:url");
10
+ let node_child_process = require("node:child_process");
11
+ let node_module = require("node:module");
12
+ //#region src/services/designCli/index.ts
13
+ const DISCOVERY_COMMANDS = /* @__PURE__ */ new Set([
14
+ "list-shared-components",
15
+ "list-app-components",
16
+ "get-css-classes",
17
+ "list-themes",
18
+ "get-ui-component"
19
+ ]);
20
+ const MAX_OUTPUT_BYTES = 2097152;
21
+ const DISCOVERY_TIMEOUT_MS = 12e4;
22
+ const STRUCTURED_COMMANDS = /* @__PURE__ */ new Set([
23
+ "metadata",
24
+ "story-metadata",
25
+ "check",
26
+ "verify",
27
+ "preview"
28
+ ]);
29
+ function option(values, ...names) {
30
+ for (const name of names) {
31
+ const inline = values.find((value) => value.startsWith(`${name}=`));
32
+ if (inline !== void 0) return inline.slice(name.length + 1);
33
+ const index = values.indexOf(name);
34
+ const value = index < 0 ? void 0 : values[index + 1];
35
+ if (value !== void 0 && !value.startsWith("--")) return value;
36
+ }
37
+ }
38
+ function requiredOption(values, name) {
39
+ const value = option(values, name);
40
+ if (value === void 0 || value.trim() === "") throw new Error(`${name} is required`);
41
+ return value;
42
+ }
43
+ function parseArguments(argv) {
44
+ const [command, ...values] = argv;
45
+ return {
46
+ command,
47
+ values,
48
+ workspace: node_path.default.resolve(option(values, "--workspace", "--workspace-root") ?? process.cwd())
49
+ };
50
+ }
51
+ function printJson(value) {
52
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
53
+ }
54
+ function reportExitCode(status) {
55
+ return status === "ready" ? 0 : status === "not-ready" ? 1 : 2;
56
+ }
57
+ function upstreamCliPath() {
58
+ const packageJsonPath = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href).resolve("@agimon-ai/style-system/package.json");
59
+ const packageJson = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf8"));
60
+ const bin = typeof packageJson.bin === "string" ? packageJson.bin : packageJson.bin?.["style-system"];
61
+ if (bin === void 0) throw new Error("The installed style-system package does not expose its CLI.");
62
+ return node_path.default.resolve(node_path.default.dirname(packageJsonPath), bin);
63
+ }
64
+ function stripWorkspaceOptions(values) {
65
+ const result = [];
66
+ for (let index = 0; index < values.length; index += 1) {
67
+ const value = values[index];
68
+ if (value === "--workspace" || value === "--workspace-root") {
69
+ index += 1;
70
+ continue;
71
+ }
72
+ if (value.startsWith("--workspace=") || value.startsWith("--workspace-root=")) continue;
73
+ result.push(value);
74
+ }
75
+ return result;
76
+ }
77
+ async function delegateDiscovery(values, workspace) {
78
+ const child = (0, node_child_process.spawn)(process.execPath, [upstreamCliPath(), ...stripWorkspaceOptions(values)], {
79
+ cwd: workspace,
80
+ env: { ...process.env },
81
+ stdio: [
82
+ "inherit",
83
+ "pipe",
84
+ "pipe"
85
+ ]
86
+ });
87
+ return new Promise((resolve) => {
88
+ let outputBytes = 0;
89
+ let settled = false;
90
+ let exceeded = false;
91
+ let timeout;
92
+ const finish = (code) => {
93
+ if (settled) return;
94
+ settled = true;
95
+ if (timeout !== void 0) clearTimeout(timeout);
96
+ resolve(code);
97
+ };
98
+ const forward = (chunk, stream) => {
99
+ outputBytes += chunk.byteLength;
100
+ if (outputBytes > MAX_OUTPUT_BYTES) {
101
+ exceeded = true;
102
+ child.kill("SIGTERM");
103
+ return;
104
+ }
105
+ stream.write(chunk);
106
+ };
107
+ child.once("error", (error) => {
108
+ process.stderr.write(`${error.message}\n`);
109
+ finish(3);
110
+ });
111
+ child.once("exit", (code, signal) => {
112
+ if (exceeded || signal !== null) finish(3);
113
+ else finish(code ?? 3);
114
+ });
115
+ child.stdout.on("data", (chunk) => forward(chunk, process.stdout));
116
+ child.stderr.on("data", (chunk) => forward(chunk, process.stderr));
117
+ timeout = setTimeout(() => {
118
+ exceeded = true;
119
+ child.kill("SIGTERM");
120
+ }, DISCOVERY_TIMEOUT_MS);
121
+ }).then((result) => {
122
+ if (result === 3) process.stderr.write("style-system discovery timed out, exceeded its output limit, or failed.\n");
123
+ return result;
124
+ });
125
+ }
126
+ async function containedPath(root, input, field) {
127
+ const candidate = node_path.default.resolve(root, input);
128
+ if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);
129
+ const canonical = await node_fs.promises.realpath(candidate);
130
+ if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);
131
+ return canonical;
132
+ }
133
+ function isContained(root, candidate) {
134
+ const relative = node_path.default.relative(root, candidate);
135
+ return relative === "" || !relative.startsWith(`..${node_path.default.sep}`) && relative !== ".." && !node_path.default.isAbsolute(relative);
136
+ }
137
+ async function outputPath(root, input, field) {
138
+ const candidate = node_path.default.resolve(root, input);
139
+ if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);
140
+ let existing = candidate;
141
+ while (true) try {
142
+ if (!isContained(root, await node_fs.promises.realpath(existing))) throw new Error(`${field} must remain inside the workspace root`);
143
+ return candidate;
144
+ } catch (error) {
145
+ if (error.code !== "ENOENT") throw error;
146
+ const parent = node_path.default.dirname(existing);
147
+ if (parent === existing) throw new Error(`${field} must remain inside the workspace root`);
148
+ existing = parent;
149
+ }
150
+ }
151
+ async function runStructured(parsed, workspace) {
152
+ const { command, values } = parsed;
153
+ if (command === "metadata" || command === "story-metadata") {
154
+ printJson(await new require_index.StoryPreviewService(workspace).metadata({
155
+ storyPath: requiredOption(values, "--story-path"),
156
+ appPath: option(values, "--app-path")
157
+ }));
158
+ return 0;
159
+ }
160
+ if (command === "check") {
161
+ const target = await require_index$1.readDesignTarget(await containedPath(workspace, requiredOption(values, "--target"), "target"));
162
+ const report = await require_index$1.checkDesignTarget(target, workspace);
163
+ const reportFile = option(values, "--report");
164
+ if (reportFile !== void 0) {
165
+ const targetPath = await outputPath(workspace, reportFile, "report");
166
+ await node_fs.promises.mkdir(node_path.default.dirname(targetPath), { recursive: true });
167
+ await node_fs.promises.writeFile(targetPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
168
+ }
169
+ printJson(report);
170
+ return reportExitCode(report.status);
171
+ }
172
+ if (command === "verify") {
173
+ const result = await require_index$1.verifyDesignReport(await containedPath(workspace, requiredOption(values, "--report"), "report"), workspace);
174
+ printJson(result);
175
+ return result.current && result.report.status === "ready" ? 0 : 2;
176
+ }
177
+ if (command === "preview") {
178
+ const output = option(values, "--output");
179
+ const targetPath = output === void 0 ? void 0 : await outputPath(workspace, output, "output");
180
+ const service = new require_index.StoryPreviewService(workspace);
181
+ const result = await service.build({
182
+ appPath: requiredOption(values, "--app-path"),
183
+ storyPath: requiredOption(values, "--story-path"),
184
+ storyExport: requiredOption(values, "--story-export"),
185
+ darkMode: values.includes("--dark-mode")
186
+ });
187
+ try {
188
+ if (targetPath === void 0) process.stdout.write(result.html);
189
+ else {
190
+ await node_fs.promises.mkdir(node_path.default.dirname(targetPath), { recursive: true });
191
+ await node_fs.promises.writeFile(targetPath, result.html, "utf8");
192
+ printJson({
193
+ handle: result.handle,
194
+ storyPath: result.storyPath,
195
+ storyExport: result.storyExport,
196
+ outputPath: node_path.default.relative(workspace, targetPath)
197
+ });
198
+ }
199
+ } finally {
200
+ await service.dispose(result.handle);
201
+ }
202
+ return 0;
203
+ }
204
+ throw new Error(`Unknown structured command '${command ?? ""}'.`);
205
+ }
206
+ function help() {
207
+ process.stdout.write([
208
+ "doompi-design <command>",
209
+ "",
210
+ "Discovery commands delegated to @agimon-ai/style-system:",
211
+ " list-shared-components, list-app-components, get-css-classes, list-themes, get-ui-component",
212
+ "",
213
+ "Portable commands:",
214
+ " metadata --story-path <path> [--app-path <path>]",
215
+ " check --target <path> [--report <path>]",
216
+ " verify --report <path>",
217
+ " preview --app-path <path> --story-path <path> --story-export <name> [--output <path>]",
218
+ "",
219
+ "Use --workspace <path> to select the admitted workspace for any command."
220
+ ].join("\n") + "\n");
221
+ }
222
+ async function main(argv = process.argv.slice(2)) {
223
+ const parsed = parseArguments(argv);
224
+ if (parsed.command === void 0 || parsed.command === "--help" || parsed.command === "-h") {
225
+ help();
226
+ return 0;
227
+ }
228
+ const workspace = await node_fs.promises.realpath(parsed.workspace);
229
+ if (DISCOVERY_COMMANDS.has(parsed.command)) return delegateDiscovery([parsed.command, ...parsed.values], workspace);
230
+ if (!STRUCTURED_COMMANDS.has(parsed.command)) throw new Error(`Unknown command '${parsed.command}'.`);
231
+ return runStructured(parsed, workspace);
232
+ }
233
+ if (process.argv[1] !== void 0 && (0, node_fs.realpathSync)(process.argv[1]) === (0, node_fs.realpathSync)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href))) main().then((code) => {
234
+ process.exitCode = code;
235
+ }, (error) => {
236
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
237
+ process.exitCode = 3;
238
+ });
239
+ //#endregion
240
+ exports.main = main;
241
+
242
+ //# sourceMappingURL=cli.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.cjs","names":["path","createRequire","readFileSync","spawn","fs","StoryPreviewService","readDesignTarget","checkDesignTarget","verifyDesignReport","realpathSync","fileURLToPath"],"sources":["../src/services/designCli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { spawn } from 'node:child_process';\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { promises as fs } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { checkDesignTarget, readDesignTarget, verifyDesignReport } from '../designCheck';\nimport { StoryPreviewService } from '../storyPreview';\n\nconst DISCOVERY_COMMANDS = new Set([\n 'list-shared-components',\n 'list-app-components',\n 'get-css-classes',\n 'list-themes',\n 'get-ui-component',\n]);\nconst MAX_OUTPUT_BYTES = 2 * 1024 * 1024;\nconst DISCOVERY_TIMEOUT_MS = 120_000;\nconst STRUCTURED_COMMANDS = new Set(['metadata', 'story-metadata', 'check', 'verify', 'preview']);\n\ntype ParsedArguments = {\n command: string | undefined;\n values: readonly string[];\n workspace: string;\n};\n\nfunction option(values: readonly string[], ...names: readonly string[]): string | undefined {\n for (const name of names) {\n const inline = values.find((value) => value.startsWith(`${name}=`));\n if (inline !== undefined) return inline.slice(name.length + 1);\n const index = values.indexOf(name);\n const value = index < 0 ? undefined : values[index + 1];\n if (value !== undefined && !value.startsWith('--')) return value;\n }\n return undefined;\n}\n\nfunction requiredOption(values: readonly string[], name: string): string {\n const value = option(values, name);\n if (value === undefined || value.trim() === '') throw new Error(`${name} is required`);\n return value;\n}\n\nfunction parseArguments(argv: readonly string[]): ParsedArguments {\n const [command, ...values] = argv;\n return {\n command,\n values,\n workspace: path.resolve(option(values, '--workspace', '--workspace-root') ?? process.cwd()),\n };\n}\n\nfunction printJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction reportExitCode(status: 'ready' | 'not-ready' | 'incomplete'): number {\n return status === 'ready' ? 0 : status === 'not-ready' ? 1 : 2;\n}\n\nfunction upstreamCliPath(): string {\n const require = createRequire(import.meta.url);\n const packageJsonPath = require.resolve('@agimon-ai/style-system/package.json') as string;\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as {\n bin?: string | Record<string, string>;\n };\n const bin = typeof packageJson.bin === 'string' ? packageJson.bin : packageJson.bin?.['style-system'];\n if (bin === undefined) throw new Error('The installed style-system package does not expose its CLI.');\n return path.resolve(path.dirname(packageJsonPath), bin);\n}\n\nfunction stripWorkspaceOptions(values: readonly string[]): string[] {\n const result: string[] = [];\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index]!;\n if (value === '--workspace' || value === '--workspace-root') {\n index += 1;\n continue;\n }\n if (value.startsWith('--workspace=') || value.startsWith('--workspace-root=')) continue;\n result.push(value);\n }\n return result;\n}\n\nasync function delegateDiscovery(values: readonly string[], workspace: string): Promise<number> {\n const child = spawn(process.execPath, [upstreamCliPath(), ...stripWorkspaceOptions(values)], {\n cwd: workspace,\n env: { ...process.env },\n stdio: ['inherit', 'pipe', 'pipe'],\n });\n return new Promise<number>((resolve) => {\n let outputBytes = 0;\n let settled = false;\n let exceeded = false;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const finish = (code: number): void => {\n if (settled) return;\n settled = true;\n if (timeout !== undefined) clearTimeout(timeout);\n resolve(code);\n };\n const forward = (chunk: Buffer, stream: NodeJS.WriteStream): void => {\n outputBytes += chunk.byteLength;\n if (outputBytes > MAX_OUTPUT_BYTES) {\n exceeded = true;\n child.kill('SIGTERM');\n return;\n }\n stream.write(chunk);\n };\n child.once('error', (error: Error) => {\n process.stderr.write(`${error.message}\\n`);\n finish(3);\n });\n child.once('exit', (code, signal) => {\n if (exceeded || signal !== null) finish(3);\n else finish(code ?? 3);\n });\n child.stdout.on('data', (chunk: Buffer) => forward(chunk, process.stdout));\n child.stderr.on('data', (chunk: Buffer) => forward(chunk, process.stderr));\n timeout = setTimeout(() => {\n exceeded = true;\n child.kill('SIGTERM');\n }, DISCOVERY_TIMEOUT_MS);\n }).then((result) => {\n if (result === 3) process.stderr.write('style-system discovery timed out, exceeded its output limit, or failed.\\n');\n return result;\n });\n}\n\nasync function containedPath(root: string, input: string, field: string): Promise<string> {\n const candidate = path.resolve(root, input);\n if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);\n const canonical = await fs.realpath(candidate);\n if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);\n return canonical;\n}\n\nfunction isContained(root: string, candidate: string): boolean {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));\n}\n\nasync function outputPath(root: string, input: string, field: string): Promise<string> {\n const candidate = path.resolve(root, input);\n if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);\n let existing = candidate;\n while (true) {\n try {\n const canonical = await fs.realpath(existing);\n if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);\n return candidate;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n const parent = path.dirname(existing);\n if (parent === existing) throw new Error(`${field} must remain inside the workspace root`);\n existing = parent;\n }\n }\n}\n\nasync function runStructured(parsed: ParsedArguments, workspace: string): Promise<number> {\n const { command, values } = parsed;\n if (command === 'metadata' || command === 'story-metadata') {\n const service = new StoryPreviewService(workspace);\n printJson(\n await service.metadata({\n storyPath: requiredOption(values, '--story-path'),\n appPath: option(values, '--app-path'),\n }),\n );\n return 0;\n }\n if (command === 'check') {\n const target = await readDesignTarget(await containedPath(workspace, requiredOption(values, '--target'), 'target'));\n const report = await checkDesignTarget(target, workspace);\n const reportFile = option(values, '--report');\n if (reportFile !== undefined) {\n const targetPath = await outputPath(workspace, reportFile, 'report');\n await fs.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, `${JSON.stringify(report, null, 2)}\\n`, 'utf8');\n }\n printJson(report);\n return reportExitCode(report.status);\n }\n if (command === 'verify') {\n const result = await verifyDesignReport(\n await containedPath(workspace, requiredOption(values, '--report'), 'report'),\n workspace,\n );\n printJson(result);\n return result.current && result.report.status === 'ready' ? 0 : 2;\n }\n if (command === 'preview') {\n const output = option(values, '--output');\n const targetPath = output === undefined ? undefined : await outputPath(workspace, output, 'output');\n const service = new StoryPreviewService(workspace);\n const result = await service.build({\n appPath: requiredOption(values, '--app-path'),\n storyPath: requiredOption(values, '--story-path'),\n storyExport: requiredOption(values, '--story-export'),\n darkMode: values.includes('--dark-mode'),\n });\n try {\n if (targetPath === undefined) process.stdout.write(result.html);\n else {\n await fs.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, result.html, 'utf8');\n printJson({\n handle: result.handle,\n storyPath: result.storyPath,\n storyExport: result.storyExport,\n outputPath: path.relative(workspace, targetPath),\n });\n }\n } finally {\n await service.dispose(result.handle);\n }\n return 0;\n }\n throw new Error(`Unknown structured command '${command ?? ''}'.`);\n}\n\nfunction help(): void {\n process.stdout.write(\n [\n 'doompi-design <command>',\n '',\n 'Discovery commands delegated to @agimon-ai/style-system:',\n ' list-shared-components, list-app-components, get-css-classes, list-themes, get-ui-component',\n '',\n 'Portable commands:',\n ' metadata --story-path <path> [--app-path <path>]',\n ' check --target <path> [--report <path>]',\n ' verify --report <path>',\n ' preview --app-path <path> --story-path <path> --story-export <name> [--output <path>]',\n '',\n 'Use --workspace <path> to select the admitted workspace for any command.',\n ].join('\\n') + '\\n',\n );\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const parsed = parseArguments(argv);\n if (parsed.command === undefined || parsed.command === '--help' || parsed.command === '-h') {\n help();\n return 0;\n }\n const workspace = await fs.realpath(parsed.workspace);\n if (DISCOVERY_COMMANDS.has(parsed.command)) return delegateDiscovery([parsed.command, ...parsed.values], workspace);\n if (!STRUCTURED_COMMANDS.has(parsed.command)) throw new Error(`Unknown command '${parsed.command}'.`);\n return runStructured(parsed, workspace);\n}\n\nconst invoked =\n process.argv[1] !== undefined && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));\nif (invoked) {\n void main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 3;\n },\n );\n}\n"],"mappings":"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"}
package/dist/cli.d.cts ADDED
@@ -0,0 +1,4 @@
1
+ //#region src/services/designCli/index.d.ts
2
+ export declare function main(argv?: readonly string[]): Promise<number>;
3
+ //#endregion
4
+ //# sourceMappingURL=cli.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.cts","names":[],"sources":["../src/services/designCli/index.ts"],"mappings":";wBAqPsB,KAAK,2BAAkD"}
package/dist/cli.d.mts ADDED
@@ -0,0 +1,4 @@
1
+ //#region src/services/designCli/index.d.ts
2
+ export declare function main(argv?: readonly string[]): Promise<number>;
3
+ //#endregion
4
+ //# sourceMappingURL=cli.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../src/services/designCli/index.ts"],"mappings":";wBAqPsB,KAAK,2BAAkD"}
package/dist/cli.mjs ADDED
@@ -0,0 +1,239 @@
1
+ #!/usr/bin/env node
2
+ import { StoryPreviewService } from "./src/services/storyPreview/index.mjs";
3
+ import { checkDesignTarget, readDesignTarget, verifyDesignReport } from "./src/services/designCheck/index.mjs";
4
+ import { createRequire } from "node:module";
5
+ import { promises, readFileSync, realpathSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { spawn } from "node:child_process";
9
+ //#region src/services/designCli/index.ts
10
+ const DISCOVERY_COMMANDS = /* @__PURE__ */ new Set([
11
+ "list-shared-components",
12
+ "list-app-components",
13
+ "get-css-classes",
14
+ "list-themes",
15
+ "get-ui-component"
16
+ ]);
17
+ const MAX_OUTPUT_BYTES = 2097152;
18
+ const DISCOVERY_TIMEOUT_MS = 12e4;
19
+ const STRUCTURED_COMMANDS = /* @__PURE__ */ new Set([
20
+ "metadata",
21
+ "story-metadata",
22
+ "check",
23
+ "verify",
24
+ "preview"
25
+ ]);
26
+ function option(values, ...names) {
27
+ for (const name of names) {
28
+ const inline = values.find((value) => value.startsWith(`${name}=`));
29
+ if (inline !== void 0) return inline.slice(name.length + 1);
30
+ const index = values.indexOf(name);
31
+ const value = index < 0 ? void 0 : values[index + 1];
32
+ if (value !== void 0 && !value.startsWith("--")) return value;
33
+ }
34
+ }
35
+ function requiredOption(values, name) {
36
+ const value = option(values, name);
37
+ if (value === void 0 || value.trim() === "") throw new Error(`${name} is required`);
38
+ return value;
39
+ }
40
+ function parseArguments(argv) {
41
+ const [command, ...values] = argv;
42
+ return {
43
+ command,
44
+ values,
45
+ workspace: path.resolve(option(values, "--workspace", "--workspace-root") ?? process.cwd())
46
+ };
47
+ }
48
+ function printJson(value) {
49
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
50
+ }
51
+ function reportExitCode(status) {
52
+ return status === "ready" ? 0 : status === "not-ready" ? 1 : 2;
53
+ }
54
+ function upstreamCliPath() {
55
+ const packageJsonPath = createRequire(import.meta.url).resolve("@agimon-ai/style-system/package.json");
56
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
57
+ const bin = typeof packageJson.bin === "string" ? packageJson.bin : packageJson.bin?.["style-system"];
58
+ if (bin === void 0) throw new Error("The installed style-system package does not expose its CLI.");
59
+ return path.resolve(path.dirname(packageJsonPath), bin);
60
+ }
61
+ function stripWorkspaceOptions(values) {
62
+ const result = [];
63
+ for (let index = 0; index < values.length; index += 1) {
64
+ const value = values[index];
65
+ if (value === "--workspace" || value === "--workspace-root") {
66
+ index += 1;
67
+ continue;
68
+ }
69
+ if (value.startsWith("--workspace=") || value.startsWith("--workspace-root=")) continue;
70
+ result.push(value);
71
+ }
72
+ return result;
73
+ }
74
+ async function delegateDiscovery(values, workspace) {
75
+ const child = spawn(process.execPath, [upstreamCliPath(), ...stripWorkspaceOptions(values)], {
76
+ cwd: workspace,
77
+ env: { ...process.env },
78
+ stdio: [
79
+ "inherit",
80
+ "pipe",
81
+ "pipe"
82
+ ]
83
+ });
84
+ return new Promise((resolve) => {
85
+ let outputBytes = 0;
86
+ let settled = false;
87
+ let exceeded = false;
88
+ let timeout;
89
+ const finish = (code) => {
90
+ if (settled) return;
91
+ settled = true;
92
+ if (timeout !== void 0) clearTimeout(timeout);
93
+ resolve(code);
94
+ };
95
+ const forward = (chunk, stream) => {
96
+ outputBytes += chunk.byteLength;
97
+ if (outputBytes > MAX_OUTPUT_BYTES) {
98
+ exceeded = true;
99
+ child.kill("SIGTERM");
100
+ return;
101
+ }
102
+ stream.write(chunk);
103
+ };
104
+ child.once("error", (error) => {
105
+ process.stderr.write(`${error.message}\n`);
106
+ finish(3);
107
+ });
108
+ child.once("exit", (code, signal) => {
109
+ if (exceeded || signal !== null) finish(3);
110
+ else finish(code ?? 3);
111
+ });
112
+ child.stdout.on("data", (chunk) => forward(chunk, process.stdout));
113
+ child.stderr.on("data", (chunk) => forward(chunk, process.stderr));
114
+ timeout = setTimeout(() => {
115
+ exceeded = true;
116
+ child.kill("SIGTERM");
117
+ }, DISCOVERY_TIMEOUT_MS);
118
+ }).then((result) => {
119
+ if (result === 3) process.stderr.write("style-system discovery timed out, exceeded its output limit, or failed.\n");
120
+ return result;
121
+ });
122
+ }
123
+ async function containedPath(root, input, field) {
124
+ const candidate = path.resolve(root, input);
125
+ if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);
126
+ const canonical = await promises.realpath(candidate);
127
+ if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);
128
+ return canonical;
129
+ }
130
+ function isContained(root, candidate) {
131
+ const relative = path.relative(root, candidate);
132
+ return relative === "" || !relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative);
133
+ }
134
+ async function outputPath(root, input, field) {
135
+ const candidate = path.resolve(root, input);
136
+ if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);
137
+ let existing = candidate;
138
+ while (true) try {
139
+ if (!isContained(root, await promises.realpath(existing))) throw new Error(`${field} must remain inside the workspace root`);
140
+ return candidate;
141
+ } catch (error) {
142
+ if (error.code !== "ENOENT") throw error;
143
+ const parent = path.dirname(existing);
144
+ if (parent === existing) throw new Error(`${field} must remain inside the workspace root`);
145
+ existing = parent;
146
+ }
147
+ }
148
+ async function runStructured(parsed, workspace) {
149
+ const { command, values } = parsed;
150
+ if (command === "metadata" || command === "story-metadata") {
151
+ printJson(await new StoryPreviewService(workspace).metadata({
152
+ storyPath: requiredOption(values, "--story-path"),
153
+ appPath: option(values, "--app-path")
154
+ }));
155
+ return 0;
156
+ }
157
+ if (command === "check") {
158
+ const target = await readDesignTarget(await containedPath(workspace, requiredOption(values, "--target"), "target"));
159
+ const report = await checkDesignTarget(target, workspace);
160
+ const reportFile = option(values, "--report");
161
+ if (reportFile !== void 0) {
162
+ const targetPath = await outputPath(workspace, reportFile, "report");
163
+ await promises.mkdir(path.dirname(targetPath), { recursive: true });
164
+ await promises.writeFile(targetPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
165
+ }
166
+ printJson(report);
167
+ return reportExitCode(report.status);
168
+ }
169
+ if (command === "verify") {
170
+ const result = await verifyDesignReport(await containedPath(workspace, requiredOption(values, "--report"), "report"), workspace);
171
+ printJson(result);
172
+ return result.current && result.report.status === "ready" ? 0 : 2;
173
+ }
174
+ if (command === "preview") {
175
+ const output = option(values, "--output");
176
+ const targetPath = output === void 0 ? void 0 : await outputPath(workspace, output, "output");
177
+ const service = new StoryPreviewService(workspace);
178
+ const result = await service.build({
179
+ appPath: requiredOption(values, "--app-path"),
180
+ storyPath: requiredOption(values, "--story-path"),
181
+ storyExport: requiredOption(values, "--story-export"),
182
+ darkMode: values.includes("--dark-mode")
183
+ });
184
+ try {
185
+ if (targetPath === void 0) process.stdout.write(result.html);
186
+ else {
187
+ await promises.mkdir(path.dirname(targetPath), { recursive: true });
188
+ await promises.writeFile(targetPath, result.html, "utf8");
189
+ printJson({
190
+ handle: result.handle,
191
+ storyPath: result.storyPath,
192
+ storyExport: result.storyExport,
193
+ outputPath: path.relative(workspace, targetPath)
194
+ });
195
+ }
196
+ } finally {
197
+ await service.dispose(result.handle);
198
+ }
199
+ return 0;
200
+ }
201
+ throw new Error(`Unknown structured command '${command ?? ""}'.`);
202
+ }
203
+ function help() {
204
+ process.stdout.write([
205
+ "doompi-design <command>",
206
+ "",
207
+ "Discovery commands delegated to @agimon-ai/style-system:",
208
+ " list-shared-components, list-app-components, get-css-classes, list-themes, get-ui-component",
209
+ "",
210
+ "Portable commands:",
211
+ " metadata --story-path <path> [--app-path <path>]",
212
+ " check --target <path> [--report <path>]",
213
+ " verify --report <path>",
214
+ " preview --app-path <path> --story-path <path> --story-export <name> [--output <path>]",
215
+ "",
216
+ "Use --workspace <path> to select the admitted workspace for any command."
217
+ ].join("\n") + "\n");
218
+ }
219
+ async function main(argv = process.argv.slice(2)) {
220
+ const parsed = parseArguments(argv);
221
+ if (parsed.command === void 0 || parsed.command === "--help" || parsed.command === "-h") {
222
+ help();
223
+ return 0;
224
+ }
225
+ const workspace = await promises.realpath(parsed.workspace);
226
+ if (DISCOVERY_COMMANDS.has(parsed.command)) return delegateDiscovery([parsed.command, ...parsed.values], workspace);
227
+ if (!STRUCTURED_COMMANDS.has(parsed.command)) throw new Error(`Unknown command '${parsed.command}'.`);
228
+ return runStructured(parsed, workspace);
229
+ }
230
+ if (process.argv[1] !== void 0 && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url))) main().then((code) => {
231
+ process.exitCode = code;
232
+ }, (error) => {
233
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
234
+ process.exitCode = 3;
235
+ });
236
+ //#endregion
237
+ export { main };
238
+
239
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","names":["fs"],"sources":["../src/services/designCli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { spawn } from 'node:child_process';\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { promises as fs } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { checkDesignTarget, readDesignTarget, verifyDesignReport } from '../designCheck';\nimport { StoryPreviewService } from '../storyPreview';\n\nconst DISCOVERY_COMMANDS = new Set([\n 'list-shared-components',\n 'list-app-components',\n 'get-css-classes',\n 'list-themes',\n 'get-ui-component',\n]);\nconst MAX_OUTPUT_BYTES = 2 * 1024 * 1024;\nconst DISCOVERY_TIMEOUT_MS = 120_000;\nconst STRUCTURED_COMMANDS = new Set(['metadata', 'story-metadata', 'check', 'verify', 'preview']);\n\ntype ParsedArguments = {\n command: string | undefined;\n values: readonly string[];\n workspace: string;\n};\n\nfunction option(values: readonly string[], ...names: readonly string[]): string | undefined {\n for (const name of names) {\n const inline = values.find((value) => value.startsWith(`${name}=`));\n if (inline !== undefined) return inline.slice(name.length + 1);\n const index = values.indexOf(name);\n const value = index < 0 ? undefined : values[index + 1];\n if (value !== undefined && !value.startsWith('--')) return value;\n }\n return undefined;\n}\n\nfunction requiredOption(values: readonly string[], name: string): string {\n const value = option(values, name);\n if (value === undefined || value.trim() === '') throw new Error(`${name} is required`);\n return value;\n}\n\nfunction parseArguments(argv: readonly string[]): ParsedArguments {\n const [command, ...values] = argv;\n return {\n command,\n values,\n workspace: path.resolve(option(values, '--workspace', '--workspace-root') ?? process.cwd()),\n };\n}\n\nfunction printJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction reportExitCode(status: 'ready' | 'not-ready' | 'incomplete'): number {\n return status === 'ready' ? 0 : status === 'not-ready' ? 1 : 2;\n}\n\nfunction upstreamCliPath(): string {\n const require = createRequire(import.meta.url);\n const packageJsonPath = require.resolve('@agimon-ai/style-system/package.json') as string;\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as {\n bin?: string | Record<string, string>;\n };\n const bin = typeof packageJson.bin === 'string' ? packageJson.bin : packageJson.bin?.['style-system'];\n if (bin === undefined) throw new Error('The installed style-system package does not expose its CLI.');\n return path.resolve(path.dirname(packageJsonPath), bin);\n}\n\nfunction stripWorkspaceOptions(values: readonly string[]): string[] {\n const result: string[] = [];\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index]!;\n if (value === '--workspace' || value === '--workspace-root') {\n index += 1;\n continue;\n }\n if (value.startsWith('--workspace=') || value.startsWith('--workspace-root=')) continue;\n result.push(value);\n }\n return result;\n}\n\nasync function delegateDiscovery(values: readonly string[], workspace: string): Promise<number> {\n const child = spawn(process.execPath, [upstreamCliPath(), ...stripWorkspaceOptions(values)], {\n cwd: workspace,\n env: { ...process.env },\n stdio: ['inherit', 'pipe', 'pipe'],\n });\n return new Promise<number>((resolve) => {\n let outputBytes = 0;\n let settled = false;\n let exceeded = false;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const finish = (code: number): void => {\n if (settled) return;\n settled = true;\n if (timeout !== undefined) clearTimeout(timeout);\n resolve(code);\n };\n const forward = (chunk: Buffer, stream: NodeJS.WriteStream): void => {\n outputBytes += chunk.byteLength;\n if (outputBytes > MAX_OUTPUT_BYTES) {\n exceeded = true;\n child.kill('SIGTERM');\n return;\n }\n stream.write(chunk);\n };\n child.once('error', (error: Error) => {\n process.stderr.write(`${error.message}\\n`);\n finish(3);\n });\n child.once('exit', (code, signal) => {\n if (exceeded || signal !== null) finish(3);\n else finish(code ?? 3);\n });\n child.stdout.on('data', (chunk: Buffer) => forward(chunk, process.stdout));\n child.stderr.on('data', (chunk: Buffer) => forward(chunk, process.stderr));\n timeout = setTimeout(() => {\n exceeded = true;\n child.kill('SIGTERM');\n }, DISCOVERY_TIMEOUT_MS);\n }).then((result) => {\n if (result === 3) process.stderr.write('style-system discovery timed out, exceeded its output limit, or failed.\\n');\n return result;\n });\n}\n\nasync function containedPath(root: string, input: string, field: string): Promise<string> {\n const candidate = path.resolve(root, input);\n if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);\n const canonical = await fs.realpath(candidate);\n if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);\n return canonical;\n}\n\nfunction isContained(root: string, candidate: string): boolean {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));\n}\n\nasync function outputPath(root: string, input: string, field: string): Promise<string> {\n const candidate = path.resolve(root, input);\n if (!isContained(root, candidate)) throw new Error(`${field} must remain inside the workspace root`);\n let existing = candidate;\n while (true) {\n try {\n const canonical = await fs.realpath(existing);\n if (!isContained(root, canonical)) throw new Error(`${field} must remain inside the workspace root`);\n return candidate;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n const parent = path.dirname(existing);\n if (parent === existing) throw new Error(`${field} must remain inside the workspace root`);\n existing = parent;\n }\n }\n}\n\nasync function runStructured(parsed: ParsedArguments, workspace: string): Promise<number> {\n const { command, values } = parsed;\n if (command === 'metadata' || command === 'story-metadata') {\n const service = new StoryPreviewService(workspace);\n printJson(\n await service.metadata({\n storyPath: requiredOption(values, '--story-path'),\n appPath: option(values, '--app-path'),\n }),\n );\n return 0;\n }\n if (command === 'check') {\n const target = await readDesignTarget(await containedPath(workspace, requiredOption(values, '--target'), 'target'));\n const report = await checkDesignTarget(target, workspace);\n const reportFile = option(values, '--report');\n if (reportFile !== undefined) {\n const targetPath = await outputPath(workspace, reportFile, 'report');\n await fs.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, `${JSON.stringify(report, null, 2)}\\n`, 'utf8');\n }\n printJson(report);\n return reportExitCode(report.status);\n }\n if (command === 'verify') {\n const result = await verifyDesignReport(\n await containedPath(workspace, requiredOption(values, '--report'), 'report'),\n workspace,\n );\n printJson(result);\n return result.current && result.report.status === 'ready' ? 0 : 2;\n }\n if (command === 'preview') {\n const output = option(values, '--output');\n const targetPath = output === undefined ? undefined : await outputPath(workspace, output, 'output');\n const service = new StoryPreviewService(workspace);\n const result = await service.build({\n appPath: requiredOption(values, '--app-path'),\n storyPath: requiredOption(values, '--story-path'),\n storyExport: requiredOption(values, '--story-export'),\n darkMode: values.includes('--dark-mode'),\n });\n try {\n if (targetPath === undefined) process.stdout.write(result.html);\n else {\n await fs.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, result.html, 'utf8');\n printJson({\n handle: result.handle,\n storyPath: result.storyPath,\n storyExport: result.storyExport,\n outputPath: path.relative(workspace, targetPath),\n });\n }\n } finally {\n await service.dispose(result.handle);\n }\n return 0;\n }\n throw new Error(`Unknown structured command '${command ?? ''}'.`);\n}\n\nfunction help(): void {\n process.stdout.write(\n [\n 'doompi-design <command>',\n '',\n 'Discovery commands delegated to @agimon-ai/style-system:',\n ' list-shared-components, list-app-components, get-css-classes, list-themes, get-ui-component',\n '',\n 'Portable commands:',\n ' metadata --story-path <path> [--app-path <path>]',\n ' check --target <path> [--report <path>]',\n ' verify --report <path>',\n ' preview --app-path <path> --story-path <path> --story-export <name> [--output <path>]',\n '',\n 'Use --workspace <path> to select the admitted workspace for any command.',\n ].join('\\n') + '\\n',\n );\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const parsed = parseArguments(argv);\n if (parsed.command === undefined || parsed.command === '--help' || parsed.command === '-h') {\n help();\n return 0;\n }\n const workspace = await fs.realpath(parsed.workspace);\n if (DISCOVERY_COMMANDS.has(parsed.command)) return delegateDiscovery([parsed.command, ...parsed.values], workspace);\n if (!STRUCTURED_COMMANDS.has(parsed.command)) throw new Error(`Unknown command '${parsed.command}'.`);\n return runStructured(parsed, workspace);\n}\n\nconst invoked =\n process.argv[1] !== undefined && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));\nif (invoked) {\n void main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 3;\n },\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_root_cli = require("../src/extensions/workspaces/sessions/(backend)/root.cli.cjs");
6
+ const require_tool_result_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs");
7
+ let _agimon_ai_doompi_core_pi_extension = require("@agimon-ai/doompi-core/pi-extension");
8
+ let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
9
+ //#region generated/pi.ts
10
+ const at = (value, context) => typeof value === "function" ? value(context) : value;
11
+ const extension = (0, _agimon_ai_doompi_core_pi_extension.definePiExtension)("@agimon-ai/doompi-style-system", async (context) => {
12
+ const scopeSession = await require_root_cli.default(context);
13
+ const contextSession = {
14
+ ...context,
15
+ root: scopeSession.value
16
+ };
17
+ return {
18
+ ...(0, _agimon_ai_doompi_core_extension_file.composeRootHooks)(scopeSession),
19
+ events: { tool_result: at(require_tool_result_cli.default, contextSession) },
20
+ services: [...scopeSession.services ?? []]
21
+ };
22
+ });
23
+ //#endregion
24
+ exports.default = extension;
25
+ exports.extension = extension;
26
+
27
+ //# sourceMappingURL=pi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.cjs","names":["definePiExtension","rootSession","composeRootHooks","hookToolResult"],"sources":["../../generated/pi.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookToolResult from '../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookToolResult>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-style-system', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n tool_result: at(hookToolResult, contextSession) as NonNullable<PiPluginContributions['events']>['tool_result'],\n },\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;AAcA,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,aAAA,GAAYA,oCAAAA,kBAAAA,CAAoC,kCAAkC,OAAO,YAAY;CAChH,MAAM,eAAe,MAAMC,iBAAAA,QAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,sCAAAA,iBAAAA,CAAiB,YAAY;EAChC,QAAQ,EACN,aAAa,GAAGC,wBAAAA,SAAgB,cAAc,EAChD;EACA,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}