@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.
- package/LICENSE +201 -0
- package/dist/architectureCheck.d.ts +11 -0
- package/dist/architectureCheck.d.ts.map +1 -0
- package/dist/architectureCheck.js +269 -0
- package/dist/architectureCheck.js.map +1 -0
- package/dist/architectureCheckTypes.d.ts +23 -0
- package/dist/architectureCheckTypes.d.ts.map +1 -0
- package/dist/architectureCheckTypes.js +50 -0
- package/dist/architectureCheckTypes.js.map +1 -0
- package/dist/architectureEffectCheck.d.ts +4 -0
- package/dist/architectureEffectCheck.d.ts.map +1 -0
- package/dist/architectureEffectCheck.js +106 -0
- package/dist/architectureEffectCheck.js.map +1 -0
- package/dist/authoring.d.ts +55 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.js +308 -0
- package/dist/authoring.js.map +1 -0
- package/dist/authoringArchitectureTemplates.d.ts +5 -0
- package/dist/authoringArchitectureTemplates.d.ts.map +1 -0
- package/dist/authoringArchitectureTemplates.js +169 -0
- package/dist/authoringArchitectureTemplates.js.map +1 -0
- package/dist/authoringManifestTemplates.d.ts +4 -0
- package/dist/authoringManifestTemplates.d.ts.map +1 -0
- package/dist/authoringManifestTemplates.js +77 -0
- package/dist/authoringManifestTemplates.js.map +1 -0
- package/dist/authoringPackageJson.d.ts +3 -0
- package/dist/authoringPackageJson.d.ts.map +1 -0
- package/dist/authoringPackageJson.js +69 -0
- package/dist/authoringPackageJson.js.map +1 -0
- package/dist/authoringTemplates.d.ts +9 -0
- package/dist/authoringTemplates.d.ts.map +1 -0
- package/dist/authoringTemplates.js +142 -0
- package/dist/authoringTemplates.js.map +1 -0
- package/dist/authoringWorkflowTemplates.d.ts +13 -0
- package/dist/authoringWorkflowTemplates.d.ts.map +1 -0
- package/dist/authoringWorkflowTemplates.js +282 -0
- package/dist/authoringWorkflowTemplates.js.map +1 -0
- package/dist/build.d.ts +12 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +119 -0
- package/dist/build.js.map +1 -0
- package/dist/check.d.ts +16 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +172 -0
- package/dist/check.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +93 -0
- package/dist/cli.js.map +1 -0
- package/dist/deploymentProfile.d.ts +19 -0
- package/dist/deploymentProfile.d.ts.map +1 -0
- package/dist/deploymentProfile.js +72 -0
- package/dist/deploymentProfile.js.map +1 -0
- package/dist/emitFromDefinition.d.ts +14 -0
- package/dist/emitFromDefinition.d.ts.map +1 -0
- package/dist/emitFromDefinition.js +87 -0
- package/dist/emitFromDefinition.js.map +1 -0
- package/dist/files.d.ts +13 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +77 -0
- package/dist/files.js.map +1 -0
- package/dist/forbiddenImports.d.ts +7 -0
- package/dist/forbiddenImports.d.ts.map +1 -0
- package/dist/forbiddenImports.js +31 -0
- package/dist/forbiddenImports.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +14 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +49 -0
- package/dist/manifest.js.map +1 -0
- package/dist/publish.d.ts +29 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +40 -0
- package/dist/publish.js.map +1 -0
- package/dist/publishPlan.d.ts +62 -0
- package/dist/publishPlan.d.ts.map +1 -0
- package/dist/publishPlan.js +204 -0
- package/dist/publishPlan.js.map +1 -0
- package/dist/schemas.d.ts +141 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +154 -0
- package/dist/schemas.js.map +1 -0
- 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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"}
|
package/dist/build.d.ts
ADDED
|
@@ -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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"}
|
package/dist/check.d.ts
ADDED
|
@@ -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