@dromio/product 0.1.49

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 (86) hide show
  1. package/LICENSE +201 -0
  2. package/dist/architectureCheck.d.ts +11 -0
  3. package/dist/architectureCheck.d.ts.map +1 -0
  4. package/dist/architectureCheck.js +269 -0
  5. package/dist/architectureCheck.js.map +1 -0
  6. package/dist/architectureCheckTypes.d.ts +23 -0
  7. package/dist/architectureCheckTypes.d.ts.map +1 -0
  8. package/dist/architectureCheckTypes.js +50 -0
  9. package/dist/architectureCheckTypes.js.map +1 -0
  10. package/dist/architectureEffectCheck.d.ts +4 -0
  11. package/dist/architectureEffectCheck.d.ts.map +1 -0
  12. package/dist/architectureEffectCheck.js +106 -0
  13. package/dist/architectureEffectCheck.js.map +1 -0
  14. package/dist/authoring.d.ts +55 -0
  15. package/dist/authoring.d.ts.map +1 -0
  16. package/dist/authoring.js +308 -0
  17. package/dist/authoring.js.map +1 -0
  18. package/dist/authoringArchitectureTemplates.d.ts +5 -0
  19. package/dist/authoringArchitectureTemplates.d.ts.map +1 -0
  20. package/dist/authoringArchitectureTemplates.js +169 -0
  21. package/dist/authoringArchitectureTemplates.js.map +1 -0
  22. package/dist/authoringManifestTemplates.d.ts +4 -0
  23. package/dist/authoringManifestTemplates.d.ts.map +1 -0
  24. package/dist/authoringManifestTemplates.js +77 -0
  25. package/dist/authoringManifestTemplates.js.map +1 -0
  26. package/dist/authoringPackageJson.d.ts +3 -0
  27. package/dist/authoringPackageJson.d.ts.map +1 -0
  28. package/dist/authoringPackageJson.js +69 -0
  29. package/dist/authoringPackageJson.js.map +1 -0
  30. package/dist/authoringTemplates.d.ts +9 -0
  31. package/dist/authoringTemplates.d.ts.map +1 -0
  32. package/dist/authoringTemplates.js +142 -0
  33. package/dist/authoringTemplates.js.map +1 -0
  34. package/dist/authoringWorkflowTemplates.d.ts +13 -0
  35. package/dist/authoringWorkflowTemplates.d.ts.map +1 -0
  36. package/dist/authoringWorkflowTemplates.js +282 -0
  37. package/dist/authoringWorkflowTemplates.js.map +1 -0
  38. package/dist/build.d.ts +12 -0
  39. package/dist/build.d.ts.map +1 -0
  40. package/dist/build.js +119 -0
  41. package/dist/build.js.map +1 -0
  42. package/dist/check.d.ts +16 -0
  43. package/dist/check.d.ts.map +1 -0
  44. package/dist/check.js +172 -0
  45. package/dist/check.js.map +1 -0
  46. package/dist/cli.d.ts +3 -0
  47. package/dist/cli.d.ts.map +1 -0
  48. package/dist/cli.js +93 -0
  49. package/dist/cli.js.map +1 -0
  50. package/dist/deploymentProfile.d.ts +19 -0
  51. package/dist/deploymentProfile.d.ts.map +1 -0
  52. package/dist/deploymentProfile.js +72 -0
  53. package/dist/deploymentProfile.js.map +1 -0
  54. package/dist/emitFromDefinition.d.ts +14 -0
  55. package/dist/emitFromDefinition.d.ts.map +1 -0
  56. package/dist/emitFromDefinition.js +87 -0
  57. package/dist/emitFromDefinition.js.map +1 -0
  58. package/dist/files.d.ts +13 -0
  59. package/dist/files.d.ts.map +1 -0
  60. package/dist/files.js +77 -0
  61. package/dist/files.js.map +1 -0
  62. package/dist/forbiddenImports.d.ts +7 -0
  63. package/dist/forbiddenImports.d.ts.map +1 -0
  64. package/dist/forbiddenImports.js +31 -0
  65. package/dist/forbiddenImports.js.map +1 -0
  66. package/dist/index.d.ts +11 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +9 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/manifest.d.ts +14 -0
  71. package/dist/manifest.d.ts.map +1 -0
  72. package/dist/manifest.js +49 -0
  73. package/dist/manifest.js.map +1 -0
  74. package/dist/publish.d.ts +29 -0
  75. package/dist/publish.d.ts.map +1 -0
  76. package/dist/publish.js +40 -0
  77. package/dist/publish.js.map +1 -0
  78. package/dist/publishPlan.d.ts +62 -0
  79. package/dist/publishPlan.d.ts.map +1 -0
  80. package/dist/publishPlan.js +204 -0
  81. package/dist/publishPlan.js.map +1 -0
  82. package/dist/schemas.d.ts +141 -0
  83. package/dist/schemas.d.ts.map +1 -0
  84. package/dist/schemas.js +154 -0
  85. package/dist/schemas.js.map +1 -0
  86. package/package.json +49 -0
@@ -0,0 +1,282 @@
1
+ export function workflowArtifactTemplates(productId, workflows) {
2
+ return (workflows ?? []).flatMap((workflow) => {
3
+ const shape = workflowShape(productId, workflow);
4
+ return [
5
+ { relativePath: workflowDocumentPath(workflow.id), content: workflowDocumentTemplate(shape) },
6
+ { relativePath: `catalog/${shape.domain}/${shape.nodeId}/schema.ts`, content: schemaTemplate(shape) },
7
+ { relativePath: `catalog/${shape.domain}/${shape.nodeId}/step.ts`, content: stepTemplate(shape) },
8
+ { relativePath: "catalog/index.ts", content: catalogIndexTemplate(productId, workflows) },
9
+ { relativePath: `workflows/${workflow.id}/workflow.ts`, content: workflowGlueTemplate(shape) },
10
+ { relativePath: workflowCompileArtifactPath(workflow.id), content: compileArtifactTemplate(shape) },
11
+ ];
12
+ });
13
+ }
14
+ export function workflowDocumentPath(workflowId) {
15
+ return `.dromio/workflows/${workflowId}.workflow.json`;
16
+ }
17
+ export function workflowCompileArtifactPath(workflowId) {
18
+ return `.dromio/compile/${workflowId}.json`;
19
+ }
20
+ function workflowShape(productId, workflow) {
21
+ const nodeId = workflowNodeId(workflow.id);
22
+ const domain = workflowDomain(workflow.id);
23
+ return {
24
+ catalogExportName: `${camelCase(nodeId)}Step`,
25
+ catalogItemId: `${domain}.${nodeId}`,
26
+ compileScenarioId: `${workflow.id}.authoring-ready`,
27
+ domain,
28
+ inputSchemaName: `${camelCase(nodeId)}InputSchema`,
29
+ nodeId,
30
+ outputSchemaName: `${camelCase(nodeId)}OutputSchema`,
31
+ productId,
32
+ stepTitle: titleFromId(nodeId),
33
+ workflow,
34
+ workflowExportName: `${camelCase(workflow.id)}Workflow`,
35
+ };
36
+ }
37
+ function workflowDocumentTemplate(shape) {
38
+ return `${JSON.stringify({
39
+ description: `${shape.workflow.title} workflow scaffolded from product source evidence.`,
40
+ edges: [
41
+ { id: "request->summary", source: "request", target: shape.nodeId },
42
+ { id: "summary->ready", source: shape.nodeId, target: "ready" },
43
+ ],
44
+ end: {
45
+ id: "ready",
46
+ output: {
47
+ result: {
48
+ jsonSchema: {
49
+ additionalProperties: false,
50
+ properties: {
51
+ summary: { type: "string" },
52
+ workflowId: { const: shape.workflow.id, type: "string" },
53
+ },
54
+ required: ["summary", "workflowId"],
55
+ type: "object",
56
+ },
57
+ },
58
+ },
59
+ type: "result",
60
+ },
61
+ id: shape.workflow.id,
62
+ label: shape.workflow.title,
63
+ nodes: [
64
+ {
65
+ catalogItemId: shape.catalogItemId,
66
+ id: shape.nodeId,
67
+ },
68
+ ],
69
+ trigger: {
70
+ id: "request",
71
+ input: {
72
+ request: {
73
+ jsonSchema: { additionalProperties: {}, type: "object" },
74
+ },
75
+ },
76
+ type: "manual",
77
+ },
78
+ version: 1,
79
+ }, null, 2)}\n`;
80
+ }
81
+ function schemaTemplate(shape) {
82
+ return `import {
83
+ z,
84
+ } from "zod";
85
+
86
+ export const ${shape.inputSchemaName} = z.object({
87
+ request: z.record(z.string(), z.unknown()).default({}),
88
+ });
89
+
90
+ export const ${shape.outputSchemaName} = z.object({
91
+ result: z.object({
92
+ summary: z.string(),
93
+ workflowId: z.literal(${JSON.stringify(shape.workflow.id)}),
94
+ }),
95
+ });
96
+ `;
97
+ }
98
+ function stepTemplate(shape) {
99
+ return `import {
100
+ step,
101
+ } from "@dromio/workflow";
102
+ import {
103
+ ${shape.inputSchemaName},
104
+ ${shape.outputSchemaName},
105
+ } from "./schema.js";
106
+
107
+ export const ${shape.catalogExportName} = step({
108
+ capabilities: [${JSON.stringify(shape.domain)}, "product-workflow"],
109
+ description: ${JSON.stringify(`${shape.stepTitle} for ${shape.workflow.title}.`)},
110
+ examples: [{ userIntent: ${JSON.stringify(shape.workflow.title)} }],
111
+ id: ${JSON.stringify(shape.catalogItemId)},
112
+ implementation: {
113
+ kind: "typescript",
114
+ source: ${JSON.stringify(`catalog/${shape.domain}/${shape.nodeId}/step.ts`)},
115
+ },
116
+ input: {
117
+ request: ${shape.inputSchemaName}.shape.request,
118
+ },
119
+ intents: [${JSON.stringify(shape.workflow.title)}],
120
+ label: ${JSON.stringify(shape.stepTitle)},
121
+ output: {
122
+ result: ${shape.outputSchemaName}.shape.result,
123
+ },
124
+ sideEffects: [],
125
+ tags: [${JSON.stringify(shape.domain)}, "dromio-product"],
126
+ verbs: ["review"],
127
+ run() {
128
+ return {
129
+ result: {
130
+ summary: ${JSON.stringify(`${shape.workflow.title} is ready for product-specific implementation.`)},
131
+ workflowId: ${JSON.stringify(shape.workflow.id)},
132
+ },
133
+ };
134
+ },
135
+ });
136
+ `;
137
+ }
138
+ function catalogIndexTemplate(productId, workflows) {
139
+ const shapes = (workflows ?? []).map((workflow) => workflowShape(productId, workflow));
140
+ return `import {
141
+ catalog,
142
+ } from "@dromio/workflow";
143
+ ${shapes.map((shape) => `import {
144
+ ${shape.catalogExportName},
145
+ } from "./${shape.domain}/${shape.nodeId}/step.js";`).join("\n")}
146
+
147
+ export const ${camelCase(productId)}CatalogItems = [
148
+ ${shapes.map((shape) => ` ${shape.catalogExportName},`).join("\n")}
149
+ ];
150
+
151
+ export const ${camelCase(productId)}Catalog = catalog(${camelCase(productId)}CatalogItems);
152
+ `;
153
+ }
154
+ function workflowGlueTemplate(shape) {
155
+ return `import {
156
+ workflow,
157
+ } from "@dromio/workflow";
158
+ import {
159
+ ${camelCase(shape.productId)}CatalogItems,
160
+ } from "../../catalog/index.js";
161
+
162
+ export const ${shape.workflowExportName} = workflow({
163
+ catalog: ${camelCase(shape.productId)}CatalogItems,
164
+ document: new URL(${JSON.stringify(`../../${workflowDocumentPath(shape.workflow.id)}`)}, import.meta.url),
165
+ });
166
+ `;
167
+ }
168
+ function compileArtifactTemplate(shape) {
169
+ return `${JSON.stringify({
170
+ artifactVersion: 1,
171
+ bddScenarios: [
172
+ {
173
+ id: shape.compileScenarioId,
174
+ title: `${shape.workflow.title} authoring-ready smoke`,
175
+ },
176
+ ],
177
+ dependencies: {
178
+ runtimeDependencies: [
179
+ {
180
+ id: shape.catalogItemId,
181
+ kind: "catalog-item",
182
+ source: `catalog/${shape.domain}/${shape.nodeId}/step.ts`,
183
+ },
184
+ ],
185
+ sideEffects: [],
186
+ },
187
+ governance: {
188
+ approvalPolicy: shape.workflow.approvalPolicy ?? "none",
189
+ publishable: true,
190
+ },
191
+ runtimeTools: [
192
+ {
193
+ approval: shape.workflow.approvalPolicy === "human-confirm-writes" ? "always" : "never",
194
+ bddScenarioIds: [shape.compileScenarioId],
195
+ dependencies: {
196
+ configRequirementIds: [],
197
+ runtimeDependencies: [
198
+ {
199
+ catalogItemIds: [shape.catalogItemId],
200
+ id: shape.catalogItemId,
201
+ kind: "catalog-item",
202
+ label: shape.workflow.title,
203
+ required: true,
204
+ },
205
+ ],
206
+ sideEffects: [],
207
+ },
208
+ description: `Run workflow ${shape.workflow.title ?? shape.workflow.id}.`,
209
+ effect: "read",
210
+ id: `workflow.${shape.workflow.id}.run`,
211
+ inputSchema: { type: "object" },
212
+ outputSchema: { type: "object" },
213
+ title: `${shape.workflow.title} manual run`,
214
+ workflowId: shape.workflow.id,
215
+ workflowVersion: 1,
216
+ },
217
+ ],
218
+ steps: [
219
+ {
220
+ catalogItemId: shape.catalogItemId,
221
+ id: shape.nodeId,
222
+ implementationSource: `catalog/${shape.domain}/${shape.nodeId}/step.ts`,
223
+ sideEffects: [],
224
+ },
225
+ ],
226
+ topology: {
227
+ edgeCount: 2,
228
+ nodeCount: 1,
229
+ terminalNodes: ["ready"],
230
+ type: "linear",
231
+ },
232
+ validation: {
233
+ mode: "full",
234
+ valid: true,
235
+ },
236
+ workflow: {
237
+ id: shape.workflow.id,
238
+ label: shape.workflow.title,
239
+ version: 1,
240
+ },
241
+ }, null, 2)}\n`;
242
+ }
243
+ function workflowDomain(workflowId) {
244
+ if (/cashflow|budget|expense|income/.test(workflowId))
245
+ return "budget";
246
+ if (/risk|solvency|overdraft/.test(workflowId))
247
+ return "solvency";
248
+ if (/credit|card/.test(workflowId))
249
+ return "cards";
250
+ return "product";
251
+ }
252
+ function workflowNodeId(workflowId) {
253
+ if (/cashflow/.test(workflowId))
254
+ return "summarize-month-cashflow";
255
+ if (/solvency|risk/.test(workflowId))
256
+ return "classify-solvency-risk";
257
+ if (/credit|card/.test(workflowId))
258
+ return "assess-card-pressure";
259
+ if (/snapshot/.test(workflowId))
260
+ return "prepare-viewer-snapshot";
261
+ if (/import/.test(workflowId))
262
+ return "stage-product-backup";
263
+ return "produce-product-review";
264
+ }
265
+ function titleFromId(id) {
266
+ return id
267
+ .split("-")
268
+ .filter(Boolean)
269
+ .map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`)
270
+ .join(" ");
271
+ }
272
+ function camelCase(value) {
273
+ return value
274
+ .split(/[^a-zA-Z0-9]+/)
275
+ .filter(Boolean)
276
+ .map((part, index) => {
277
+ const lower = part.toLowerCase();
278
+ return index === 0 ? lower : `${lower[0]?.toUpperCase() ?? ""}${lower.slice(1)}`;
279
+ })
280
+ .join("") || "workflow";
281
+ }
282
+ //# sourceMappingURL=authoringWorkflowTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoringWorkflowTemplates.js","sourceRoot":"","sources":["../src/authoringWorkflowTemplates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { LoadProductManifestsOptions } from "./manifest.js";
2
+ import type { DromioProductBundleManifest } from "./schemas.js";
3
+ export interface BuildDromioProductOptions extends LoadProductManifestsOptions {
4
+ readonly outDir?: string;
5
+ }
6
+ export interface BuildDromioProductResult {
7
+ readonly bundleManifest: DromioProductBundleManifest;
8
+ readonly bundlePath: string;
9
+ readonly stagingDir: string;
10
+ }
11
+ export declare function buildDromioProduct(options?: BuildDromioProductOptions): Promise<BuildDromioProductResult>;
12
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,2BAA2B,EAAyB,MAAM,cAAc,CAAC;AAEvF,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,cAAc,EAAE,2BAA2B,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAOD,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAkDnC"}
package/dist/build.js ADDED
@@ -0,0 +1,119 @@
1
+ import { basename, dirname, join, relative } from "node:path";
2
+ import { spawn } from "node:child_process";
3
+ import { copyFile, mkdir, readdir } from "node:fs/promises";
4
+ import { checkDromioProduct } from "./check.js";
5
+ import { ensureCleanDirectory, hashFile, listSourceFiles, resolveProductPath, toPosixPath, writeJsonFile, } from "./files.js";
6
+ export async function buildDromioProduct(options = {}) {
7
+ const check = await checkDromioProduct(options);
8
+ const env = check.environment.id;
9
+ const bundleName = `${check.product.id}-${check.product.version}.dromio`;
10
+ const outDir = options.outDir ?? join(check.productRoot, ".dromio");
11
+ const stagingDir = join(outDir, "build", bundleName);
12
+ const bundlePath = join(outDir, `${bundleName}.tgz`);
13
+ await ensureCleanDirectory(stagingDir);
14
+ const productManifestPath = "product.manifest.json";
15
+ const environmentManifestPath = `environment.${env}.json`;
16
+ const sourceInventoryPath = "source-inventory.json";
17
+ const checksumsPath = "checksums.json";
18
+ const sourceInventory = await createSourceInventory(check.productRoot);
19
+ const bundleManifest = {
20
+ schemaVersion: 1,
21
+ product: {
22
+ id: check.product.id,
23
+ name: check.product.name,
24
+ version: check.product.version,
25
+ },
26
+ environment: { id: env },
27
+ compatibility: check.product.requires,
28
+ artifacts: {
29
+ productManifest: productManifestPath,
30
+ environmentManifest: environmentManifestPath,
31
+ sourceInventory: sourceInventoryPath,
32
+ checksums: checksumsPath,
33
+ },
34
+ provenance: {
35
+ builder: "@dromio/product",
36
+ generatedAt: new Date().toISOString(),
37
+ },
38
+ };
39
+ await writeJsonFile(join(stagingDir, "bundle.manifest.json"), bundleManifest);
40
+ await writeJsonFile(join(stagingDir, productManifestPath), check.product);
41
+ await writeJsonFile(join(stagingDir, environmentManifestPath), check.environment);
42
+ await writeJsonFile(join(stagingDir, sourceInventoryPath), sourceInventory);
43
+ await copyDeclaredFiles(check.productRoot, stagingDir, [
44
+ ...Object.values(check.product.entry).filter((value) => Boolean(value)),
45
+ ...workflowArtifactPaths(check.product),
46
+ ...check.product.fixtures,
47
+ ]);
48
+ await writeJsonFile(join(stagingDir, checksumsPath), await createChecksums(stagingDir));
49
+ await createTarball({ bundlePath, cwd: outDir, sourceDir: join("build", bundleName) });
50
+ return { bundleManifest, bundlePath, stagingDir };
51
+ }
52
+ function workflowArtifactPaths(product) {
53
+ return product.workflows.flatMap((workflow) => [workflow.document, workflow.compileArtifact].filter((value) => Boolean(value)));
54
+ }
55
+ async function createSourceInventory(productRoot) {
56
+ const files = await listSourceFiles(productRoot);
57
+ return Promise.all(files.map(async (file) => ({
58
+ path: file.relativePath,
59
+ sha256: await hashFile(file.absolutePath),
60
+ })));
61
+ }
62
+ async function createChecksums(stagingDir) {
63
+ return await listBundleFiles(stagingDir);
64
+ }
65
+ async function listBundleFiles(stagingDir) {
66
+ const files = [];
67
+ await collectBundleFiles(stagingDir, stagingDir, files);
68
+ files.sort((a, b) => a.path.localeCompare(b.path));
69
+ return files;
70
+ }
71
+ async function collectBundleFiles(stagingDir, dir, files) {
72
+ for (const entry of await readdir(dir, { withFileTypes: true })) {
73
+ const absolutePath = join(dir, entry.name);
74
+ if (entry.isDirectory()) {
75
+ await collectBundleFiles(stagingDir, absolutePath, files);
76
+ continue;
77
+ }
78
+ if (!entry.isFile())
79
+ continue;
80
+ files.push({
81
+ path: toPosixPath(relative(stagingDir, absolutePath)),
82
+ sha256: await hashFile(absolutePath),
83
+ });
84
+ }
85
+ }
86
+ async function copyDeclaredFiles(productRoot, stagingDir, relativePaths) {
87
+ for (const path of relativePaths) {
88
+ const source = resolveProductPath(productRoot, path);
89
+ const target = join(stagingDir, "files", toPosixPath(path));
90
+ await mkdir(dirname(target), { recursive: true });
91
+ await copyFile(source, target);
92
+ }
93
+ }
94
+ async function createTarball(input) {
95
+ await new Promise((resolve, reject) => {
96
+ const child = spawn("tar", ["-czf", basename(input.bundlePath), input.sourceDir], {
97
+ cwd: input.cwd,
98
+ stdio: ["ignore", "pipe", "pipe"],
99
+ });
100
+ let stderr = "";
101
+ child.stderr.setEncoding("utf8");
102
+ child.stderr.on("data", (chunk) => {
103
+ stderr += chunk;
104
+ });
105
+ child.on("error", reject);
106
+ child.on("close", (code) => {
107
+ if (code === 0) {
108
+ resolve();
109
+ return;
110
+ }
111
+ reject(new Error(`tar failed with exit code ${code ?? "unknown"}: ${stderr.trim()}`));
112
+ });
113
+ });
114
+ const sourceRel = relative(input.cwd, join(input.cwd, input.sourceDir));
115
+ if (sourceRel.startsWith("..")) {
116
+ throw new Error(`Tar source escaped output directory: ${input.sourceDir}`);
117
+ }
118
+ }
119
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ArchitectureCheckReport } from "./architectureCheck.js";
2
+ import { type ForbiddenImportFinding } from "./forbiddenImports.js";
3
+ import { type LoadProductManifestsOptions } from "./manifest.js";
4
+ import type { DromioEnvironmentManifest, DromioProductManifest } from "./schemas.js";
5
+ export interface ProductCheckResult {
6
+ readonly architecture: ArchitectureCheckReport;
7
+ readonly environment: DromioEnvironmentManifest;
8
+ readonly entrypointCount: number;
9
+ readonly fixtureCount: number;
10
+ readonly forbiddenImports: readonly ForbiddenImportFinding[];
11
+ readonly product: DromioProductManifest;
12
+ readonly productRoot: string;
13
+ readonly sourceFileCount: number;
14
+ }
15
+ export declare function checkDromioProduct(options?: LoadProductManifestsOptions): Promise<ProductCheckResult>;
16
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,kBAAkB,CAAC,CAyB7B"}
package/dist/check.js ADDED
@@ -0,0 +1,172 @@
1
+ import { basename } from "node:path";
2
+ import { formatArchitectureFindings, validateProductArchitecture, } from "./architectureCheck.js";
3
+ import { assertFileExists, listSourceFiles, readTextFile, resolveProductPath, toPosixPath } from "./files.js";
4
+ import { findForbiddenImports } from "./forbiddenImports.js";
5
+ import { loadProductManifests } from "./manifest.js";
6
+ export async function checkDromioProduct(options = {}) {
7
+ const manifests = await loadProductManifests(options);
8
+ assertEntrypoints(manifests.productRoot, manifests.product);
9
+ assertFixtures(manifests.productRoot, manifests.product);
10
+ await assertWorkflowArtifacts(manifests.productRoot, manifests.product);
11
+ const forbiddenImports = await findForbiddenImports(manifests.productRoot);
12
+ if (forbiddenImports.length > 0) {
13
+ throw new Error(formatForbiddenImports(forbiddenImports));
14
+ }
15
+ const architecture = await validateProductArchitecture(manifests.productRoot, manifests.product);
16
+ const blockingArchitectureFindings = architecture.findings.filter((finding) => finding.severity === "error");
17
+ if (blockingArchitectureFindings.length > 0) {
18
+ throw new Error(formatArchitectureFindings(blockingArchitectureFindings));
19
+ }
20
+ const sourceFiles = await listSourceFiles(manifests.productRoot);
21
+ return {
22
+ architecture,
23
+ environment: manifests.environment,
24
+ entrypointCount: countEntrypoints(manifests.product),
25
+ fixtureCount: manifests.product.fixtures.length,
26
+ forbiddenImports,
27
+ product: manifests.product,
28
+ productRoot: manifests.productRoot,
29
+ sourceFileCount: sourceFiles.length,
30
+ };
31
+ }
32
+ function assertEntrypoints(productRoot, product) {
33
+ for (const [key, value] of Object.entries(product.entry)) {
34
+ if (!value)
35
+ continue;
36
+ assertFileExists(resolveProductPath(productRoot, value), `${key} entrypoint`);
37
+ }
38
+ }
39
+ function assertFixtures(productRoot, product) {
40
+ for (const fixture of product.fixtures) {
41
+ assertFileExists(resolveProductPath(productRoot, fixture), `fixture ${basename(fixture)}`);
42
+ }
43
+ }
44
+ async function assertWorkflowArtifacts(productRoot, product) {
45
+ for (const workflow of product.workflows) {
46
+ await assertWorkflowArtifactSet(productRoot, workflow);
47
+ }
48
+ }
49
+ async function assertWorkflowArtifactSet(productRoot, workflow) {
50
+ const documentPath = resolveProductPath(productRoot, workflow.document);
51
+ const compileArtifactPath = resolveProductPath(productRoot, workflow.compileArtifact);
52
+ assertFileExists(documentPath, `workflow ${workflow.id} document`);
53
+ assertFileExists(compileArtifactPath, `workflow ${workflow.id} compile artifact`);
54
+ const document = readJsonObject(await readTextFile(documentPath), `workflow ${workflow.id} document`);
55
+ const compileArtifact = readJsonObject(await readTextFile(compileArtifactPath), `workflow ${workflow.id} compile artifact`);
56
+ assertWorkflowDocument(productRoot, workflow, document);
57
+ assertCompileArtifact(workflow, document, compileArtifact);
58
+ }
59
+ function assertWorkflowDocument(productRoot, workflow, document) {
60
+ if (document.id !== workflow.id) {
61
+ throw new Error(`workflow ${workflow.id} document id mismatch`);
62
+ }
63
+ const trigger = readRecord(document.trigger, `workflow ${workflow.id} trigger`);
64
+ const end = readRecord(document.end, `workflow ${workflow.id} end`);
65
+ const nodes = readArray(document.nodes, `workflow ${workflow.id} nodes`);
66
+ const edges = readArray(document.edges, `workflow ${workflow.id} edges`);
67
+ const triggerId = readString(trigger.id, `workflow ${workflow.id} trigger.id`);
68
+ const endId = readString(end.id, `workflow ${workflow.id} end.id`);
69
+ const nodeIds = new Set();
70
+ for (const node of nodes) {
71
+ const record = readRecord(node, `workflow ${workflow.id} node`);
72
+ const nodeId = readString(record.id, `workflow ${workflow.id} node.id`);
73
+ const catalogItemId = readString(record.catalogItemId, `workflow ${workflow.id} ${nodeId}.catalogItemId`);
74
+ nodeIds.add(nodeId);
75
+ assertFileExists(resolveProductPath(productRoot, catalogStepPath(catalogItemId)), `workflow ${workflow.id} catalog item ${catalogItemId}`);
76
+ }
77
+ const reachable = new Set([triggerId]);
78
+ for (let changed = true; changed;) {
79
+ changed = false;
80
+ for (const edge of edges) {
81
+ const record = readRecord(edge, `workflow ${workflow.id} edge`);
82
+ const source = readString(record.source, `workflow ${workflow.id} edge.source`);
83
+ const target = readString(record.target, `workflow ${workflow.id} edge.target`);
84
+ if (!isKnownWorkflowPoint(source, triggerId, endId, nodeIds)) {
85
+ throw new Error(`workflow ${workflow.id} edge source is unknown: ${source}`);
86
+ }
87
+ if (!isKnownWorkflowPoint(target, triggerId, endId, nodeIds)) {
88
+ throw new Error(`workflow ${workflow.id} edge target is unknown: ${target}`);
89
+ }
90
+ if (reachable.has(source) && !reachable.has(target)) {
91
+ reachable.add(target);
92
+ changed = true;
93
+ }
94
+ }
95
+ }
96
+ for (const nodeId of nodeIds) {
97
+ if (!reachable.has(nodeId))
98
+ throw new Error(`workflow ${workflow.id} node is unreachable: ${nodeId}`);
99
+ }
100
+ if (!reachable.has(endId))
101
+ throw new Error(`workflow ${workflow.id} end is unreachable: ${endId}`);
102
+ if (containsInfrastructureReference(JSON.stringify(document))) {
103
+ throw new Error(`workflow ${workflow.id} document contains infrastructure references`);
104
+ }
105
+ }
106
+ function assertCompileArtifact(workflow, document, artifact) {
107
+ const artifactWorkflow = readRecord(artifact.workflow, `workflow ${workflow.id} compile workflow`);
108
+ if (artifactWorkflow.id !== workflow.id) {
109
+ throw new Error(`workflow ${workflow.id} compile artifact workflow id mismatch`);
110
+ }
111
+ const governance = readRecord(artifact.governance, `workflow ${workflow.id} compile governance`);
112
+ if (governance.publishable !== true) {
113
+ throw new Error(`workflow ${workflow.id} compile artifact is not publishable`);
114
+ }
115
+ const validation = readRecord(artifact.validation, `workflow ${workflow.id} compile validation`);
116
+ if (validation.valid !== true || validation.mode !== "full") {
117
+ throw new Error(`workflow ${workflow.id} compile artifact validation must be full and valid`);
118
+ }
119
+ const bddScenarios = readArray(artifact.bddScenarios, `workflow ${workflow.id} compile bddScenarios`);
120
+ if (bddScenarios.length === 0)
121
+ throw new Error(`workflow ${workflow.id} compile artifact has no BDD scenarios`);
122
+ const topology = readRecord(artifact.topology, `workflow ${workflow.id} compile topology`);
123
+ const nodeCount = readNumber(topology.nodeCount, `workflow ${workflow.id} compile topology.nodeCount`);
124
+ const documentNodeCount = readArray(document.nodes, `workflow ${workflow.id} nodes`).length;
125
+ if (nodeCount !== documentNodeCount) {
126
+ throw new Error(`workflow ${workflow.id} compile artifact nodeCount does not match workflow document`);
127
+ }
128
+ }
129
+ function catalogStepPath(catalogItemId) {
130
+ return `catalog/${catalogItemId.split(".").join("/")}/step.ts`;
131
+ }
132
+ function isKnownWorkflowPoint(value, triggerId, endId, nodeIds) {
133
+ return value === triggerId || value === endId || nodeIds.has(value);
134
+ }
135
+ function containsInfrastructureReference(value) {
136
+ return /\b(fetch|db\.query|openai\.chat|readFile|writeFile)\b/.test(value);
137
+ }
138
+ function readJsonObject(content, label) {
139
+ const parsed = JSON.parse(content);
140
+ return readRecord(parsed, label);
141
+ }
142
+ function readRecord(value, label) {
143
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
144
+ throw new Error(`${label} must be a JSON object`);
145
+ }
146
+ return value;
147
+ }
148
+ function readArray(value, label) {
149
+ if (!Array.isArray(value))
150
+ throw new Error(`${label} must be an array`);
151
+ return value;
152
+ }
153
+ function readString(value, label) {
154
+ if (typeof value !== "string" || value.length === 0)
155
+ throw new Error(`${label} must be a string`);
156
+ return value;
157
+ }
158
+ function readNumber(value, label) {
159
+ if (typeof value !== "number" || !Number.isFinite(value))
160
+ throw new Error(`${label} must be a number`);
161
+ return value;
162
+ }
163
+ function countEntrypoints(product) {
164
+ return Object.values(product.entry).filter(Boolean).length;
165
+ }
166
+ function formatForbiddenImports(findings) {
167
+ return [
168
+ "Forbidden Dromio workspace imports found:",
169
+ ...findings.map((finding) => `- ${toPosixPath(finding.path)}: ${finding.reason}`),
170
+ ].join("\n");
171
+ }
172
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map