@mantajs/cli 0.2.0-beta.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.
- package/bin/manta.mjs +20 -0
- package/bin/manta.ts +13 -0
- package/dist/admin/generate-admin-config.d.ts +8 -0
- package/dist/admin/generate-admin-config.d.ts.map +1 -0
- package/dist/admin/generate-admin-config.js +127 -0
- package/dist/admin/generate-admin-config.js.map +1 -0
- package/dist/ai/chat-handler.d.ts +10 -0
- package/dist/ai/chat-handler.d.ts.map +1 -0
- package/dist/ai/chat-handler.js +1353 -0
- package/dist/ai/chat-handler.js.map +1 -0
- package/dist/bootstrap/boot.d.ts +25 -0
- package/dist/bootstrap/boot.d.ts.map +1 -0
- package/dist/bootstrap/boot.js +344 -0
- package/dist/bootstrap/boot.js.map +1 -0
- package/dist/bootstrap/bootstrap-app.d.ts +71 -0
- package/dist/bootstrap/bootstrap-app.d.ts.map +1 -0
- package/dist/bootstrap/bootstrap-app.js +308 -0
- package/dist/bootstrap/bootstrap-app.js.map +1 -0
- package/dist/bootstrap/bootstrap-context.d.ts +76 -0
- package/dist/bootstrap/bootstrap-context.d.ts.map +1 -0
- package/dist/bootstrap/bootstrap-context.js +4 -0
- package/dist/bootstrap/bootstrap-context.js.map +1 -0
- package/dist/bootstrap/bootstrap-helpers.d.ts +71 -0
- package/dist/bootstrap/bootstrap-helpers.d.ts.map +1 -0
- package/dist/bootstrap/bootstrap-helpers.js +373 -0
- package/dist/bootstrap/bootstrap-helpers.js.map +1 -0
- package/dist/bootstrap/generate-types.d.ts +7 -0
- package/dist/bootstrap/generate-types.d.ts.map +1 -0
- package/dist/bootstrap/generate-types.js +832 -0
- package/dist/bootstrap/generate-types.js.map +1 -0
- package/dist/bootstrap/phases/assemble/index.d.ts +5 -0
- package/dist/bootstrap/phases/assemble/index.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble/index.js +5 -0
- package/dist/bootstrap/phases/assemble/index.js.map +1 -0
- package/dist/bootstrap/phases/assemble/load-links.d.ts +3 -0
- package/dist/bootstrap/phases/assemble/load-links.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble/load-links.js +160 -0
- package/dist/bootstrap/phases/assemble/load-links.js.map +1 -0
- package/dist/bootstrap/phases/assemble/load-modules.d.ts +3 -0
- package/dist/bootstrap/phases/assemble/load-modules.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble/load-modules.js +163 -0
- package/dist/bootstrap/phases/assemble/load-modules.js.map +1 -0
- package/dist/bootstrap/phases/assemble/load-resources.d.ts +3 -0
- package/dist/bootstrap/phases/assemble/load-resources.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble/load-resources.js +270 -0
- package/dist/bootstrap/phases/assemble/load-resources.js.map +1 -0
- package/dist/bootstrap/phases/assemble/wire-commands.d.ts +3 -0
- package/dist/bootstrap/phases/assemble/wire-commands.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble/wire-commands.js +408 -0
- package/dist/bootstrap/phases/assemble/wire-commands.js.map +1 -0
- package/dist/bootstrap/phases/assemble-modules.d.ts +3 -0
- package/dist/bootstrap/phases/assemble-modules.d.ts.map +1 -0
- package/dist/bootstrap/phases/assemble-modules.js +14 -0
- package/dist/bootstrap/phases/assemble-modules.js.map +1 -0
- package/dist/bootstrap/phases/build-app.d.ts +3 -0
- package/dist/bootstrap/phases/build-app.d.ts.map +1 -0
- package/dist/bootstrap/phases/build-app.js +15 -0
- package/dist/bootstrap/phases/build-app.js.map +1 -0
- package/dist/bootstrap/phases/discover-resources.d.ts +3 -0
- package/dist/bootstrap/phases/discover-resources.d.ts.map +1 -0
- package/dist/bootstrap/phases/discover-resources.js +60 -0
- package/dist/bootstrap/phases/discover-resources.js.map +1 -0
- package/dist/bootstrap/phases/index.d.ts +7 -0
- package/dist/bootstrap/phases/index.d.ts.map +1 -0
- package/dist/bootstrap/phases/index.js +7 -0
- package/dist/bootstrap/phases/index.js.map +1 -0
- package/dist/bootstrap/phases/init-infra.d.ts +3 -0
- package/dist/bootstrap/phases/init-infra.d.ts.map +1 -0
- package/dist/bootstrap/phases/init-infra.js +193 -0
- package/dist/bootstrap/phases/init-infra.js.map +1 -0
- package/dist/bootstrap/phases/seed-dev-users.d.ts +3 -0
- package/dist/bootstrap/phases/seed-dev-users.d.ts.map +1 -0
- package/dist/bootstrap/phases/seed-dev-users.js +93 -0
- package/dist/bootstrap/phases/seed-dev-users.js.map +1 -0
- package/dist/bootstrap/phases/wire/auth-helpers.d.ts +12 -0
- package/dist/bootstrap/phases/wire/auth-helpers.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/auth-helpers.js +25 -0
- package/dist/bootstrap/phases/wire/auth-helpers.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/context-registry.d.ts +4 -0
- package/dist/bootstrap/phases/wire/contexts/context-registry.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/context-registry.js +96 -0
- package/dist/bootstrap/phases/wire/contexts/context-registry.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/cqrs-routes.d.ts +3 -0
- package/dist/bootstrap/phases/wire/contexts/cqrs-routes.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/cqrs-routes.js +138 -0
- package/dist/bootstrap/phases/wire/contexts/cqrs-routes.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/index.d.ts +6 -0
- package/dist/bootstrap/phases/wire/contexts/index.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/index.js +6 -0
- package/dist/bootstrap/phases/wire/contexts/index.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/query-endpoints.d.ts +3 -0
- package/dist/bootstrap/phases/wire/contexts/query-endpoints.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/query-endpoints.js +116 -0
- package/dist/bootstrap/phases/wire/contexts/query-endpoints.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/spa-warnings.d.ts +3 -0
- package/dist/bootstrap/phases/wire/contexts/spa-warnings.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/spa-warnings.js +17 -0
- package/dist/bootstrap/phases/wire/contexts/spa-warnings.js.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/user-routes.d.ts +3 -0
- package/dist/bootstrap/phases/wire/contexts/user-routes.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/contexts/user-routes.js +83 -0
- package/dist/bootstrap/phases/wire/contexts/user-routes.js.map +1 -0
- package/dist/bootstrap/phases/wire/index.d.ts +5 -0
- package/dist/bootstrap/phases/wire/index.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/index.js +5 -0
- package/dist/bootstrap/phases/wire/index.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-adapter.d.ts +12 -0
- package/dist/bootstrap/phases/wire/wire-adapter.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-adapter.js +156 -0
- package/dist/bootstrap/phases/wire/wire-adapter.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-auth.d.ts +3 -0
- package/dist/bootstrap/phases/wire/wire-auth.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-auth.js +46 -0
- package/dist/bootstrap/phases/wire/wire-auth.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-contexts.d.ts +3 -0
- package/dist/bootstrap/phases/wire/wire-contexts.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-contexts.js +15 -0
- package/dist/bootstrap/phases/wire/wire-contexts.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-cron-routes.d.ts +3 -0
- package/dist/bootstrap/phases/wire/wire-cron-routes.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-cron-routes.js +102 -0
- package/dist/bootstrap/phases/wire/wire-cron-routes.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-extras.d.ts +3 -0
- package/dist/bootstrap/phases/wire/wire-extras.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-extras.js +305 -0
- package/dist/bootstrap/phases/wire/wire-extras.js.map +1 -0
- package/dist/bootstrap/phases/wire/wire-workflow-routes.d.ts +3 -0
- package/dist/bootstrap/phases/wire/wire-workflow-routes.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire/wire-workflow-routes.js +212 -0
- package/dist/bootstrap/phases/wire/wire-workflow-routes.js.map +1 -0
- package/dist/bootstrap/phases/wire-http.d.ts +3 -0
- package/dist/bootstrap/phases/wire-http.d.ts.map +1 -0
- package/dist/bootstrap/phases/wire-http.js +10 -0
- package/dist/bootstrap/phases/wire-http.js.map +1 -0
- package/dist/bootstrap/validate-generated-ts.d.ts +6 -0
- package/dist/bootstrap/validate-generated-ts.d.ts.map +1 -0
- package/dist/bootstrap/validate-generated-ts.js +26 -0
- package/dist/bootstrap/validate-generated-ts.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +10 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +138 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +421 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.d.ts +21 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +399 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/db/create.d.ts +17 -0
- package/dist/commands/db/create.d.ts.map +1 -0
- package/dist/commands/db/create.js +94 -0
- package/dist/commands/db/create.js.map +1 -0
- package/dist/commands/db/diff.d.ts +39 -0
- package/dist/commands/db/diff.d.ts.map +1 -0
- package/dist/commands/db/diff.js +81 -0
- package/dist/commands/db/diff.js.map +1 -0
- package/dist/commands/db/generate.d.ts +58 -0
- package/dist/commands/db/generate.d.ts.map +1 -0
- package/dist/commands/db/generate.js +138 -0
- package/dist/commands/db/generate.js.map +1 -0
- package/dist/commands/db/migrate.d.ts +29 -0
- package/dist/commands/db/migrate.d.ts.map +1 -0
- package/dist/commands/db/migrate.js +118 -0
- package/dist/commands/db/migrate.js.map +1 -0
- package/dist/commands/db/pg-deps.d.ts +30 -0
- package/dist/commands/db/pg-deps.d.ts.map +1 -0
- package/dist/commands/db/pg-deps.js +178 -0
- package/dist/commands/db/pg-deps.js.map +1 -0
- package/dist/commands/db/rollback.d.ts +21 -0
- package/dist/commands/db/rollback.d.ts.map +1 -0
- package/dist/commands/db/rollback.js +85 -0
- package/dist/commands/db/rollback.js.map +1 -0
- package/dist/commands/db/types.d.ts +113 -0
- package/dist/commands/db/types.d.ts.map +1 -0
- package/dist/commands/db/types.js +4 -0
- package/dist/commands/db/types.js.map +1 -0
- package/dist/commands/dev.d.ts +12 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +79 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/exec.d.ts +21 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +148 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/generate.d.ts +11 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +19 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +476 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/start.d.ts +15 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +121 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/user.d.ts +19 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +125 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/config/load-config.d.ts +23 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +105 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/load-env.d.ts +11 -0
- package/dist/config/load-env.d.ts.map +1 -0
- package/dist/config/load-env.js +61 -0
- package/dist/config/load-env.js.map +1 -0
- package/dist/config/resolve-adapters.d.ts +23 -0
- package/dist/config/resolve-adapters.d.ts.map +1 -0
- package/dist/config/resolve-adapters.js +96 -0
- package/dist/config/resolve-adapters.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/jiti.d.ts +2 -0
- package/dist/jiti.d.ts.map +1 -0
- package/dist/jiti.js +2 -0
- package/dist/jiti.js.map +1 -0
- package/dist/openapi/generate-spec.d.ts +56 -0
- package/dist/openapi/generate-spec.d.ts.map +1 -0
- package/dist/openapi/generate-spec.js +491 -0
- package/dist/openapi/generate-spec.js.map +1 -0
- package/dist/openapi/index.d.ts +4 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +3 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/swagger-html.d.ts +2 -0
- package/dist/openapi/swagger-html.d.ts.map +1 -0
- package/dist/openapi/swagger-html.js +29 -0
- package/dist/openapi/swagger-html.js.map +1 -0
- package/dist/plugins/merge-resources.d.ts +18 -0
- package/dist/plugins/merge-resources.d.ts.map +1 -0
- package/dist/plugins/merge-resources.js +76 -0
- package/dist/plugins/merge-resources.js.map +1 -0
- package/dist/plugins/resolve-plugins.d.ts +14 -0
- package/dist/plugins/resolve-plugins.d.ts.map +1 -0
- package/dist/plugins/resolve-plugins.js +73 -0
- package/dist/plugins/resolve-plugins.js.map +1 -0
- package/dist/resource-loader.d.ts +151 -0
- package/dist/resource-loader.d.ts.map +1 -0
- package/dist/resource-loader.js +456 -0
- package/dist/resource-loader.js.map +1 -0
- package/dist/route-discovery.d.ts +33 -0
- package/dist/route-discovery.d.ts.map +1 -0
- package/dist/route-discovery.js +69 -0
- package/dist/route-discovery.js.map +1 -0
- package/dist/server-bootstrap.d.ts +38 -0
- package/dist/server-bootstrap.d.ts.map +1 -0
- package/dist/server-bootstrap.js +21 -0
- package/dist/server-bootstrap.js.map +1 -0
- package/dist/spa/generate-spa.d.ts +15 -0
- package/dist/spa/generate-spa.d.ts.map +1 -0
- package/dist/spa/generate-spa.js +357 -0
- package/dist/spa/generate-spa.js.map +1 -0
- package/dist/templates/agent/nextjs.md +129 -0
- package/dist/templates/agent/nuxt.md +98 -0
- package/dist/templates/agent/standalone.md +498 -0
- package/dist/types.d.ts +145 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/colors.d.ts +7 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +8 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +27 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prompts.d.ts +6 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +28 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/spinner.d.ts +7 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +20 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// Framework-owned workflow introspection endpoints — WORKFLOW_PROGRESS.md §6.5.
|
|
2
|
+
//
|
|
3
|
+
// Mounted under the admin context basePath (/api/admin) so they inherit the
|
|
4
|
+
// same JWT/admin auth rule registered by user-routes.ts. Both endpoints are
|
|
5
|
+
// framework-owned and not context-scoped — they never dispatch into a
|
|
6
|
+
// user-defined command or query.
|
|
7
|
+
//
|
|
8
|
+
// GET /api/admin/_workflow/:id → merge durable (store) + live (progress
|
|
9
|
+
// channel) and return a single snapshot.
|
|
10
|
+
// DELETE /api/admin/_workflow/:id → request cancel (idempotent); publish
|
|
11
|
+
// `workflow:cancel` on the event bus when
|
|
12
|
+
// one is wired, so running WorkflowManager
|
|
13
|
+
// subscriptions abort immediately.
|
|
14
|
+
import { WorkflowManager } from '@mantajs/core';
|
|
15
|
+
export async function wireWorkflowRoutes(ctx, appRef) {
|
|
16
|
+
const { logger, adapter, infraMap, cmdRegistry } = ctx;
|
|
17
|
+
function parseRunId(req) {
|
|
18
|
+
const url = new URL(req.url, 'http://localhost');
|
|
19
|
+
const segments = url.pathname.split('/').filter(Boolean);
|
|
20
|
+
const idx = segments.indexOf('_workflow');
|
|
21
|
+
if (idx < 0 || idx + 1 >= segments.length)
|
|
22
|
+
return null;
|
|
23
|
+
const id = segments[idx + 1];
|
|
24
|
+
return id && id.length > 0 ? id : null;
|
|
25
|
+
}
|
|
26
|
+
function resolveStore() {
|
|
27
|
+
try {
|
|
28
|
+
return appRef.current.resolve('IWorkflowStorePort');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function resolveProgressChannel() {
|
|
35
|
+
try {
|
|
36
|
+
return appRef.current.resolve('IProgressChannelPort');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function resolveEventBus() {
|
|
43
|
+
try {
|
|
44
|
+
return appRef.current.resolve('IEventBusPort');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function toIso(value) {
|
|
51
|
+
if (value === undefined || value === null)
|
|
52
|
+
return undefined;
|
|
53
|
+
if (value instanceof Date)
|
|
54
|
+
return value.toISOString();
|
|
55
|
+
if (typeof value === 'string')
|
|
56
|
+
return value;
|
|
57
|
+
const maybe = value;
|
|
58
|
+
if (typeof maybe.toISOString === 'function')
|
|
59
|
+
return maybe.toISOString();
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
adapter.registerRoute('GET', '/api/admin/_workflow/:id', async (req) => {
|
|
63
|
+
try {
|
|
64
|
+
const runId = parseRunId(req);
|
|
65
|
+
if (!runId) {
|
|
66
|
+
return Response.json({ type: 'INVALID_DATA', message: 'runId is required in URL' }, { status: 400 });
|
|
67
|
+
}
|
|
68
|
+
const store = resolveStore();
|
|
69
|
+
if (!store) {
|
|
70
|
+
return Response.json({ type: 'NOT_IMPLEMENTED', message: 'IWorkflowStorePort is not configured' }, { status: 501 });
|
|
71
|
+
}
|
|
72
|
+
const progressChannel = resolveProgressChannel();
|
|
73
|
+
const [run, live] = await Promise.all([
|
|
74
|
+
store.get(runId),
|
|
75
|
+
progressChannel ? progressChannel.get(runId).catch(() => null) : Promise.resolve(null),
|
|
76
|
+
]);
|
|
77
|
+
if (!run) {
|
|
78
|
+
return Response.json({ type: 'NOT_FOUND', message: `workflow run "${runId}" not found` }, { status: 404 });
|
|
79
|
+
}
|
|
80
|
+
return Response.json({
|
|
81
|
+
data: {
|
|
82
|
+
id: run.id,
|
|
83
|
+
command_name: run.command_name,
|
|
84
|
+
status: run.status,
|
|
85
|
+
steps: run.steps,
|
|
86
|
+
inFlightProgress: live ?? undefined,
|
|
87
|
+
output: run.output,
|
|
88
|
+
error: run.error,
|
|
89
|
+
started_at: toIso(run.started_at),
|
|
90
|
+
completed_at: toIso(run.completed_at),
|
|
91
|
+
cancel_requested_at: toIso(run.cancel_requested_at),
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
return Response.json({ type: 'UNEXPECTED_STATE', message: err.message }, { status: 500 });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
adapter.registerRoute('DELETE', '/api/admin/_workflow/:id', async (req) => {
|
|
100
|
+
try {
|
|
101
|
+
const runId = parseRunId(req);
|
|
102
|
+
if (!runId) {
|
|
103
|
+
return Response.json({ type: 'INVALID_DATA', message: 'runId is required in URL' }, { status: 400 });
|
|
104
|
+
}
|
|
105
|
+
const store = resolveStore();
|
|
106
|
+
if (!store) {
|
|
107
|
+
return Response.json({ type: 'NOT_IMPLEMENTED', message: 'IWorkflowStorePort is not configured' }, { status: 501 });
|
|
108
|
+
}
|
|
109
|
+
const run = await store.get(runId);
|
|
110
|
+
if (!run) {
|
|
111
|
+
return Response.json({ type: 'NOT_FOUND', message: `workflow run "${runId}" not found` }, { status: 404 });
|
|
112
|
+
}
|
|
113
|
+
// requestCancel is idempotent — no-op on terminal runs, and a second
|
|
114
|
+
// call while cancel-requested is safe.
|
|
115
|
+
await store.requestCancel(runId);
|
|
116
|
+
// Publish the cancel event if an eventbus is wired. Running
|
|
117
|
+
// WorkflowManagers subscribed on run start will abort immediately
|
|
118
|
+
// (see manager.ts). Without an eventbus, the step-boundary fallback
|
|
119
|
+
// from PR-3 still catches the cancel on the next check.
|
|
120
|
+
const eventBus = resolveEventBus();
|
|
121
|
+
if (eventBus) {
|
|
122
|
+
await eventBus
|
|
123
|
+
.emit({
|
|
124
|
+
eventName: 'workflow:cancel',
|
|
125
|
+
data: { runId },
|
|
126
|
+
metadata: { timestamp: Date.now() },
|
|
127
|
+
})
|
|
128
|
+
.catch((err) => {
|
|
129
|
+
logger.warn(`[workflow-cancel] eventbus emit failed: ${err?.message ?? err}`);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return Response.json({ data: { status: 'cancel_requested', runId } });
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
return Response.json({ type: 'UNEXPECTED_STATE', message: err.message }, { status: 500 });
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// POST /api/admin/_workflow/:id/resume
|
|
139
|
+
// Called by the queue adapter (QStash / InMemoryQueueAdapter) to
|
|
140
|
+
// continue a paused workflow. Verifies the QStash signature when
|
|
141
|
+
// `QSTASH_CURRENT_SIGNING_KEY` is configured — otherwise accepts any
|
|
142
|
+
// caller (dev / localhost / in-memory queue).
|
|
143
|
+
adapter.registerRoute('POST', '/api/admin/_workflow/:id/resume', async (req) => {
|
|
144
|
+
try {
|
|
145
|
+
const runId = parseRunId(req);
|
|
146
|
+
if (!runId) {
|
|
147
|
+
return Response.json({ type: 'INVALID_DATA', message: 'runId is required in URL' }, { status: 400 });
|
|
148
|
+
}
|
|
149
|
+
const store = resolveStore();
|
|
150
|
+
if (!store) {
|
|
151
|
+
return Response.json({ type: 'NOT_IMPLEMENTED', message: 'IWorkflowStorePort is not configured' }, { status: 501 });
|
|
152
|
+
}
|
|
153
|
+
// Signature verification: QStash signs every delivery with HMAC-SHA256
|
|
154
|
+
// over the body. Read the raw body once, verify, then parse.
|
|
155
|
+
const body = await req.text();
|
|
156
|
+
const signingKey = process.env.QSTASH_CURRENT_SIGNING_KEY;
|
|
157
|
+
if (signingKey) {
|
|
158
|
+
// Lazy import so this runs only when the env var is set (avoids
|
|
159
|
+
// bundling the adapter in dev images that don't use it).
|
|
160
|
+
const { verifyQStashSignature } = await import('@mantajs/adapter-queue-qstash');
|
|
161
|
+
const signature = req.headers.get('Upstash-Signature');
|
|
162
|
+
const ok = verifyQStashSignature(body, signature, {
|
|
163
|
+
currentSigningKey: signingKey,
|
|
164
|
+
nextSigningKey: process.env.QSTASH_NEXT_SIGNING_KEY,
|
|
165
|
+
});
|
|
166
|
+
if (!ok) {
|
|
167
|
+
logger.warn(`[workflow-resume] signature mismatch for runId=${runId}`);
|
|
168
|
+
return Response.json({ type: 'UNAUTHORIZED', message: 'invalid QStash signature' }, { status: 401 });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const run = await store.get(runId);
|
|
172
|
+
if (!run) {
|
|
173
|
+
return Response.json({ type: 'NOT_FOUND', message: `workflow run "${runId}" not found` }, { status: 404 });
|
|
174
|
+
}
|
|
175
|
+
if (run.status === 'succeeded' || run.status === 'failed' || run.status === 'cancelled') {
|
|
176
|
+
return Response.json({ data: { runId, status: run.status, noop: true } });
|
|
177
|
+
}
|
|
178
|
+
// Resolve the command entry from the run's command_name (`cmd:<name>`).
|
|
179
|
+
const commandName = run.command_name.startsWith('cmd:') ? run.command_name.slice(4) : run.command_name;
|
|
180
|
+
const entry = cmdRegistry?.list().find((e) => e.name === commandName);
|
|
181
|
+
if (!entry) {
|
|
182
|
+
return Response.json({ type: 'NOT_FOUND', message: `command "${commandName}" not registered — cannot resume ${runId}` }, { status: 404 });
|
|
183
|
+
}
|
|
184
|
+
// Rebuild a WorkflowManager with the same adapters used at dispatch time.
|
|
185
|
+
// The queue + resumeEndpoint are re-attached so a step that yields
|
|
186
|
+
// again during this invocation schedules its own next continuation.
|
|
187
|
+
const wfStorageInstance = infraMap.get('IWorkflowStoragePort');
|
|
188
|
+
const wfStoreInstance = infraMap.get('IWorkflowStorePort');
|
|
189
|
+
const progressChannelInstance = infraMap.get('IProgressChannelPort');
|
|
190
|
+
const wm = new WorkflowManager(appRef.current, {
|
|
191
|
+
storage: wfStorageInstance,
|
|
192
|
+
store: wfStoreInstance,
|
|
193
|
+
progressChannel: progressChannelInstance,
|
|
194
|
+
queue: ctx.workflowQueue,
|
|
195
|
+
resumeEndpoint: ctx.workflowResumeEndpoint,
|
|
196
|
+
stepBudgetMs: ctx.workflowStepBudgetMs,
|
|
197
|
+
});
|
|
198
|
+
wm.register({ name: `cmd:${commandName}`, fn: entry.workflow });
|
|
199
|
+
// Await the resumed slice. On serverless hosts, fire-and-forget work is
|
|
200
|
+
// killed as soon as the response is sent; long workflows must either
|
|
201
|
+
// complete this slice or yield and enqueue the next continuation.
|
|
202
|
+
await wm.resume(runId);
|
|
203
|
+
const updated = await store.get(runId);
|
|
204
|
+
return Response.json({ data: { runId, status: updated?.status ?? 'resumed' } }, { status: updated?.status === 'succeeded' ? 200 : 202 });
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
return Response.json({ type: 'UNEXPECTED_STATE', message: err.message }, { status: 500 });
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
logger.info('[workflow] Framework routes: GET|DELETE /api/admin/_workflow/:id + POST …/:id/resume');
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=wire-workflow-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-workflow-routes.js","sourceRoot":"","sources":["../../../../src/bootstrap/phases/wire/wire-workflow-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-http.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/phases/wire-http.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGpE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Phase 5: Wire HTTP endpoints — auth, H3 adapter, contexts, routes, AI, dashboard, OpenAPI.
|
|
2
|
+
// Thin orchestrator — actual logic lives in ./wire/*.ts sub-phases.
|
|
3
|
+
import { wireAdapter, wireAuth, wireContexts, wireExtras } from './wire';
|
|
4
|
+
export async function wireHttpEndpoints(ctx, appRef) {
|
|
5
|
+
await wireAuth(ctx, appRef);
|
|
6
|
+
await wireAdapter(ctx, appRef);
|
|
7
|
+
await wireContexts(ctx, appRef);
|
|
8
|
+
await wireExtras(ctx, appRef);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=wire-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-http.js","sourceRoot":"","sources":["../../../src/bootstrap/phases/wire-http.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,oEAAoE;AAGpE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAqB,EAAE,MAAc;IAC3E,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC3B,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse the generated TypeScript source and throw if there are any syntax errors.
|
|
3
|
+
* Uses TypeScript's own parser — the only reliable way to validate generated code.
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateGeneratedTypeScript(source: string, filename: string): void;
|
|
6
|
+
//# sourceMappingURL=validate-generated-ts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-generated-ts.d.ts","sourceRoot":"","sources":["../../src/bootstrap/validate-generated-ts.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAqBlF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPEC TS-04 — Validate generated TypeScript output before writing to disk.
|
|
2
|
+
// Belt-and-suspenders: input sanitization in generate-types.ts catches known
|
|
3
|
+
// failure modes; this validator catches the rest.
|
|
4
|
+
import { MantaError } from '@mantajs/core';
|
|
5
|
+
import ts from 'typescript';
|
|
6
|
+
/**
|
|
7
|
+
* Parse the generated TypeScript source and throw if there are any syntax errors.
|
|
8
|
+
* Uses TypeScript's own parser — the only reliable way to validate generated code.
|
|
9
|
+
*/
|
|
10
|
+
export function validateGeneratedTypeScript(source, filename) {
|
|
11
|
+
const sourceFile = ts.createSourceFile(filename, source, ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
|
|
12
|
+
// parseDiagnostics is an internal-ish field but stable in practice
|
|
13
|
+
const diagnostics = sourceFile.parseDiagnostics ?? [];
|
|
14
|
+
if (diagnostics.length === 0)
|
|
15
|
+
return;
|
|
16
|
+
// Format the first diagnostic for the error
|
|
17
|
+
const d = diagnostics[0];
|
|
18
|
+
const pos = d.start ?? 0;
|
|
19
|
+
const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, pos);
|
|
20
|
+
const msg = ts.flattenDiagnosticMessageText(d.messageText, '\n');
|
|
21
|
+
const snippet = source.slice(Math.max(0, pos - 20), Math.min(source.length, pos + 20)).replace(/\n/g, '\\n');
|
|
22
|
+
throw new MantaError('INVALID_DATA', `Generated ${filename} has syntax errors at line ${line + 1}:${character + 1}: ${msg}\n` +
|
|
23
|
+
` Near: "${snippet}"\n` +
|
|
24
|
+
` This is a codegen bug. Check your defineModel/defineContext/defineSubscriber names for invalid characters.`);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validate-generated-ts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-generated-ts.js","sourceRoot":"","sources":["../../src/bootstrap/validate-generated-ts.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,kDAAkD;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,QAAgB;IAC1E,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAEzG,mEAAmE;IACnE,MAAM,WAAW,GAAI,UAAgE,CAAC,gBAAgB,IAAI,EAAE,CAAA;IAE5G,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEpC,4CAA4C;IAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IACxB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC7E,MAAM,GAAG,GAAG,EAAE,CAAC,4BAA4B,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAE5G,MAAM,IAAI,UAAU,CAClB,cAAc,EACd,aAAa,QAAQ,8BAA8B,IAAI,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,IAAI;QACtF,YAAY,OAAO,KAAK;QACxB,8GAA8G,CACjH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DiscoveredResources } from '../resource-loader';
|
|
2
|
+
/**
|
|
3
|
+
* Generate .manta/server/manifest.ts with static imports for all user/plugin files.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateBuildManifest(cwd: string, resources: DiscoveredResources, pluginResources: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
resources: DiscoveredResources;
|
|
8
|
+
rootDir: string;
|
|
9
|
+
}>): void;
|
|
10
|
+
//# sourceMappingURL=generate-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-manifest.d.ts","sourceRoot":"","sources":["../../src/build/generate-manifest.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAkD7D;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,mBAAmB,EAC9B,eAAe,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACxF,IAAI,CA+EN"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Build-time manifest generator for serverless deployments.
|
|
2
|
+
//
|
|
3
|
+
// Generates .manta/server/manifest.ts with:
|
|
4
|
+
// 1. Static imports for every user file (models, services, commands, queries, links, etc.)
|
|
5
|
+
// 2. A pre-computed DiscoveredResources object (no readdirSync at runtime)
|
|
6
|
+
// 3. An import lookup map (no jiti at runtime)
|
|
7
|
+
//
|
|
8
|
+
// This is the fix for the fundamental serverless incompatibility: bootstrapApp's
|
|
9
|
+
// runtime filesystem discovery (readdirSync + jiti.import) doesn't work on Vercel
|
|
10
|
+
// because the source files aren't on the function's filesystem as individual files —
|
|
11
|
+
// they need to be statically imported and bundled by Nitro/rolldown.
|
|
12
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
13
|
+
import { relative, resolve } from 'node:path';
|
|
14
|
+
/**
|
|
15
|
+
* Collect all file paths that bootstrapApp needs to import from a DiscoveredResources object.
|
|
16
|
+
*/
|
|
17
|
+
function collectImportPaths(resources, pluginResources) {
|
|
18
|
+
const paths = [];
|
|
19
|
+
function addFromResources(r, prefix) {
|
|
20
|
+
for (const m of r.modules) {
|
|
21
|
+
for (const e of m.entities) {
|
|
22
|
+
paths.push({ absPath: e.modelPath, label: `${prefix}model_${m.name}_${e.name}` });
|
|
23
|
+
if (e.servicePath)
|
|
24
|
+
paths.push({ absPath: e.servicePath, label: `${prefix}svc_${m.name}_${e.name}` });
|
|
25
|
+
}
|
|
26
|
+
for (const c of m.commands)
|
|
27
|
+
paths.push({ absPath: c.path, label: `${prefix}mcmd_${m.name}_${c.id}` });
|
|
28
|
+
for (const q of m.queries)
|
|
29
|
+
paths.push({ absPath: q.path, label: `${prefix}mquery_${m.name}_${q.id}` });
|
|
30
|
+
for (const l of m.intraLinks)
|
|
31
|
+
paths.push({ absPath: l.path, label: `${prefix}mlink_${m.name}_${l.id}` });
|
|
32
|
+
for (const a of m.apiRoutes)
|
|
33
|
+
paths.push({ absPath: a.file, label: `${prefix}mapi_${m.name}_${a.relativePath.replace(/[^a-z0-9]/gi, '_')}` });
|
|
34
|
+
}
|
|
35
|
+
for (const c of r.commands)
|
|
36
|
+
paths.push({ absPath: c.path, label: `${prefix}cmd_${c.id}` });
|
|
37
|
+
for (const q of r.queries)
|
|
38
|
+
paths.push({ absPath: q.path, label: `${prefix}query_${q.id}` });
|
|
39
|
+
for (const l of r.links)
|
|
40
|
+
paths.push({ absPath: l.path, label: `${prefix}link_${l.id}` });
|
|
41
|
+
for (const s of r.subscribers)
|
|
42
|
+
paths.push({ absPath: s.path, label: `${prefix}sub_${s.id}` });
|
|
43
|
+
for (const w of r.workflows)
|
|
44
|
+
paths.push({ absPath: w.path, label: `${prefix}wf_${w.id}` });
|
|
45
|
+
for (const j of r.jobs)
|
|
46
|
+
paths.push({ absPath: j.path, label: `${prefix}job_${j.id}` });
|
|
47
|
+
for (const a of r.agents)
|
|
48
|
+
paths.push({ absPath: a.path, label: `${prefix}agent_${a.id}` });
|
|
49
|
+
for (const u of r.users)
|
|
50
|
+
paths.push({ absPath: u.path, label: `${prefix}user_${u.contextName}` });
|
|
51
|
+
for (const cm of r.contextMiddlewares)
|
|
52
|
+
paths.push({ absPath: cm.path, label: `${prefix}mw_${cm.context}` });
|
|
53
|
+
if (r.middlewares)
|
|
54
|
+
paths.push({ absPath: r.middlewares.path, label: `${prefix}middlewares` });
|
|
55
|
+
}
|
|
56
|
+
addFromResources(resources, '');
|
|
57
|
+
for (const p of pluginResources) {
|
|
58
|
+
addFromResources(p.resources, `plugin_${p.name.replace(/[^a-z0-9]/gi, '_')}_`);
|
|
59
|
+
}
|
|
60
|
+
return paths;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sanitize a label to be a valid JS identifier.
|
|
64
|
+
*/
|
|
65
|
+
function _sanitize(s) {
|
|
66
|
+
return s.replace(/[^a-zA-Z0-9_]/g, '_').replace(/^(\d)/, '_$1');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate .manta/server/manifest.ts with static imports for all user/plugin files.
|
|
70
|
+
*/
|
|
71
|
+
export function generateBuildManifest(cwd, resources, pluginResources) {
|
|
72
|
+
const targetDir = resolve(cwd, '.manta', 'server');
|
|
73
|
+
if (!existsSync(targetDir))
|
|
74
|
+
mkdirSync(targetDir, { recursive: true });
|
|
75
|
+
const allPaths = collectImportPaths(resources, pluginResources);
|
|
76
|
+
// Deduplicate by absPath
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
const uniquePaths = allPaths.filter((p) => {
|
|
79
|
+
if (seen.has(p.absPath))
|
|
80
|
+
return false;
|
|
81
|
+
seen.add(p.absPath);
|
|
82
|
+
return true;
|
|
83
|
+
});
|
|
84
|
+
const lines = [
|
|
85
|
+
'// Auto-generated by manta build — DO NOT EDIT',
|
|
86
|
+
'// Static imports for serverless: all user modules, commands, queries, etc.',
|
|
87
|
+
'// Bundled by Nitro/rolldown at build time → no filesystem access at runtime.',
|
|
88
|
+
'',
|
|
89
|
+
];
|
|
90
|
+
// Generate LAZY import functions — NOT static imports at the top level.
|
|
91
|
+
// Static imports execute module-level code (defineModel(...), defineCommand(...), etc.)
|
|
92
|
+
// at import time, BEFORE registerGlobals() runs → "defineModel is not defined".
|
|
93
|
+
// Lazy imports (`() => import(...)`) are traced by the bundler for code-splitting BUT
|
|
94
|
+
// only execute when called — AFTER registerGlobals() sets up the globals.
|
|
95
|
+
lines.push('// Lazy import functions: each returns a Promise<module> when called.');
|
|
96
|
+
lines.push('// Bundled by Nitro/rolldown (code-splitting), but only executed after');
|
|
97
|
+
lines.push('// registerGlobals() sets up defineModel/field/etc. on globalThis.');
|
|
98
|
+
lines.push('export const moduleImports: Record<string, () => Promise<Record<string, unknown>>> = {');
|
|
99
|
+
for (let i = 0; i < uniquePaths.length; i++) {
|
|
100
|
+
const { absPath } = uniquePaths[i];
|
|
101
|
+
let relPath = relative(targetDir, absPath);
|
|
102
|
+
relPath = relPath.replace(/\.tsx?$/, '');
|
|
103
|
+
if (!relPath.startsWith('.'))
|
|
104
|
+
relPath = `./${relPath}`;
|
|
105
|
+
lines.push(` ${JSON.stringify(absPath)}: () => import('${relPath}') as Promise<Record<string, unknown>>,`);
|
|
106
|
+
}
|
|
107
|
+
lines.push('}');
|
|
108
|
+
lines.push('');
|
|
109
|
+
lines.push('// Pre-discovered resources structure (serialized from discoverResources at build time).');
|
|
110
|
+
lines.push('// bootstrapApp uses this instead of scanning the filesystem with readdirSync.');
|
|
111
|
+
lines.push(`export const preloadedResources = ${JSON.stringify(resources, null, 2)} as const`);
|
|
112
|
+
// Plugin resources
|
|
113
|
+
lines.push('');
|
|
114
|
+
lines.push(`export const preloadedPluginResources = ${JSON.stringify(pluginResources.map((p) => ({ name: p.name, resources: p.resources, rootDir: p.rootDir })), null, 2)} as const`);
|
|
115
|
+
lines.push('');
|
|
116
|
+
const content = lines.join('\n');
|
|
117
|
+
writeFileSync(resolve(targetDir, 'manifest.ts'), content);
|
|
118
|
+
// Generate a tsconfig.json in .manta/server/ so rolldown can resolve the TS imports
|
|
119
|
+
// in the manifest. Without this, imports that traverse to packages/ (plugin files)
|
|
120
|
+
// fail with "Tsconfig not found" because rolldown walks up from .manta/server/ and
|
|
121
|
+
// doesn't find a tsconfig before hitting the root.
|
|
122
|
+
const tsconfig = {
|
|
123
|
+
compilerOptions: {
|
|
124
|
+
target: 'ES2022',
|
|
125
|
+
module: 'ESNext',
|
|
126
|
+
moduleResolution: 'bundler',
|
|
127
|
+
strict: false,
|
|
128
|
+
esModuleInterop: true,
|
|
129
|
+
skipLibCheck: true,
|
|
130
|
+
allowJs: true,
|
|
131
|
+
jsx: 'react-jsx',
|
|
132
|
+
},
|
|
133
|
+
include: ['**/*.ts', '**/*.tsx'],
|
|
134
|
+
};
|
|
135
|
+
writeFileSync(resolve(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
|
|
136
|
+
console.log(` ✓ Build manifest generated (${uniquePaths.length} static imports)`);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=generate-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-manifest.js","sourceRoot":"","sources":["../../src/build/generate-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8EnC,wBAAgB,aAAa,IAAI,OAAO,CA2ZvC"}
|