@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,476 @@
|
|
|
1
|
+
// SPEC-070 — manta init command
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { basename, dirname, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { MantaError } from '@mantajs/core/errors';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
// ESM-safe require (this file is ESM; bare `require` is undefined here).
|
|
10
|
+
const localRequire = createRequire(import.meta.url);
|
|
11
|
+
const COMMON_SRC_DIRS = [
|
|
12
|
+
'src/modules',
|
|
13
|
+
'src/commands',
|
|
14
|
+
'src/queries',
|
|
15
|
+
'src/subscribers',
|
|
16
|
+
'src/jobs',
|
|
17
|
+
'src/links',
|
|
18
|
+
'src/agents',
|
|
19
|
+
'src/middleware',
|
|
20
|
+
];
|
|
21
|
+
const NEXT_EXTRA_DIRS = ['src/spa/admin/pages', 'app', 'app/api', 'app/admin', 'lib'];
|
|
22
|
+
function getDirsToCreate(preset) {
|
|
23
|
+
if (preset === 'next')
|
|
24
|
+
return [...COMMON_SRC_DIRS, ...NEXT_EXTRA_DIRS];
|
|
25
|
+
return COMMON_SRC_DIRS;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* manta init — Initialize a new Manta project.
|
|
29
|
+
* Scaffolds a complete, functional project with Nitro host and admin dashboard.
|
|
30
|
+
* Never destroys existing files. Skips files that already exist.
|
|
31
|
+
*/
|
|
32
|
+
export async function initCommand(options = {}) {
|
|
33
|
+
const dir = resolve(options.dir ?? process.cwd());
|
|
34
|
+
const preset = options.preset ?? 'nitro';
|
|
35
|
+
const result = { exitCode: 0, created: [], skipped: [], warnings: [] };
|
|
36
|
+
// Safety: refuse to scaffold into a workspace root. `pnpm exec` (and similar) rewrite
|
|
37
|
+
// process.cwd() to the nearest workspace root, which previously caused `manta init`
|
|
38
|
+
// run from an empty subdir to dump files into the monorepo root. An explicit --dir
|
|
39
|
+
// is the escape hatch for the rare legitimate "init at workspace root" case.
|
|
40
|
+
if (options.dir === undefined && isWorkspaceRoot(dir)) {
|
|
41
|
+
throw new MantaError('INVALID_DATA', `Refusing to init inside a workspace root (${dir}). ` +
|
|
42
|
+
'This is usually caused by running `manta init` through `pnpm exec` / `yarn`, ' +
|
|
43
|
+
'which rewrite cwd to the workspace root. ' +
|
|
44
|
+
'Pass --dir <path> explicitly, or run `manta init` from inside the target project folder.');
|
|
45
|
+
}
|
|
46
|
+
// Create directories (idempotent) — preset-specific list
|
|
47
|
+
for (const d of getDirsToCreate(preset)) {
|
|
48
|
+
mkdirSync(resolve(dir, d), { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
// Generate files (only if they don't exist)
|
|
51
|
+
const projectName = basename(dir);
|
|
52
|
+
const files = preset === 'next' ? getNextTemplateFiles(projectName) : getTemplateFiles(projectName);
|
|
53
|
+
// Try to copy AGENT.md from @mantajs/core/docs/ (preset-aware)
|
|
54
|
+
const agentMd = resolveAgentMd(preset);
|
|
55
|
+
if (agentMd) {
|
|
56
|
+
files['AGENT.md'] = agentMd;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result.warnings.push('Could not find AGENT.md template in @mantajs/core/docs/. Install @mantajs/core first.');
|
|
60
|
+
}
|
|
61
|
+
for (const [filename, content] of Object.entries(files)) {
|
|
62
|
+
const filePath = resolve(dir, filename);
|
|
63
|
+
// Ensure parent directory exists for nested files
|
|
64
|
+
const parentDir = dirname(filePath);
|
|
65
|
+
if (!existsSync(parentDir)) {
|
|
66
|
+
mkdirSync(parentDir, { recursive: true });
|
|
67
|
+
}
|
|
68
|
+
if (existsSync(filePath)) {
|
|
69
|
+
result.skipped.push(filename);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
writeFileSync(filePath, content);
|
|
73
|
+
result.created.push(filename);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Resolve AGENT.md for the requested preset.
|
|
80
|
+
*
|
|
81
|
+
* Strategy: always start from the canonical body (`@mantajs/core/docs/AGENT.md`) and,
|
|
82
|
+
* when the preset needs extra guidance (e.g. Next hosting model), prepend a small
|
|
83
|
+
* preset-specific header from `packages/cli/src/templates/agent/{preset}.md`. This
|
|
84
|
+
* keeps a single source of truth for primitives and avoids drift between preset
|
|
85
|
+
* variants.
|
|
86
|
+
*/
|
|
87
|
+
function resolveAgentMd(preset = 'nitro') {
|
|
88
|
+
const canonicalBody = loadCanonicalAgentMd();
|
|
89
|
+
if (!canonicalBody)
|
|
90
|
+
return null;
|
|
91
|
+
if (preset === 'nitro') {
|
|
92
|
+
return canonicalBody;
|
|
93
|
+
}
|
|
94
|
+
// preset === 'next' — prepend the Next-specific header if we can find it
|
|
95
|
+
const headerPath = resolve(__dirname, '..', 'templates', 'agent', 'nextjs.md');
|
|
96
|
+
if (existsSync(headerPath)) {
|
|
97
|
+
const header = readFileSync(headerPath, 'utf-8').trimEnd();
|
|
98
|
+
return `${header}\n\n---\n\n${canonicalBody}`;
|
|
99
|
+
}
|
|
100
|
+
// No header available → return canonical body on its own rather than fail
|
|
101
|
+
return canonicalBody;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Load the canonical AGENT.md body (preset-independent).
|
|
105
|
+
* Same resolution chain as before: workspace @mantajs/core package.json → walk-up fallback → bundled template.
|
|
106
|
+
*/
|
|
107
|
+
function loadCanonicalAgentMd() {
|
|
108
|
+
// Strategy 1: resolve @mantajs/core package.json via createRequire (ESM-safe).
|
|
109
|
+
// Requires that @mantajs/core's package.json exposes "./package.json" in its exports.
|
|
110
|
+
try {
|
|
111
|
+
const corePkg = localRequire.resolve('@mantajs/core/package.json');
|
|
112
|
+
const agentPath = resolve(dirname(corePkg), 'docs', 'AGENT.md');
|
|
113
|
+
if (existsSync(agentPath)) {
|
|
114
|
+
return readFileSync(agentPath, 'utf-8');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// @mantajs/core not installed or package.json not exposed — fall through
|
|
119
|
+
}
|
|
120
|
+
// Strategy 2: resolve @mantajs/core entry point, then walk up to package root.
|
|
121
|
+
// Robust even if the package doesn't expose "./package.json" in exports.
|
|
122
|
+
try {
|
|
123
|
+
const coreEntry = localRequire.resolve('@mantajs/core');
|
|
124
|
+
let cur = dirname(coreEntry);
|
|
125
|
+
for (let i = 0; i < 6; i++) {
|
|
126
|
+
if (existsSync(resolve(cur, 'package.json'))) {
|
|
127
|
+
const agentPath = resolve(cur, 'docs', 'AGENT.md');
|
|
128
|
+
if (existsSync(agentPath)) {
|
|
129
|
+
return readFileSync(agentPath, 'utf-8');
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
const parent = dirname(cur);
|
|
134
|
+
if (parent === cur)
|
|
135
|
+
break;
|
|
136
|
+
cur = parent;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// fall through
|
|
141
|
+
}
|
|
142
|
+
// Strategy 3: bundled fallback template shipped with the CLI.
|
|
143
|
+
// Kept in sync with @mantajs/core/docs/AGENT.md (copied at release time).
|
|
144
|
+
const fallbackPath = resolve(__dirname, '..', 'templates', 'agent', 'standalone.md');
|
|
145
|
+
if (existsSync(fallbackPath)) {
|
|
146
|
+
return readFileSync(fallbackPath, 'utf-8');
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Detect whether `dir` is a workspace root (pnpm, yarn, npm workspaces).
|
|
152
|
+
* Used by `manta init` to refuse accidental scaffolding at the monorepo root.
|
|
153
|
+
*/
|
|
154
|
+
function isWorkspaceRoot(dir) {
|
|
155
|
+
if (existsSync(resolve(dir, 'pnpm-workspace.yaml')))
|
|
156
|
+
return true;
|
|
157
|
+
const pkgPath = resolve(dir, 'package.json');
|
|
158
|
+
if (!existsSync(pkgPath))
|
|
159
|
+
return false;
|
|
160
|
+
try {
|
|
161
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
162
|
+
return pkg.workspaces !== undefined;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function getTemplateFiles(projectName) {
|
|
169
|
+
const dbName = projectName.replace(/[^a-z0-9_]/g, '_');
|
|
170
|
+
return {
|
|
171
|
+
'manta.config.ts': `import { defineConfig } from '@mantajs/core'
|
|
172
|
+
|
|
173
|
+
export default defineConfig({
|
|
174
|
+
database: {
|
|
175
|
+
url: process.env.DATABASE_URL!,
|
|
176
|
+
},
|
|
177
|
+
http: {
|
|
178
|
+
port: Number(process.env.PORT) || 9000,
|
|
179
|
+
},
|
|
180
|
+
})
|
|
181
|
+
`,
|
|
182
|
+
'nitro.config.ts': `import { existsSync } from 'node:fs'
|
|
183
|
+
|
|
184
|
+
const adminBuildExists = existsSync('./public/admin')
|
|
185
|
+
|
|
186
|
+
export default {
|
|
187
|
+
compatibilityDate: '2025-01-01',
|
|
188
|
+
srcDir: '.manta/server',
|
|
189
|
+
publicAssets: adminBuildExists
|
|
190
|
+
? [{ dir: 'public/admin', baseURL: '/admin' }]
|
|
191
|
+
: [],
|
|
192
|
+
externals: {
|
|
193
|
+
inline: [
|
|
194
|
+
'@mantajs/core', '@mantajs/cli', '@mantajs/adapter-h3',
|
|
195
|
+
'@mantajs/adapter-database-pg', '@mantajs/adapter-logger-pino',
|
|
196
|
+
'@mantajs/host-nitro',
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
}
|
|
200
|
+
`,
|
|
201
|
+
'.env': `DATABASE_URL=postgresql://localhost:5432/${dbName}
|
|
202
|
+
PORT=9000
|
|
203
|
+
# JWT_SECRET=change-me-in-production
|
|
204
|
+
# ANTHROPIC_API_KEY=
|
|
205
|
+
`,
|
|
206
|
+
'.env.example': `DATABASE_URL=postgresql://localhost:5432/${dbName}
|
|
207
|
+
PORT=9000
|
|
208
|
+
# JWT_SECRET=change-me-in-production
|
|
209
|
+
# ANTHROPIC_API_KEY=
|
|
210
|
+
`,
|
|
211
|
+
'package.json': `${JSON.stringify({
|
|
212
|
+
name: projectName,
|
|
213
|
+
version: '0.1.0',
|
|
214
|
+
type: 'module',
|
|
215
|
+
scripts: {
|
|
216
|
+
dev: 'manta dev',
|
|
217
|
+
build: 'manta build --preset vercel',
|
|
218
|
+
start: 'manta start',
|
|
219
|
+
generate: 'manta generate',
|
|
220
|
+
'db:generate': 'manta db:generate',
|
|
221
|
+
'db:migrate': 'manta db:migrate',
|
|
222
|
+
},
|
|
223
|
+
dependencies: {
|
|
224
|
+
'@mantajs/core': 'workspace:*',
|
|
225
|
+
'@mantajs/cli': 'workspace:*',
|
|
226
|
+
'@mantajs/host-nitro': 'workspace:*',
|
|
227
|
+
'@mantajs/adapter-h3': 'workspace:*',
|
|
228
|
+
'@mantajs/adapter-database-pg': 'workspace:*',
|
|
229
|
+
'@mantajs/adapter-logger-pino': 'workspace:*',
|
|
230
|
+
'@mantajs/dashboard': 'workspace:*',
|
|
231
|
+
'@mantajs/ui': 'workspace:*',
|
|
232
|
+
'@mantajs/sdk': 'workspace:*',
|
|
233
|
+
zod: '^3.23.0',
|
|
234
|
+
},
|
|
235
|
+
}, null, 2)}\n`,
|
|
236
|
+
'tsconfig.json': `${JSON.stringify({
|
|
237
|
+
compilerOptions: {
|
|
238
|
+
target: 'ES2022',
|
|
239
|
+
module: 'ESNext',
|
|
240
|
+
moduleResolution: 'bundler',
|
|
241
|
+
strict: true,
|
|
242
|
+
esModuleInterop: true,
|
|
243
|
+
jsx: 'react-jsx',
|
|
244
|
+
outDir: 'dist',
|
|
245
|
+
rootDir: '.',
|
|
246
|
+
},
|
|
247
|
+
include: ['src/**/*.ts', 'src/**/*.tsx', '.manta/generated.d.ts', 'manta.config.ts'],
|
|
248
|
+
exclude: ['node_modules', 'tests'],
|
|
249
|
+
}, null, 2)}\n`,
|
|
250
|
+
'.gitignore': `node_modules/
|
|
251
|
+
.manta/
|
|
252
|
+
dist/
|
|
253
|
+
.output/
|
|
254
|
+
public/
|
|
255
|
+
.env
|
|
256
|
+
`,
|
|
257
|
+
'.manta/generated.d.ts': `// Auto-generated by Manta — provides global types for defineModel, field, etc.
|
|
258
|
+
// This file is regenerated on \`manta dev\` or \`manta generate\`.
|
|
259
|
+
// Do NOT edit manually.
|
|
260
|
+
|
|
261
|
+
/// <reference types="@mantajs/core/src/globals" />
|
|
262
|
+
|
|
263
|
+
export {}
|
|
264
|
+
`,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Next.js preset — scaffolds a Next App Router project with Manta mounted inline.
|
|
269
|
+
*
|
|
270
|
+
* Key differences vs the Nitro preset:
|
|
271
|
+
* - No nitro.config.ts — Next owns the HTTP server.
|
|
272
|
+
* - No separate Vite dev server — @mantajs/dashboard is bundled directly by Next via
|
|
273
|
+
* transpilePackages configured in withManta().
|
|
274
|
+
* - /api/[...manta]/route.ts catch-all forwards every HTTP method to Manta.
|
|
275
|
+
* - /admin/[[...slug]]/page.tsx mounts MantaDashboard as a client component.
|
|
276
|
+
*/
|
|
277
|
+
function getNextTemplateFiles(projectName) {
|
|
278
|
+
const dbName = projectName.replace(/[^a-z0-9_]/g, '_');
|
|
279
|
+
return {
|
|
280
|
+
'manta.config.ts': `import { defineConfig } from '@mantajs/core'
|
|
281
|
+
|
|
282
|
+
export default defineConfig({
|
|
283
|
+
database: {
|
|
284
|
+
url: process.env.DATABASE_URL!,
|
|
285
|
+
},
|
|
286
|
+
http: {
|
|
287
|
+
port: Number(process.env.PORT) || 3000,
|
|
288
|
+
},
|
|
289
|
+
})
|
|
290
|
+
`,
|
|
291
|
+
'next.config.ts': `import { withManta } from '@mantajs/adapter-nextjs'
|
|
292
|
+
|
|
293
|
+
export default withManta({})
|
|
294
|
+
`,
|
|
295
|
+
'.env': `DATABASE_URL=postgresql://localhost:5432/${dbName}
|
|
296
|
+
PORT=3000
|
|
297
|
+
# JWT_SECRET=change-me-in-production
|
|
298
|
+
# ANTHROPIC_API_KEY=
|
|
299
|
+
`,
|
|
300
|
+
'.env.example': `DATABASE_URL=postgresql://localhost:5432/${dbName}
|
|
301
|
+
PORT=3000
|
|
302
|
+
# JWT_SECRET=change-me-in-production
|
|
303
|
+
# ANTHROPIC_API_KEY=
|
|
304
|
+
`,
|
|
305
|
+
'package.json': `${JSON.stringify({
|
|
306
|
+
name: projectName,
|
|
307
|
+
version: '0.1.0',
|
|
308
|
+
private: true,
|
|
309
|
+
type: 'module',
|
|
310
|
+
scripts: {
|
|
311
|
+
dev: 'next dev',
|
|
312
|
+
build: 'next build',
|
|
313
|
+
start: 'next start',
|
|
314
|
+
generate: 'manta generate',
|
|
315
|
+
'db:generate': 'manta db:generate',
|
|
316
|
+
'db:migrate': 'manta db:migrate',
|
|
317
|
+
},
|
|
318
|
+
dependencies: {
|
|
319
|
+
'@mantajs/core': 'workspace:*',
|
|
320
|
+
'@mantajs/cli': 'workspace:*',
|
|
321
|
+
'@mantajs/adapter-nextjs': 'workspace:*',
|
|
322
|
+
'@mantajs/adapter-database-pg': 'workspace:*',
|
|
323
|
+
'@mantajs/adapter-logger-pino': 'workspace:*',
|
|
324
|
+
'@mantajs/dashboard': 'workspace:*',
|
|
325
|
+
'@mantajs/ui': 'workspace:*',
|
|
326
|
+
'@mantajs/sdk': 'workspace:*',
|
|
327
|
+
next: '^15.0.0',
|
|
328
|
+
react: '^19.0.0',
|
|
329
|
+
'react-dom': '^19.0.0',
|
|
330
|
+
zod: '^3.23.0',
|
|
331
|
+
},
|
|
332
|
+
devDependencies: {
|
|
333
|
+
'@tailwindcss/postcss': '^4.0.0',
|
|
334
|
+
'@types/node': '^22.0.0',
|
|
335
|
+
'@types/react': '^19.0.0',
|
|
336
|
+
'@types/react-dom': '^19.0.0',
|
|
337
|
+
postcss: '^8.4.0',
|
|
338
|
+
tailwindcss: '^4.0.0',
|
|
339
|
+
typescript: '^5.6.0',
|
|
340
|
+
},
|
|
341
|
+
}, null, 2)}\n`,
|
|
342
|
+
'tsconfig.json': `${JSON.stringify({
|
|
343
|
+
compilerOptions: {
|
|
344
|
+
target: 'ES2022',
|
|
345
|
+
lib: ['dom', 'dom.iterable', 'esnext'],
|
|
346
|
+
module: 'ESNext',
|
|
347
|
+
moduleResolution: 'bundler',
|
|
348
|
+
strict: true,
|
|
349
|
+
esModuleInterop: true,
|
|
350
|
+
skipLibCheck: true,
|
|
351
|
+
forceConsistentCasingInFileNames: true,
|
|
352
|
+
allowJs: true,
|
|
353
|
+
noEmit: true,
|
|
354
|
+
jsx: 'preserve',
|
|
355
|
+
incremental: true,
|
|
356
|
+
resolveJsonModule: true,
|
|
357
|
+
isolatedModules: true,
|
|
358
|
+
plugins: [{ name: 'next' }],
|
|
359
|
+
paths: { '@/*': ['./*'] },
|
|
360
|
+
},
|
|
361
|
+
include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts', '.manta/generated.d.ts'],
|
|
362
|
+
exclude: ['node_modules'],
|
|
363
|
+
}, null, 2)}\n`,
|
|
364
|
+
'.gitignore': `node_modules/
|
|
365
|
+
.manta/
|
|
366
|
+
.next/
|
|
367
|
+
next-env.d.ts
|
|
368
|
+
dist/
|
|
369
|
+
.output/
|
|
370
|
+
.env
|
|
371
|
+
`,
|
|
372
|
+
'.manta/generated.d.ts': `// Auto-generated by Manta — provides global types for defineModel, field, etc.
|
|
373
|
+
// This file is regenerated on \`manta generate\` (or manually via \`pnpm generate\`).
|
|
374
|
+
// Do NOT edit manually.
|
|
375
|
+
|
|
376
|
+
/// <reference types="@mantajs/core/src/globals" />
|
|
377
|
+
|
|
378
|
+
export {}
|
|
379
|
+
`,
|
|
380
|
+
'postcss.config.mjs': `/** @type {import('postcss-load-config').Config} */
|
|
381
|
+
const config = {
|
|
382
|
+
plugins: {
|
|
383
|
+
'@tailwindcss/postcss': {},
|
|
384
|
+
},
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export default config
|
|
388
|
+
`,
|
|
389
|
+
'app/globals.css': `@import 'tailwindcss';
|
|
390
|
+
|
|
391
|
+
/* Dashboard theme — single source of truth for colors, radii, shadows, @theme inline.
|
|
392
|
+
Already contains @source directives scanning dashboard and ui source
|
|
393
|
+
files, so utility class usage across the workspace is picked up automatically. */
|
|
394
|
+
@import '@mantajs/dashboard/index.css';
|
|
395
|
+
`,
|
|
396
|
+
'app/layout.tsx': `import type { ReactNode } from 'react'
|
|
397
|
+
import './globals.css'
|
|
398
|
+
|
|
399
|
+
export const metadata = {
|
|
400
|
+
title: '${projectName}',
|
|
401
|
+
description: 'Manta + Next.js app',
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export default function RootLayout({ children }: { children: ReactNode }) {
|
|
405
|
+
return (
|
|
406
|
+
<html lang="en">
|
|
407
|
+
<body>{children}</body>
|
|
408
|
+
</html>
|
|
409
|
+
)
|
|
410
|
+
}
|
|
411
|
+
`,
|
|
412
|
+
'app/page.tsx': `export default function Home() {
|
|
413
|
+
return (
|
|
414
|
+
<main style={{ padding: 32, fontFamily: 'system-ui, sans-serif' }}>
|
|
415
|
+
<h1>${projectName}</h1>
|
|
416
|
+
<p>Manta + Next.js is running.</p>
|
|
417
|
+
<ul>
|
|
418
|
+
<li><a href="/admin">/admin</a> — Manta dashboard</li>
|
|
419
|
+
<li><a href="/api/openapi.json">/api/openapi.json</a> — OpenAPI spec</li>
|
|
420
|
+
</ul>
|
|
421
|
+
</main>
|
|
422
|
+
)
|
|
423
|
+
}
|
|
424
|
+
`,
|
|
425
|
+
'app/api/[...manta]/route.ts': `// Catch-all route: forward every HTTP method to Manta.
|
|
426
|
+
// See @mantajs/adapter-nextjs/handler for implementation.
|
|
427
|
+
export { GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD } from '@mantajs/adapter-nextjs/handler'
|
|
428
|
+
`,
|
|
429
|
+
'app/admin/[[...slug]]/page.tsx': `'use client'
|
|
430
|
+
|
|
431
|
+
// Manta admin dashboard — loaded dynamically (client-only).
|
|
432
|
+
// The [[...slug]] catch-all hands every /admin/* path to react-router inside MantaDashboard.
|
|
433
|
+
//
|
|
434
|
+
// Why spaConfig is required:
|
|
435
|
+
// MantaDashboard gates its "loading" state on (registry fetched OR spaConfig provided).
|
|
436
|
+
// The registry endpoint is auth-protected, so without spaConfig the dashboard would spin
|
|
437
|
+
// forever (registry fetch skipped while unauthenticated → login never shown). Passing
|
|
438
|
+
// spaConfig flips hasStaticConfig=true and lets the login screen render immediately.
|
|
439
|
+
//
|
|
440
|
+
// Why apiUrl is empty:
|
|
441
|
+
// Same-origin fetches like \`/api/admin/login\` are relative and resolve against the current
|
|
442
|
+
// page's origin. Passing '' avoids a hydration mismatch from reading window.location.origin
|
|
443
|
+
// only on the client.
|
|
444
|
+
|
|
445
|
+
import dynamic from 'next/dynamic'
|
|
446
|
+
import spaConfig from '@/src/spa/admin/config'
|
|
447
|
+
|
|
448
|
+
const Dashboard = dynamic(
|
|
449
|
+
() => import('@mantajs/dashboard').then((m) => ({ default: m.MantaDashboard })),
|
|
450
|
+
{ ssr: false, loading: () => <div style={{ padding: 32 }}>Loading admin…</div> },
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
export default function MantaAdminPage() {
|
|
454
|
+
return <Dashboard apiUrl="" basename="/admin" spaConfig={spaConfig} />
|
|
455
|
+
}
|
|
456
|
+
`,
|
|
457
|
+
'src/modules/admin/entities/admin/model.ts': `// Admin user — triggers Manta's auth routes (/api/admin/login, /me, CRUD, invite)
|
|
458
|
+
// and seeds \`admin@manta.local\` / \`admin\` automatically in dev mode.
|
|
459
|
+
export default defineUserModel('admin', {
|
|
460
|
+
role: field.enum(['super_admin', 'editor', 'viewer']).default('super_admin'),
|
|
461
|
+
})
|
|
462
|
+
`,
|
|
463
|
+
'src/spa/admin/config.ts': `import { defineSpa } from '@mantajs/dashboard'
|
|
464
|
+
|
|
465
|
+
// SPA config for the admin dashboard.
|
|
466
|
+
// Passed to <MantaDashboard spaConfig={...}/> in app/admin/[[...slug]]/page.tsx.
|
|
467
|
+
// Controls title, navigation, AI features. Extend navigation as you add modules.
|
|
468
|
+
export default defineSpa({
|
|
469
|
+
title: '${projectName} Admin',
|
|
470
|
+
navigation: [],
|
|
471
|
+
ai: false,
|
|
472
|
+
})
|
|
473
|
+
`,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { StartOptions } from '../types';
|
|
2
|
+
export interface StartCommandResult {
|
|
3
|
+
exitCode: number;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* manta start — Start the production server.
|
|
9
|
+
* Profile is always 'prod'.
|
|
10
|
+
* No auto-migration. Pending migrations → exit(1).
|
|
11
|
+
* No HMR. JSON logs.
|
|
12
|
+
* Secrets are required (fatal if missing).
|
|
13
|
+
*/
|
|
14
|
+
export declare function startCommand(options?: StartOptions, cwd?: string): Promise<StartCommandResult>;
|
|
15
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,UAAU,CAAA;AAE1D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,OAAO,GAAE,YAAiB,EAC1B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA4E7B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPEC-070 — manta start command (production)
|
|
2
|
+
// Launches the compiled Nitro output. Bootstrap happens inside the catch-all route.
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { loadConfig, validateConfigForCommand } from '../config/load-config';
|
|
6
|
+
import { loadEnv } from '../config/load-env';
|
|
7
|
+
/**
|
|
8
|
+
* manta start — Start the production server.
|
|
9
|
+
* Profile is always 'prod'.
|
|
10
|
+
* No auto-migration. Pending migrations → exit(1).
|
|
11
|
+
* No HMR. JSON logs.
|
|
12
|
+
* Secrets are required (fatal if missing).
|
|
13
|
+
*/
|
|
14
|
+
export async function startCommand(options = {}, cwd = process.cwd()) {
|
|
15
|
+
const result = { exitCode: 0, errors: [], warnings: [] };
|
|
16
|
+
// [1] Load .env
|
|
17
|
+
const envResult = loadEnv(cwd);
|
|
18
|
+
result.warnings.push(...envResult.warnings);
|
|
19
|
+
// [2] Load config
|
|
20
|
+
let config;
|
|
21
|
+
try {
|
|
22
|
+
config = await loadConfig(cwd);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
result.exitCode = 1;
|
|
26
|
+
result.errors.push(err instanceof Error ? err.message : String(err));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
// [3] Validate required fields for start
|
|
30
|
+
const validationErrors = validateConfigForCommand(config, 'start');
|
|
31
|
+
if (validationErrors.length > 0) {
|
|
32
|
+
result.exitCode = 1;
|
|
33
|
+
result.errors.push(...validationErrors);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
// [4] Validate secrets (fatal in prod)
|
|
37
|
+
const secretErrors = validateProdSecrets(config);
|
|
38
|
+
if (secretErrors.length > 0) {
|
|
39
|
+
result.exitCode = 1;
|
|
40
|
+
result.errors.push(...secretErrors);
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
// [4b] BC-F18 — Validate build preset. `manta start` launches the Nitro
|
|
44
|
+
// output produced by `manta build --preset node`. If the last build used a
|
|
45
|
+
// different preset (vercel, aws-lambda, cloudflare, bun), the .output
|
|
46
|
+
// directory contains adapter-specific handlers that won't run under plain
|
|
47
|
+
// Node. Fail fast with an AI-readable how-to-fix message.
|
|
48
|
+
const presetError = validateBuildPreset(cwd);
|
|
49
|
+
if (presetError) {
|
|
50
|
+
result.exitCode = 1;
|
|
51
|
+
result.errors.push(presetError);
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
// [5] Resolve port
|
|
55
|
+
const port = options.port ?? config.http?.port ?? 9000;
|
|
56
|
+
// [6] Start production server via @mantajs/host-nitro
|
|
57
|
+
// Bootstrap happens inside the compiled catch-all route, not here.
|
|
58
|
+
console.log(`\n Starting Manta production server on port ${port}...`);
|
|
59
|
+
try {
|
|
60
|
+
const { resolve } = await import('node:path');
|
|
61
|
+
const { startProduction } = await import('@mantajs/host-nitro');
|
|
62
|
+
const outputDir = resolve(cwd, '.output');
|
|
63
|
+
const server = await startProduction({ outputDir, port });
|
|
64
|
+
// Block until process exits
|
|
65
|
+
await new Promise((resolvePromise) => {
|
|
66
|
+
process.on('SIGINT', async () => {
|
|
67
|
+
await server.close();
|
|
68
|
+
resolvePromise();
|
|
69
|
+
});
|
|
70
|
+
process.on('SIGTERM', async () => {
|
|
71
|
+
await server.close();
|
|
72
|
+
resolvePromise();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
result.exitCode = 1;
|
|
78
|
+
result.errors.push(err instanceof Error ? err.message : String(err));
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* BC-F18 — Read .manta/manifest/build-info.json and check the recorded preset.
|
|
84
|
+
* Returns a message if the build was produced with a preset other than 'node';
|
|
85
|
+
* returns null if the build is compatible (or if no build-info exists — an older
|
|
86
|
+
* build predating BC-F18, which we tolerate to avoid breaking existing projects).
|
|
87
|
+
*/
|
|
88
|
+
function validateBuildPreset(cwd) {
|
|
89
|
+
const buildInfoPath = join(cwd, '.manta', 'manifest', 'build-info.json');
|
|
90
|
+
if (!existsSync(buildInfoPath)) {
|
|
91
|
+
// No build-info — either the project was built before BC-F18 or never built.
|
|
92
|
+
// Tolerate silently; the Nitro output directory check below (or the absence
|
|
93
|
+
// of .output) will surface the real problem.
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
let parsed;
|
|
97
|
+
try {
|
|
98
|
+
parsed = JSON.parse(readFileSync(buildInfoPath, 'utf-8'));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const actualPreset = typeof parsed.preset === 'string' ? parsed.preset : null;
|
|
104
|
+
if (!actualPreset || actualPreset === 'node')
|
|
105
|
+
return null;
|
|
106
|
+
return `manta start requires a build produced with --preset node, but the current build was produced with --preset ${actualPreset}. Rebuild with 'manta build --preset node' first, or use the native runner for the ${actualPreset} runtime (e.g. 'vercel dev' for vercel).`;
|
|
107
|
+
}
|
|
108
|
+
function validateProdSecrets(config) {
|
|
109
|
+
const errors = [];
|
|
110
|
+
if (!config.auth?.jwtSecret && !process.env.JWT_SECRET) {
|
|
111
|
+
errors.push('JWT_SECRET is required in production. Set it in .env');
|
|
112
|
+
}
|
|
113
|
+
if (config.auth?.session?.enabled) {
|
|
114
|
+
const cookieSecret = process.env.COOKIE_SECRET;
|
|
115
|
+
if (!cookieSecret) {
|
|
116
|
+
errors.push('COOKIE_SECRET is required when session auth is enabled. Set it in .env');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return errors;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface UserCommandOptions {
|
|
2
|
+
email: string;
|
|
3
|
+
password?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface UserCommandResult {
|
|
6
|
+
exitCode: number;
|
|
7
|
+
errors: string[];
|
|
8
|
+
warnings: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* manta user — Create an admin user.
|
|
12
|
+
*
|
|
13
|
+
* Usage: manta user -e admin@example.com -p supersecret
|
|
14
|
+
*
|
|
15
|
+
* Connects directly to the database and inserts auth_identity + provider_identity + admin_user.
|
|
16
|
+
* Like Medusa's `medusa user` command — no bootstrap, no InMemory, just SQL.
|
|
17
|
+
*/
|
|
18
|
+
export declare function userCommand(options: UserCommandOptions, cwd?: string): Promise<UserCommandResult>;
|
|
19
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/commands/user.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAcD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAiH5B"}
|