@sixthsummit/ship-cli 0.0.0-stage → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +45 -2
  4. package/lib/bin.d.ts +3 -0
  5. package/lib/bin.d.ts.map +1 -0
  6. package/lib/bin.js +4 -0
  7. package/lib/bin.js.map +1 -0
  8. package/lib/contract.d.ts +27 -0
  9. package/lib/contract.d.ts.map +1 -0
  10. package/lib/contract.js +99 -0
  11. package/lib/contract.js.map +1 -0
  12. package/lib/create.d.ts +60 -0
  13. package/lib/create.d.ts.map +1 -0
  14. package/lib/create.js +212 -0
  15. package/lib/create.js.map +1 -0
  16. package/lib/forms.d.ts +10 -0
  17. package/lib/forms.d.ts.map +1 -0
  18. package/lib/forms.js +96 -0
  19. package/lib/forms.js.map +1 -0
  20. package/lib/graph.d.ts +195 -0
  21. package/lib/graph.d.ts.map +1 -0
  22. package/lib/graph.js +596 -0
  23. package/lib/graph.js.map +1 -0
  24. package/lib/index.d.ts +7 -0
  25. package/lib/index.d.ts.map +1 -0
  26. package/lib/index.js +7 -0
  27. package/lib/index.js.map +1 -0
  28. package/lib/migration.d.ts +53 -0
  29. package/lib/migration.d.ts.map +1 -0
  30. package/lib/migration.js +303 -0
  31. package/lib/migration.js.map +1 -0
  32. package/lib/release-manifest.json +23 -0
  33. package/lib/ship-api.d.ts +38 -0
  34. package/lib/ship-api.d.ts.map +1 -0
  35. package/lib/ship-api.js +134 -0
  36. package/lib/ship-api.js.map +1 -0
  37. package/package.json +70 -3
  38. package/templates/operation/.github/pull_request_template.md +41 -0
  39. package/templates/operation/AGENTS.md +46 -0
  40. package/templates/operation/README.md +37 -0
  41. package/templates/operation/_gitignore +5 -0
  42. package/templates/operation/_gitmessage +12 -0
  43. package/templates/operation/biome.json +39 -0
  44. package/templates/operation/package.template.json +21 -0
  45. package/templates/operation/ship.config.ts +1 -0
  46. package/templates/operation/src/application.integration.test.ts +15 -0
  47. package/templates/operation/src/application.test.ts +16 -0
  48. package/templates/operation/src/application.ts +7 -0
  49. package/templates/operation/src/modules/system/health.operation.ts +34 -0
  50. package/templates/operation/src/modules/system/module.ts +10 -0
  51. package/templates/operation/src/server.ts +13 -0
  52. package/templates/operation/tsconfig.build.json +11 -0
  53. package/templates/operation/tsconfig.json +17 -0
  54. package/templates/operation/vitest.config.ts +20 -0
  55. package/templates/operation/vitest.integration.config.ts +8 -0
package/lib/graph.js ADDED
@@ -0,0 +1,596 @@
1
+ import { access, mkdir, rename, rm, writeFile } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { tsImport } from "tsx/esm/api";
5
+ /** @typedef {import("@sixthsummit/ship-core").AnyModule} AnyModule */
6
+ /** @typedef {import("@sixthsummit/ship-core").ApplicationGraph} ApplicationGraph */
7
+ /** @typedef {import("@sixthsummit/ship-core").CompiledApplication<string, readonly AnyModule[]>} LoadedApplication */
8
+ /** @typedef {import("@sixthsummit/ship-core").ModuleGraphNode | import("@sixthsummit/ship-core").OperationGraphNode | import("@sixthsummit/ship-core").ProviderGraphNode | import("@sixthsummit/ship-core").ChannelGraphNode | import("@sixthsummit/ship-core").JobGraphNode | ApplicationGraph} GraphNode */
9
+ /** @typedef {"human" | "json"} GraphOutputFormat */
10
+ /** @typedef {"app" | "module" | "operation" | "provider" | "channel" | "job"} GraphKind */
11
+ /** @typedef {0 | 1 | 2} GraphCliExitCode */
12
+ /**
13
+ * @typedef {object} GraphCliDiagnostic
14
+ * @property {string} code
15
+ * @property {"error" | "warning"} severity
16
+ * @property {string} message
17
+ * @property {string} hint
18
+ * @property {string=} appId
19
+ * @property {string=} moduleId
20
+ * @property {string=} operationId
21
+ * @property {string=} providerId
22
+ * @property {string=} path
23
+ */
24
+ /**
25
+ * @typedef {object} GraphCliOptions
26
+ * @property {string=} cwd
27
+ * @property {string=} appPath
28
+ * @property {string=} emit
29
+ * @property {GraphOutputFormat=} format
30
+ */
31
+ /**
32
+ * @typedef {object} AffectedGraphSurface
33
+ * @property {readonly string[]} modules
34
+ * @property {readonly string[]} operations
35
+ * @property {readonly string[]} providers
36
+ */
37
+ /**
38
+ * @typedef {object} GraphIo
39
+ * @property {(value: string) => unknown} stdout
40
+ * @property {(value: string) => unknown} stderr
41
+ */
42
+ export const GRAPH_CLI_EXIT = Object.freeze({
43
+ success: 0,
44
+ applicationInvalid: 1,
45
+ usageOrLoadError: 2,
46
+ });
47
+ const DEFAULT_APP_PATH = "ship.config.ts";
48
+ const DEFAULT_GRAPH_PATH = ".ship/graph.json";
49
+ const GRAPH_FORMATS = new Set(["human", "json"]);
50
+ const GRAPH_KINDS = new Set(["app", "module", "operation", "provider", "channel", "job"]);
51
+ const DEFINITION_ERROR_PATTERN = /^SHIP_[A-Z0-9_]+$/u;
52
+ export class GraphCliError extends Error {
53
+ /**
54
+ * @param {readonly GraphCliDiagnostic[]} diagnostics
55
+ * @param {GraphCliExitCode} [exitCode]
56
+ * @param {ErrorOptions} [options]
57
+ */
58
+ constructor(diagnostics, exitCode = GRAPH_CLI_EXIT.usageOrLoadError, options) {
59
+ super(diagnostics[0]?.message ?? "Ship graph command failed", options);
60
+ this.name = "GraphCliError";
61
+ this.diagnostics = Object.freeze(diagnostics.map((item) => Object.freeze({ ...item })));
62
+ this.exitCode = exitCode;
63
+ }
64
+ }
65
+ /**
66
+ * @param {GraphCliOptions} [options]
67
+ * @returns {Promise<LoadedApplication>}
68
+ */
69
+ export async function loadApplication(options = {}) {
70
+ const cwd = resolve(options.cwd ?? process.cwd());
71
+ const appPath = resolve(cwd, options.appPath ?? DEFAULT_APP_PATH);
72
+ try {
73
+ await access(appPath);
74
+ }
75
+ catch (cause) {
76
+ throw cliError("SHIP_CLI_APP_NOT_FOUND", `application module was not found at ${JSON.stringify(appPath)}`, "Create ship.config.ts with a named `app` export or pass --app <path>.", { path: appPath }, { cause });
77
+ }
78
+ let loaded;
79
+ try {
80
+ loaded = await tsImport(pathToFileURL(appPath).href, import.meta.url);
81
+ }
82
+ catch (cause) {
83
+ if (hasApplicationDiagnostics(cause)) {
84
+ throw new GraphCliError(cause.diagnostics, GRAPH_CLI_EXIT.applicationInvalid, { cause });
85
+ }
86
+ const definitionError = definitionDiagnostic(cause);
87
+ if (definitionError) {
88
+ throw new GraphCliError([definitionError], GRAPH_CLI_EXIT.applicationInvalid, { cause });
89
+ }
90
+ throw cliError("SHIP_CLI_APP_LOAD_FAILED", `application module ${JSON.stringify(appPath)} could not be loaded: ${safeErrorMessage(cause)}`, "Run the project's TypeScript check, then load only declaration-safe code from ship.config.ts.", { path: appPath }, { cause });
91
+ }
92
+ if (!("app" in loaded)) {
93
+ throw cliError("SHIP_CLI_APP_EXPORT_MISSING", `application module ${JSON.stringify(appPath)} has no named \`app\` export`, "Export the defineApp(...) result as `export const app = ...`.", { path: appPath });
94
+ }
95
+ assertCompiledApplication(loaded.app, appPath);
96
+ return loaded.app;
97
+ }
98
+ /**
99
+ * @param {GraphCliOptions} [options]
100
+ * @returns {Promise<Readonly<{command: "check", ok: true, graph: ApplicationGraph, emitted?: string}>>}
101
+ */
102
+ export async function checkApplication(options = {}) {
103
+ const application = await loadApplication(options);
104
+ let emitted;
105
+ if (options.emit !== undefined) {
106
+ emitted = resolve(options.cwd ?? process.cwd(), options.emit || DEFAULT_GRAPH_PATH);
107
+ await writeGraph(application.graph, emitted);
108
+ }
109
+ return Object.freeze({
110
+ command: "check",
111
+ ok: true,
112
+ graph: application.graph,
113
+ /** Non-fatal compiler diagnostics such as SHIP_JOB_SINGLE_RUNNER_UNKEYED. */
114
+ warnings: Object.freeze([...(application.diagnostics ?? [])]),
115
+ ...(emitted ? { emitted } : {}),
116
+ });
117
+ }
118
+ /**
119
+ * @param {GraphKind} kind
120
+ * @param {string | undefined} id
121
+ * @param {GraphCliOptions} [options]
122
+ * @returns {Promise<Readonly<{command: "inspect", ok: true, kind: GraphKind, id: string, node: GraphNode}>>}
123
+ */
124
+ export async function inspectApplication(kind, id, options = {}) {
125
+ assertKind(kind);
126
+ const { graph } = await loadApplication(options);
127
+ const node = findNode(graph, kind, id);
128
+ const nodeId = kind === "app" ? node.appId : node.id;
129
+ return Object.freeze({
130
+ command: "inspect",
131
+ ok: true,
132
+ kind,
133
+ id: nodeId,
134
+ node,
135
+ ...(kind === "app" || kind === "module"
136
+ ? { permissions: projectPermissions(graph, kind === "module" ? nodeId : undefined) }
137
+ : {}),
138
+ });
139
+ }
140
+ const FRAMEWORK_PERMISSION_PREFIX = "ship.";
141
+ /**
142
+ * Every permission slug an app or module's operations (and HTTP job triggers)
143
+ * demand, with the operations that demand it. A slug under `ship.` is
144
+ * introduced by a framework module (`ship.outbox:manage`, `ship.jobs:manage`,
145
+ * `ship.webhooks:replay`) and must be granted by the consumer's own
146
+ * authorization model before those operations can be reached.
147
+ *
148
+ * @param {ApplicationGraph} graph
149
+ * @param {string | undefined} moduleId
150
+ * @returns {readonly Readonly<{permission: string, framework: boolean, operations: readonly string[]}>[]}
151
+ */
152
+ function projectPermissions(graph, moduleId) {
153
+ /** @type {Map<string, Set<string>>} */
154
+ const operationsByPermission = new Map();
155
+ const collect = (access, operationId) => {
156
+ if (!access || access.kind !== "permissions")
157
+ return;
158
+ for (const permission of access.permissions) {
159
+ const operations = operationsByPermission.get(permission) ?? new Set();
160
+ operations.add(operationId);
161
+ operationsByPermission.set(permission, operations);
162
+ }
163
+ };
164
+ for (const operation of graph.operations) {
165
+ if (moduleId && operation.moduleId !== moduleId)
166
+ continue;
167
+ collect(operation.access, operation.id);
168
+ }
169
+ for (const job of graph.jobs ?? []) {
170
+ if (moduleId && job.moduleId !== moduleId)
171
+ continue;
172
+ if (job.trigger?.kind === "http")
173
+ collect(job.trigger.access, job.id);
174
+ }
175
+ return Object.freeze([...operationsByPermission]
176
+ .sort(([left], [right]) => left.localeCompare(right))
177
+ .map(([permission, operations]) => Object.freeze({
178
+ permission,
179
+ framework: permission.startsWith(FRAMEWORK_PERMISSION_PREFIX),
180
+ operations: Object.freeze([...operations].sort()),
181
+ })));
182
+ }
183
+ /**
184
+ * @param {GraphKind} kind
185
+ * @param {string | undefined} id
186
+ * @param {GraphCliOptions} [options]
187
+ * @returns {Promise<Readonly<{command: "affected", ok: true, kind: GraphKind, id: string, affected: AffectedGraphSurface}>>}
188
+ */
189
+ export async function affectedApplication(kind, id, options = {}) {
190
+ assertKind(kind);
191
+ const { graph } = await loadApplication(options);
192
+ const root = findNode(graph, kind, id);
193
+ const rootId = kind === "app" ? root.appId : root.id;
194
+ const affected = projectAffected(graph, kind, rootId);
195
+ return Object.freeze({ command: "affected", ok: true, kind, id: rootId, affected });
196
+ }
197
+ /**
198
+ * @param {() => Promise<unknown>} command
199
+ * @param {{format?: GraphOutputFormat}} [options]
200
+ * @param {GraphIo} [io]
201
+ * @returns {Promise<GraphCliExitCode>}
202
+ */
203
+ export async function runGraphCommand(command, options = {}, io = defaultIo()) {
204
+ const format = options.format ?? "human";
205
+ try {
206
+ assertFormat(format);
207
+ const result = await command();
208
+ io.stdout(`${renderSuccess(result, format)}\n`);
209
+ return GRAPH_CLI_EXIT.success;
210
+ }
211
+ catch (cause) {
212
+ const error = normalizeGraphError(cause);
213
+ io.stderr(`${renderFailure(error, format)}\n`);
214
+ return error.exitCode;
215
+ }
216
+ }
217
+ async function writeGraph(graph, target) {
218
+ const directory = dirname(target);
219
+ const temporary = `${target}.${process.pid}.tmp`;
220
+ await mkdir(directory, { recursive: true });
221
+ try {
222
+ await writeFile(temporary, `${JSON.stringify(graph, null, 2)}\n`, { flag: "wx" });
223
+ await rename(temporary, target);
224
+ }
225
+ finally {
226
+ await rm(temporary, { force: true });
227
+ }
228
+ }
229
+ function assertCompiledApplication(value, path) {
230
+ if (!isObject(value) ||
231
+ value.kind !== "ship.application" ||
232
+ typeof value.id !== "string" ||
233
+ !isApplicationGraph(value.graph) ||
234
+ value.id !== value.graph.appId) {
235
+ throw cliError("SHIP_CLI_APP_EXPORT_INVALID", `named \`app\` export from ${JSON.stringify(path)} is not a compiled Ship application`, "Export the value returned by defineApp(...) or compileApp(...).", { path });
236
+ }
237
+ }
238
+ function isApplicationGraph(value) {
239
+ return (isObject(value) &&
240
+ value.schemaVersion === 1 &&
241
+ typeof value.appId === "string" &&
242
+ Array.isArray(value.modules) &&
243
+ Array.isArray(value.operations) &&
244
+ Array.isArray(value.providers) &&
245
+ Array.isArray(value.channels));
246
+ }
247
+ function assertFormat(format) {
248
+ if (!GRAPH_FORMATS.has(format)) {
249
+ throw cliError("SHIP_CLI_FORMAT_INVALID", `unsupported output format ${JSON.stringify(format)}`, "Use --format human or --format json.", { path: "format" });
250
+ }
251
+ }
252
+ function assertKind(kind) {
253
+ if (!GRAPH_KINDS.has(kind)) {
254
+ throw cliError("SHIP_CLI_GRAPH_KIND_INVALID", `unsupported graph kind ${JSON.stringify(kind)}`, "Use app, module, operation, provider, channel, or job.", { path: "kind" });
255
+ }
256
+ }
257
+ function findNode(graph, kind, id) {
258
+ if (kind === "app") {
259
+ if (id && id !== graph.appId)
260
+ throw nodeNotFound(kind, id);
261
+ return graph;
262
+ }
263
+ if (!id) {
264
+ throw cliError("SHIP_CLI_GRAPH_ID_REQUIRED", `${kind} inspection requires an id`, `Pass ship-api inspect ${kind} <id>.`, { path: "id" });
265
+ }
266
+ const collection = graph[`${kind}s`];
267
+ const node = collection.find((candidate) => candidate.id === id);
268
+ if (!node)
269
+ throw nodeNotFound(kind, id);
270
+ return node;
271
+ }
272
+ function nodeNotFound(kind, id) {
273
+ return cliError("SHIP_CLI_GRAPH_NODE_NOT_FOUND", `${kind} ${JSON.stringify(id)} is not present in the application graph`, "Run ship-api check --format json and use an id from the current graph.", { [`${kind}Id`]: id });
274
+ }
275
+ function projectAffected(graph, kind, id) {
276
+ if (kind === "app")
277
+ return allGraphIds(graph);
278
+ if (kind === "operation" || kind === "job") {
279
+ // Jobs are operations: the same bounded surface applies.
280
+ const operation = findNode(graph, kind, id);
281
+ return affectedByOperation(graph, operation);
282
+ }
283
+ if (kind === "module")
284
+ return affectedByModule(graph, id);
285
+ if (kind === "channel") {
286
+ const channel = findNode(graph, kind, id);
287
+ return freezeAffected([channel.moduleId], channel.publishers, []);
288
+ }
289
+ return affectedByProvider(graph, id);
290
+ }
291
+ /**
292
+ * An operation affects itself, and a write affects every cached read it
293
+ * invalidates: the declared tags are real graph edges, so a change to an
294
+ * invalidating write reaches the reads whose entries it purges.
295
+ */
296
+ function affectedByOperation(graph, operation) {
297
+ const tags = new Set(operation.invalidates ?? []);
298
+ const operations = [operation];
299
+ if (tags.size > 0) {
300
+ for (const candidate of graph.operations) {
301
+ if (candidate.id === operation.id)
302
+ continue;
303
+ if ((candidate.cache?.tags ?? []).some((tag) => tags.has(tag)))
304
+ operations.push(candidate);
305
+ }
306
+ }
307
+ return freezeAffected([...new Set(operations.map((item) => item.moduleId))], operations.map((item) => item.id), []);
308
+ }
309
+ function affectedByModule(graph, id) {
310
+ const modules = new Set([id]);
311
+ let changed = true;
312
+ while (changed) {
313
+ changed = false;
314
+ for (const module of graph.modules) {
315
+ if (!modules.has(module.id) && module.imports.some((item) => modules.has(item))) {
316
+ modules.add(module.id);
317
+ changed = true;
318
+ }
319
+ }
320
+ }
321
+ return freezeAffected([...modules], graph.operations.filter((item) => modules.has(item.moduleId)).map((item) => item.id), graph.providers.filter((item) => modules.has(item.moduleId)).map((item) => item.id));
322
+ }
323
+ function affectedByProvider(graph, id) {
324
+ const providers = new Set([id]);
325
+ let changed = true;
326
+ while (changed) {
327
+ changed = false;
328
+ for (const provider of graph.providers) {
329
+ if (!providers.has(provider.id) &&
330
+ provider.dependencies.some((item) => providers.has(item.providerId))) {
331
+ providers.add(provider.id);
332
+ changed = true;
333
+ }
334
+ }
335
+ }
336
+ const operations = graph.operations
337
+ .filter((item) => item.dependencies.some((dependency) => providers.has(dependency.providerId)))
338
+ .map((item) => item.id);
339
+ const operationIds = new Set(operations);
340
+ const modules = graph.modules
341
+ .filter((module) => module.providers.some((providerId) => providers.has(providerId)) ||
342
+ module.operations.some((operationId) => operationIds.has(operationId)))
343
+ .map((module) => module.id);
344
+ return freezeAffected(modules, operations, [...providers]);
345
+ }
346
+ function allGraphIds(graph) {
347
+ return freezeAffected(graph.modules.map((item) => item.id), graph.operations.map((item) => item.id), graph.providers.map((item) => item.id));
348
+ }
349
+ function freezeAffected(modules, operations, providers) {
350
+ return Object.freeze({
351
+ modules: Object.freeze([...modules].sort()),
352
+ operations: Object.freeze([...operations].sort()),
353
+ providers: Object.freeze([...providers].sort()),
354
+ });
355
+ }
356
+ function renderSuccess(result, format) {
357
+ if (format === "json")
358
+ return JSON.stringify(result, null, 2);
359
+ if (result.command === "contract") {
360
+ return [
361
+ `OK ${result.appId} ${result.fingerprint}`,
362
+ `${result.operations} operations`,
363
+ `contract: ${result.contract}`,
364
+ `openapi: ${result.openapi}`,
365
+ ].join("\n");
366
+ }
367
+ if (result.command === "migrate-routes") {
368
+ return [
369
+ `OK ${result.appId} ${result.catalogRevision}`,
370
+ `${result.routes} legacy routes · ${result.mapped} mapped · ${result.removed} removed`,
371
+ `catalog: ${result.catalog}`,
372
+ `mapping: ${result.mapping}`,
373
+ ].join("\n");
374
+ }
375
+ if (result.command === "check") {
376
+ const graph = result.graph;
377
+ const jobs = graph.jobs ?? [];
378
+ // Warnings are retained on the compiled application and mirrored onto the
379
+ // graph; render one list whichever the caller supplied.
380
+ const warnings = result.warnings ?? graph.diagnostics ?? [];
381
+ return [
382
+ `OK ${graph.appId}`,
383
+ `${graph.modules.length} modules · ${graph.operations.length} operations · ${graph.providers.length} providers · ${graph.channels.length} channels · ${jobs.length} jobs`,
384
+ ...(warnings.length ? [`warnings: ${warnings.length}`] : []),
385
+ ...(result.emitted ? [`graph: ${result.emitted}`] : []),
386
+ ...warnings.map((item) => {
387
+ const subject = item.operationId ?? item.providerId ?? item.moduleId ?? item.path;
388
+ return `WARN ${item.code}${subject ? ` [${subject}]` : ""}: ${item.message}\n ${item.hint}`;
389
+ }),
390
+ ].join("\n");
391
+ }
392
+ if (result.command === "affected") {
393
+ return [
394
+ `${result.kind} ${result.id}`,
395
+ `modules: ${displayIds(result.affected.modules)}`,
396
+ `operations: ${displayIds(result.affected.operations)}`,
397
+ `providers: ${displayIds(result.affected.providers)}`,
398
+ ].join("\n");
399
+ }
400
+ return renderInspectedNode(result.kind, result.node, result.permissions);
401
+ }
402
+ function renderPermissions(permissions = []) {
403
+ const declared = permissions.filter((item) => !item.framework);
404
+ const framework = permissions.filter((item) => item.framework);
405
+ return [
406
+ `permissions: ${displayIds(declared.map((item) => item.permission))}`,
407
+ `framework permissions: ${framework.length > 0
408
+ ? framework.map((item) => `${item.permission} (${item.operations.join(", ")})`).join(", ")
409
+ : "(none)"}`,
410
+ ];
411
+ }
412
+ function renderInspectedNode(kind, node, permissions) {
413
+ if (kind === "app") {
414
+ return [
415
+ `app ${node.appId}`,
416
+ `${node.modules.length} modules · ${node.operations.length} operations · ${node.providers.length} providers`,
417
+ ...renderPermissions(permissions),
418
+ ].join("\n");
419
+ }
420
+ if (kind === "module") {
421
+ return [
422
+ `module ${node.id}`,
423
+ `imports: ${displayIds(node.imports)}`,
424
+ `operations: ${displayIds(node.operations)}`,
425
+ `providers: ${displayIds(node.providers)}`,
426
+ `exports: ${displayIds(node.exports)}`,
427
+ ...renderPermissions(permissions),
428
+ ].join("\n");
429
+ }
430
+ if (kind === "provider") {
431
+ return [
432
+ `provider ${node.id}`,
433
+ `module: ${node.moduleId}`,
434
+ `lifetime: ${node.lifetime}`,
435
+ `dependencies: ${displayIds(node.dependencies.map((item) => item.providerId))}`,
436
+ ].join("\n");
437
+ }
438
+ if (kind === "job") {
439
+ const trigger = node.trigger.kind === "schedule"
440
+ ? `schedule ${node.trigger.cron} (${node.trigger.tz})`
441
+ : node.trigger.kind === "interval"
442
+ ? `interval ${node.trigger.everyMs}ms`
443
+ : node.trigger.kind === "http"
444
+ ? `http (${renderAccess(node.trigger.access)})`
445
+ : "enqueue";
446
+ const concurrency = `${node.concurrency.mode} max=${node.concurrency.max} ${node.concurrency.keyed
447
+ ? "keyed"
448
+ : `unkeyed${node.concurrency.reason ? ` (${node.concurrency.reason})` : ""}`}`;
449
+ return [
450
+ `job ${node.id}`,
451
+ `module: ${node.moduleId}`,
452
+ `trigger: ${trigger}`,
453
+ `concurrency: ${concurrency}`,
454
+ `retry: ${node.retry.attempts} attempts, backoff ${node.retry.backoff.initialMs}ms`,
455
+ `transaction: ${node.transaction}`,
456
+ `effects: ${displayIds(node.effects)}`,
457
+ `enqueues: ${displayIds(node.enqueues)}`,
458
+ `triggers: ${displayIds(node.operations.triggers)}`,
459
+ ...(node.retention
460
+ ? [
461
+ `retention: completed ${node.retention.completedMs}ms, dead-lettered ${node.retention.deadLetteredMs}ms`,
462
+ ]
463
+ : []),
464
+ ].join("\n");
465
+ }
466
+ return [
467
+ `operation ${node.id}`,
468
+ `module: ${node.moduleId}`,
469
+ `access: ${renderAccess(node.access)}`,
470
+ `transaction: ${node.transaction}`,
471
+ `transport: ${node.transport?.binding ?? node.transport?.kind ?? "none"}`,
472
+ `dependencies: ${displayIds(node.dependencies.map((item) => item.providerId))}`,
473
+ `errors: ${displayIds(node.errors.map((item) => item.code))}`,
474
+ `cache: ${node.cache
475
+ ? `${node.cache.scope} ttl=${node.cache.ttlMs}ms tags=${displayIds(node.cache.tags)}`
476
+ : "none"}`,
477
+ `invalidates: ${displayIds((node.invalidates ?? []).map((tag) => {
478
+ const scoped = (node.invalidatesScoped ?? []).find((item) => item.tag === tag);
479
+ return scoped ? `${tag} (${scoped.scope})` : tag;
480
+ }))}`,
481
+ ...(node.job
482
+ ? [
483
+ `job: ${node.job.map((item) => `${item.role}${item.jobId ? ` ${item.jobId}` : ""}${item.action ? ` ${item.action}` : ""}`).join(", ")}`,
484
+ ]
485
+ : []),
486
+ ].join("\n");
487
+ }
488
+ function renderAccess(access) {
489
+ return access.kind === "permissions"
490
+ ? `${access.mode}(${access.permissions.join(", ")})`
491
+ : access.kind === "provider"
492
+ ? `provider(${access.provider})`
493
+ : access.kind;
494
+ }
495
+ function renderFailure(error, format) {
496
+ const payload = { command: "graph", ok: false, diagnostics: error.diagnostics };
497
+ if (format === "json")
498
+ return JSON.stringify(payload, null, 2);
499
+ return error.diagnostics
500
+ .map((item) => {
501
+ const subject = item.operationId ?? item.providerId ?? item.moduleId ?? item.path;
502
+ return [
503
+ `${item.code}${subject ? ` [${subject}]` : ""}: ${item.message}`,
504
+ ` ${item.hint}`,
505
+ ].join("\n");
506
+ })
507
+ .join("\n");
508
+ }
509
+ function displayIds(ids) {
510
+ return ids.length > 0 ? ids.join(", ") : "(none)";
511
+ }
512
+ /**
513
+ * Declaration-time errors (`InvalidJobDefinitionError`, `InvalidOperationDefinitionError`, ...)
514
+ * throw while the app module loads; they carry a stable `SHIP_*` code and become
515
+ * application diagnostics instead of opaque load failures.
516
+ */
517
+ function definitionDiagnostic(cause) {
518
+ if (!isObject(cause) ||
519
+ typeof cause.code !== "string" ||
520
+ !DEFINITION_ERROR_PATTERN.test(cause.code) ||
521
+ cause.code.startsWith("SHIP_CLI_") ||
522
+ typeof cause.message !== "string") {
523
+ return undefined;
524
+ }
525
+ const subject = ["jobId", "operationId", "outboxId", "moduleId", "providerId"].find((field) => typeof cause[field] === "string");
526
+ return {
527
+ code: cause.code,
528
+ severity: "error",
529
+ message: cause.message,
530
+ hint: "Fix the declaration named in the diagnostic; declaration errors are raised before the graph compiles.",
531
+ ...(subject === "jobId" || subject === "operationId" ? { operationId: cause[subject] } : {}),
532
+ ...(subject === "moduleId" ? { moduleId: cause.moduleId } : {}),
533
+ ...(subject === "providerId" || subject === "outboxId" ? { providerId: cause[subject] } : {}),
534
+ ...(typeof cause.field === "string" ? { path: cause.field } : {}),
535
+ };
536
+ }
537
+ function normalizeGraphError(cause) {
538
+ if (cause instanceof GraphCliError)
539
+ return cause;
540
+ if (hasApplicationDiagnostics(cause)) {
541
+ return new GraphCliError(cause.diagnostics, GRAPH_CLI_EXIT.applicationInvalid, { cause });
542
+ }
543
+ if (isObject(cause) &&
544
+ typeof cause.code === "string" &&
545
+ cause.code.startsWith("SHIP_CONTRACT_") &&
546
+ typeof cause.message === "string") {
547
+ return new GraphCliError([
548
+ {
549
+ code: cause.code,
550
+ severity: "error",
551
+ message: cause.message,
552
+ hint: "Fix the operation schema or explicit contract metadata, then regenerate.",
553
+ ...(typeof cause.operationId === "string" ? { operationId: cause.operationId } : {}),
554
+ ...(typeof cause.path === "string" ? { path: cause.path } : {}),
555
+ },
556
+ ], GRAPH_CLI_EXIT.applicationInvalid, { cause });
557
+ }
558
+ const definitionError = definitionDiagnostic(cause);
559
+ if (definitionError) {
560
+ return new GraphCliError([definitionError], GRAPH_CLI_EXIT.applicationInvalid, { cause });
561
+ }
562
+ return cliError("SHIP_CLI_UNEXPECTED", `graph command failed unexpectedly: ${safeErrorMessage(cause)}`, "Re-run with the JSON format and report this diagnostic with the failing application module.", {}, { cause });
563
+ }
564
+ function cliError(code, message, hint, context = {}, options) {
565
+ return new GraphCliError([{ code, severity: "error", message, hint, ...context }], GRAPH_CLI_EXIT.usageOrLoadError, options);
566
+ }
567
+ function hasApplicationDiagnostics(value) {
568
+ return (isObject(value) &&
569
+ Array.isArray(value.diagnostics) &&
570
+ value.diagnostics.every((item) => isObject(item) &&
571
+ typeof item.code === "string" &&
572
+ typeof item.message === "string" &&
573
+ typeof item.hint === "string"));
574
+ }
575
+ function safeErrorMessage(value) {
576
+ return value instanceof Error ? value.message : String(value);
577
+ }
578
+ function isObject(value) {
579
+ return typeof value === "object" && value !== null;
580
+ }
581
+ function defaultIo() {
582
+ return {
583
+ stdout: (value) => process.stdout.write(value),
584
+ stderr: (value) => process.stderr.write(value),
585
+ };
586
+ }
587
+ export const __test = Object.freeze({
588
+ affectedByModule,
589
+ affectedByOperation,
590
+ affectedByProvider,
591
+ normalizeGraphError,
592
+ projectPermissions,
593
+ renderFailure,
594
+ renderSuccess,
595
+ });
596
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.js"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export { generateContractArtifacts } from "./contract.js";
2
+ export { renderOperationFormBinding } from "./forms.js";
3
+ export { createOperationProject, loadScaffoldReleaseManifest, ScaffoldError } from "./create.js";
4
+ export { affectedApplication, checkApplication, GRAPH_CLI_EXIT, GraphCliError, inspectApplication, loadApplication, runGraphCommand } from "./graph.js";
5
+ export { checkRouteMigration, validateRouteMigration } from "./migration.js";
6
+ export { createCli, registerApplicationCommands, runCli } from "./ship-api.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":""}
package/lib/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { generateContractArtifacts } from "./contract.js";
2
+ export { createOperationProject, loadScaffoldReleaseManifest, ScaffoldError, } from "./create.js";
3
+ export { renderOperationFormBinding } from "./forms.js";
4
+ export { affectedApplication, checkApplication, GRAPH_CLI_EXIT, GraphCliError, inspectApplication, loadApplication, runGraphCommand, } from "./graph.js";
5
+ export { checkRouteMigration, validateRouteMigration } from "./migration.js";
6
+ export { createCli, registerApplicationCommands, runCli } from "./ship-api.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}