@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,125 @@
|
|
|
1
|
+
// manta user — Create an admin user (like Medusa's `medusa user -e admin@example.com -p secret`)
|
|
2
|
+
// Writes directly to the database via SQL. No bootstrap needed.
|
|
3
|
+
import { randomBytes, scryptSync } from 'node:crypto';
|
|
4
|
+
import { loadConfig } from '../config/load-config';
|
|
5
|
+
import { loadEnv } from '../config/load-env';
|
|
6
|
+
function hashPassword(password) {
|
|
7
|
+
const salt = randomBytes(16).toString('hex');
|
|
8
|
+
const hash = scryptSync(password, salt, 64).toString('hex');
|
|
9
|
+
return `${salt}:${hash}`;
|
|
10
|
+
}
|
|
11
|
+
function generatePassword() {
|
|
12
|
+
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%';
|
|
13
|
+
const bytes = randomBytes(16);
|
|
14
|
+
return Array.from(bytes, (b) => chars[b % chars.length]).join('');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* manta user — Create an admin user.
|
|
18
|
+
*
|
|
19
|
+
* Usage: manta user -e admin@example.com -p supersecret
|
|
20
|
+
*
|
|
21
|
+
* Connects directly to the database and inserts auth_identity + provider_identity + admin_user.
|
|
22
|
+
* Like Medusa's `medusa user` command — no bootstrap, no InMemory, just SQL.
|
|
23
|
+
*/
|
|
24
|
+
export async function userCommand(options, cwd = process.cwd()) {
|
|
25
|
+
const result = { exitCode: 0, errors: [], warnings: [] };
|
|
26
|
+
if (!options.email) {
|
|
27
|
+
result.exitCode = 1;
|
|
28
|
+
result.errors.push('Email is required. Usage: manta user -e admin@example.com -p supersecret');
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
const password = options.password ?? generatePassword();
|
|
32
|
+
const passwordWasGenerated = !options.password;
|
|
33
|
+
try {
|
|
34
|
+
loadEnv(cwd);
|
|
35
|
+
const config = await loadConfig(cwd);
|
|
36
|
+
const dbUrl = config.database?.url ?? process.env.DATABASE_URL;
|
|
37
|
+
if (!dbUrl) {
|
|
38
|
+
result.exitCode = 1;
|
|
39
|
+
result.errors.push('DATABASE_URL is required. Set it in .env or manta.config.ts');
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
const pg = await import('postgres');
|
|
43
|
+
const sql = pg.default(dbUrl, { max: 1 });
|
|
44
|
+
try {
|
|
45
|
+
// Ensure auth tables exist
|
|
46
|
+
await sql `CREATE TABLE IF NOT EXISTS auth_identities (
|
|
47
|
+
id TEXT PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
48
|
+
app_metadata JSONB DEFAULT '{}',
|
|
49
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
50
|
+
updated_at TIMESTAMPTZ DEFAULT now()
|
|
51
|
+
)`;
|
|
52
|
+
await sql `CREATE TABLE IF NOT EXISTS provider_identities (
|
|
53
|
+
id TEXT PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
54
|
+
entity_id TEXT NOT NULL,
|
|
55
|
+
provider TEXT NOT NULL,
|
|
56
|
+
auth_identity_id TEXT NOT NULL REFERENCES auth_identities(id),
|
|
57
|
+
user_metadata JSONB DEFAULT '{}',
|
|
58
|
+
provider_metadata JSONB DEFAULT '{}',
|
|
59
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
60
|
+
updated_at TIMESTAMPTZ DEFAULT now()
|
|
61
|
+
)`;
|
|
62
|
+
// Check if identity already exists
|
|
63
|
+
const existing = await sql `
|
|
64
|
+
SELECT id FROM provider_identities
|
|
65
|
+
WHERE entity_id = ${options.email} AND provider = 'emailpass'
|
|
66
|
+
`;
|
|
67
|
+
if (existing.length > 0) {
|
|
68
|
+
result.exitCode = 1;
|
|
69
|
+
result.errors.push(`User ${options.email} already exists. Delete it first to reset the password.`);
|
|
70
|
+
await sql.end();
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
// Hash password and insert
|
|
74
|
+
const hashedPassword = hashPassword(password);
|
|
75
|
+
const [authIdentity] = await sql `
|
|
76
|
+
INSERT INTO auth_identities (app_metadata)
|
|
77
|
+
VALUES (${JSON.stringify({ user_type: 'admin' })})
|
|
78
|
+
RETURNING id
|
|
79
|
+
`;
|
|
80
|
+
await sql `
|
|
81
|
+
INSERT INTO provider_identities (entity_id, provider, auth_identity_id, user_metadata, provider_metadata)
|
|
82
|
+
VALUES (
|
|
83
|
+
${options.email},
|
|
84
|
+
'emailpass',
|
|
85
|
+
${authIdentity.id},
|
|
86
|
+
${JSON.stringify({ email: options.email })},
|
|
87
|
+
${JSON.stringify({ password: hashedPassword })}
|
|
88
|
+
)
|
|
89
|
+
`;
|
|
90
|
+
// Create admin_user record if table exists
|
|
91
|
+
try {
|
|
92
|
+
const userExists = await sql `
|
|
93
|
+
SELECT id FROM admin_user WHERE email = ${options.email}
|
|
94
|
+
`;
|
|
95
|
+
if (userExists.length === 0) {
|
|
96
|
+
await sql `
|
|
97
|
+
INSERT INTO admin_user (email, first_name, last_name)
|
|
98
|
+
VALUES (${options.email}, 'Admin', 'User')
|
|
99
|
+
`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// admin_user table may not exist yet (first deploy) — that's OK,
|
|
104
|
+
// the bootstrap will create it. The auth identity is what matters for login.
|
|
105
|
+
result.warnings.push('admin_user table not found — auth identity created, user record will be created on first boot');
|
|
106
|
+
}
|
|
107
|
+
console.log(`Admin user created: ${options.email}`);
|
|
108
|
+
if (passwordWasGenerated) {
|
|
109
|
+
console.log(`Generated password: ${password}`);
|
|
110
|
+
console.log('(save this — it cannot be retrieved later)');
|
|
111
|
+
}
|
|
112
|
+
await sql.end();
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
await sql.end();
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
result.exitCode = 1;
|
|
121
|
+
result.errors.push(err.message);
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/commands/user.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LoadedConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Find manta.config.ts by searching from cwd upward until a package.json is found.
|
|
4
|
+
*/
|
|
5
|
+
export declare function findConfigFile(cwd?: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Load and validate the config file. Maps defineConfig format to LoadedConfig.
|
|
8
|
+
*/
|
|
9
|
+
export interface LoadConfigOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Custom importer for `manta.config.ts`. When provided, loadConfig uses it instead
|
|
12
|
+
* of Node's native `import()`. Required in bundler-hostile environments (Next.js,
|
|
13
|
+
* Vite SSR) where runtime TS loading needs jiti/tsx. The importer must accept an
|
|
14
|
+
* absolute filesystem path and return the module's exports.
|
|
15
|
+
*/
|
|
16
|
+
importFn?: (path: string) => Promise<Record<string, unknown>>;
|
|
17
|
+
}
|
|
18
|
+
export declare function loadConfig(cwd?: string, opts?: LoadConfigOptions): Promise<LoadedConfig>;
|
|
19
|
+
/**
|
|
20
|
+
* Validate required fields based on the command being run.
|
|
21
|
+
*/
|
|
22
|
+
export declare function validateConfigForCommand(config: LoadedConfig, command: string): string[];
|
|
23
|
+
//# sourceMappingURL=load-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI5C;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAkBzE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC9D;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0BjH;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CASxF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// SPEC-070 — Find and import manta.config.ts, map to internal format
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { LoadedConfigSchema, MantaError } from '@mantajs/core';
|
|
5
|
+
const CONFIG_FILENAMES = ['manta.config.ts', 'manta.config.js', 'manta.config.mjs'];
|
|
6
|
+
/**
|
|
7
|
+
* Find manta.config.ts by searching from cwd upward until a package.json is found.
|
|
8
|
+
*/
|
|
9
|
+
export function findConfigFile(cwd = process.cwd()) {
|
|
10
|
+
let dir = resolve(cwd);
|
|
11
|
+
const root = resolve('/');
|
|
12
|
+
while (dir !== root) {
|
|
13
|
+
for (const filename of CONFIG_FILENAMES) {
|
|
14
|
+
const candidate = resolve(dir, filename);
|
|
15
|
+
if (existsSync(candidate)) {
|
|
16
|
+
return candidate;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Stop if we found a package.json (project root)
|
|
20
|
+
if (existsSync(resolve(dir, 'package.json'))) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
dir = dirname(dir);
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
export async function loadConfig(cwd = process.cwd(), opts = {}) {
|
|
28
|
+
const configPath = findConfigFile(cwd);
|
|
29
|
+
if (!configPath) {
|
|
30
|
+
throw new MantaError('NOT_FOUND', 'manta.config.ts not found. Run `manta init` to create one.');
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
let configModule;
|
|
34
|
+
if (opts.importFn) {
|
|
35
|
+
// Caller-supplied importer (e.g. jiti from @mantajs/adapter-nextjs).
|
|
36
|
+
// Skips the cache-bust query string because jiti has its own invalidation.
|
|
37
|
+
configModule = await opts.importFn(configPath);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Native dynamic import path (CLI dev mode — relies on tsx loader in the process).
|
|
41
|
+
// Cache bust: add unique query to force re-import when file changes.
|
|
42
|
+
configModule = await import(`${configPath}?t=${Date.now()}_${Math.random()}`);
|
|
43
|
+
}
|
|
44
|
+
const rawConfig = configModule.default ?? configModule;
|
|
45
|
+
return mapToLoadedConfig(rawConfig);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (MantaError.is(err))
|
|
49
|
+
throw err;
|
|
50
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
51
|
+
throw new MantaError('INVALID_DATA', `Failed to load manta.config.ts: ${detail}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Validate required fields based on the command being run.
|
|
56
|
+
*/
|
|
57
|
+
export function validateConfigForCommand(config, command) {
|
|
58
|
+
const errors = [];
|
|
59
|
+
const requiresDbUrl = ['dev', 'start', 'db:generate', 'db:migrate', 'db:rollback', 'db:diff', 'db:create', 'exec'];
|
|
60
|
+
if (requiresDbUrl.includes(command) && !config.database?.url) {
|
|
61
|
+
errors.push('database.url is required. Set DATABASE_URL in .env or database.url in manta.config.ts');
|
|
62
|
+
}
|
|
63
|
+
return errors;
|
|
64
|
+
}
|
|
65
|
+
function mapToLoadedConfig(raw) {
|
|
66
|
+
let mapped;
|
|
67
|
+
// If it's already in MantaConfig format (from defineConfig), map it
|
|
68
|
+
if (raw.projectConfig) {
|
|
69
|
+
const pc = raw.projectConfig;
|
|
70
|
+
const rawDb = raw.database;
|
|
71
|
+
mapped = {
|
|
72
|
+
database: rawDb?.url ? rawDb : { url: pc.databaseUrl ?? undefined },
|
|
73
|
+
auth: {
|
|
74
|
+
jwtSecret: pc.jwtSecret ?? undefined,
|
|
75
|
+
},
|
|
76
|
+
modules: Array.isArray(raw.modules) ? raw.modules : [],
|
|
77
|
+
plugins: Array.isArray(raw.plugins) ? raw.plugins : [],
|
|
78
|
+
featureFlags: raw.featureFlags ?? {},
|
|
79
|
+
strict: raw.strict ?? false,
|
|
80
|
+
...(raw.http ? { http: raw.http } : {}),
|
|
81
|
+
...(raw.query ? { query: raw.query } : {}),
|
|
82
|
+
...(raw.boot ? { boot: raw.boot } : {}),
|
|
83
|
+
...(raw.adapters ? { adapters: raw.adapters } : {}),
|
|
84
|
+
...(raw.preset ? { preset: raw.preset } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Otherwise assume it's in the new defineConfig DX format
|
|
89
|
+
mapped = { ...raw };
|
|
90
|
+
// Normalize modules: defineConfig returns Record, schema expects array (or undefined)
|
|
91
|
+
if (mapped.modules && !Array.isArray(mapped.modules)) {
|
|
92
|
+
mapped.modules =
|
|
93
|
+
Object.keys(mapped.modules).length === 0
|
|
94
|
+
? undefined
|
|
95
|
+
: Object.entries(mapped.modules).map(([k, v]) => ({ resolve: k, ...(typeof v === 'object' ? v : {}) }));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const result = LoadedConfigSchema.safeParse(mapped);
|
|
99
|
+
if (!result.success) {
|
|
100
|
+
const issues = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join(', ');
|
|
101
|
+
throw new MantaError('INVALID_DATA', `Invalid configuration: ${issues}`);
|
|
102
|
+
}
|
|
103
|
+
return result.data;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=load-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface EnvLoadResult {
|
|
2
|
+
loaded: string[];
|
|
3
|
+
warnings: string[];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Load .env files following priority ordering.
|
|
7
|
+
* Later files override earlier files, but existing process.env is never overwritten.
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadEnv(cwd?: string): EnvLoadResult;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=load-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../../src/config/load-env.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAoClE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPEC-070 — Load .env files with priority ordering
|
|
2
|
+
// .env → .env.local → .env.{NODE_ENV} → .env.{NODE_ENV}.local
|
|
3
|
+
// Existing process.env values are NOT overwritten
|
|
4
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
5
|
+
import { resolve } from 'node:path';
|
|
6
|
+
/**
|
|
7
|
+
* Load .env files following priority ordering.
|
|
8
|
+
* Later files override earlier files, but existing process.env is never overwritten.
|
|
9
|
+
*/
|
|
10
|
+
export function loadEnv(cwd = process.cwd()) {
|
|
11
|
+
const nodeEnv = process.env.NODE_ENV ?? 'development';
|
|
12
|
+
const filesToLoad = ['.env', '.env.local', `.env.${nodeEnv}`, `.env.${nodeEnv}.local`];
|
|
13
|
+
const loaded = [];
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const envValues = {};
|
|
16
|
+
for (const file of filesToLoad) {
|
|
17
|
+
const filePath = resolve(cwd, file);
|
|
18
|
+
if (!existsSync(filePath)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
23
|
+
const parsed = parseEnvFile(content);
|
|
24
|
+
Object.assign(envValues, parsed);
|
|
25
|
+
loaded.push(file);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
warnings.push(`Failed to read ${file}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Apply to process.env without overwriting existing values
|
|
32
|
+
for (const [key, value] of Object.entries(envValues)) {
|
|
33
|
+
if (process.env[key] === undefined) {
|
|
34
|
+
process.env[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (loaded.length === 0) {
|
|
38
|
+
warnings.push('No .env file found. Using environment variables only.');
|
|
39
|
+
}
|
|
40
|
+
return { loaded, warnings };
|
|
41
|
+
}
|
|
42
|
+
function parseEnvFile(content) {
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const line of content.split('\n')) {
|
|
45
|
+
const trimmed = line.trim();
|
|
46
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
47
|
+
continue;
|
|
48
|
+
const eqIndex = trimmed.indexOf('=');
|
|
49
|
+
if (eqIndex === -1)
|
|
50
|
+
continue;
|
|
51
|
+
const key = trimmed.slice(0, eqIndex).trim();
|
|
52
|
+
let value = trimmed.slice(eqIndex + 1).trim();
|
|
53
|
+
// Remove surrounding quotes
|
|
54
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
55
|
+
value = value.slice(1, -1);
|
|
56
|
+
}
|
|
57
|
+
result[key] = value;
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=load-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../src/config/load-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PresetDefinition } from '@mantajs/core';
|
|
2
|
+
import type { LoadedConfig } from '../types';
|
|
3
|
+
export interface ResolvedAdapter {
|
|
4
|
+
port: string;
|
|
5
|
+
adapter: string;
|
|
6
|
+
options: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the preset from config or auto-detect from environment.
|
|
10
|
+
* Priority: explicit config.preset > deploy env → matching prod preset > devPreset.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolvePreset(config: LoadedConfig): PresetDefinition;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve adapters for each port by merging preset defaults with config overrides.
|
|
15
|
+
* Config adapters take precedence over preset adapters.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveAdapters(config: LoadedConfig, preset: PresetDefinition): ResolvedAdapter[];
|
|
18
|
+
/**
|
|
19
|
+
* Check that all resolved adapters are available (installed).
|
|
20
|
+
* Returns list of missing adapter package names.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkAdapterAvailability(adapters: ResolvedAdapter[]): string[];
|
|
23
|
+
//# sourceMappingURL=resolve-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-adapters.d.ts","sourceRoot":"","sources":["../../src/config/resolve-adapters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CA+BpE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAAE,CA6BjG;AAgBD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAa9E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// SPEC-070 — Resolve adapters via presets + overrides
|
|
2
|
+
import { BUILT_IN_PRESETS, devPreset } from '@mantajs/core';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the preset from config or auto-detect from environment.
|
|
5
|
+
* Priority: explicit config.preset > deploy env → matching prod preset > devPreset.
|
|
6
|
+
*/
|
|
7
|
+
export function resolvePreset(config) {
|
|
8
|
+
const presetValue = config.preset;
|
|
9
|
+
// Explicit preset object
|
|
10
|
+
if (presetValue && typeof presetValue === 'object') {
|
|
11
|
+
return presetValue;
|
|
12
|
+
}
|
|
13
|
+
// Explicit preset name
|
|
14
|
+
if (presetValue && typeof presetValue === 'string') {
|
|
15
|
+
const found = BUILT_IN_PRESETS[presetValue];
|
|
16
|
+
if (!found) {
|
|
17
|
+
throw new Error(`Unknown preset "${presetValue}". Available: ${Object.keys(BUILT_IN_PRESETS).join(', ')}`);
|
|
18
|
+
}
|
|
19
|
+
return found;
|
|
20
|
+
}
|
|
21
|
+
// Auto-detect from environment
|
|
22
|
+
if (process.env.VERCEL) {
|
|
23
|
+
return BUILT_IN_PRESETS.vercel;
|
|
24
|
+
}
|
|
25
|
+
if (process.env.CLOUDFLARE ||
|
|
26
|
+
process.env.CF_PAGES ||
|
|
27
|
+
process.env.WORKERS_CI ||
|
|
28
|
+
process.env.NITRO_PRESET === 'cloudflare_module') {
|
|
29
|
+
return BUILT_IN_PRESETS.cloudflare;
|
|
30
|
+
}
|
|
31
|
+
return devPreset;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve adapters for each port by merging preset defaults with config overrides.
|
|
35
|
+
* Config adapters take precedence over preset adapters.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveAdapters(config, preset) {
|
|
38
|
+
const overrides = config.adapters ?? {};
|
|
39
|
+
const resolved = [];
|
|
40
|
+
// Start with all preset adapters
|
|
41
|
+
const mergedPorts = new Set([...Object.keys(preset.adapters), ...Object.keys(overrides)]);
|
|
42
|
+
for (const port of mergedPorts) {
|
|
43
|
+
const override = overrides[port];
|
|
44
|
+
if (override) {
|
|
45
|
+
resolved.push({
|
|
46
|
+
port,
|
|
47
|
+
adapter: override.adapter,
|
|
48
|
+
options: override.options ?? {},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const presetEntry = preset.adapters[port];
|
|
53
|
+
if (presetEntry) {
|
|
54
|
+
resolved.push({
|
|
55
|
+
port,
|
|
56
|
+
adapter: presetEntry.adapter,
|
|
57
|
+
options: presetEntry.options ? { ...presetEntry.options } : {},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return resolved;
|
|
63
|
+
}
|
|
64
|
+
// Adapters always available (bundled with @mantajs/cli)
|
|
65
|
+
const ALWAYS_AVAILABLE = new Set([
|
|
66
|
+
'@mantajs/adapter-logger-pino',
|
|
67
|
+
'@mantajs/adapter-database-pg',
|
|
68
|
+
'@mantajs/adapter-database-neon',
|
|
69
|
+
'@mantajs/adapter-h3',
|
|
70
|
+
'@mantajs/adapter-cache-upstash',
|
|
71
|
+
'@mantajs/adapter-locking-neon',
|
|
72
|
+
'@mantajs/adapter-file-vercel-blob',
|
|
73
|
+
'@mantajs/adapter-jobs-vercel-cron',
|
|
74
|
+
'@mantajs/adapter-eventbus-upstash',
|
|
75
|
+
'@mantajs/adapter-notification-resend',
|
|
76
|
+
]);
|
|
77
|
+
/**
|
|
78
|
+
* Check that all resolved adapters are available (installed).
|
|
79
|
+
* Returns list of missing adapter package names.
|
|
80
|
+
*/
|
|
81
|
+
export function checkAdapterAvailability(adapters) {
|
|
82
|
+
const missing = [];
|
|
83
|
+
for (const adapter of adapters) {
|
|
84
|
+
// In-memory adapters from @mantajs/core are always available
|
|
85
|
+
if (adapter.adapter.startsWith('@mantajs/core/'))
|
|
86
|
+
continue;
|
|
87
|
+
// Bundled adapters are always available
|
|
88
|
+
if (ALWAYS_AVAILABLE.has(adapter.adapter))
|
|
89
|
+
continue;
|
|
90
|
+
// Sub-path adapters from bundled packages
|
|
91
|
+
if (ALWAYS_AVAILABLE.has(adapter.adapter.split('/').slice(0, 2).join('/')))
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
return missing;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=resolve-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-adapters.js","sourceRoot":"","sources":["../../src/config/resolve-adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { boot } from './bootstrap/boot';
|
|
2
|
+
export { type BootstrapOptions, type BootstrappedApp, bootstrapApp } from './bootstrap/bootstrap-app';
|
|
3
|
+
export { createProgram } from './cli';
|
|
4
|
+
export { buildCommand } from './commands/build';
|
|
5
|
+
export { createCommand } from './commands/db/create';
|
|
6
|
+
export { diffCommand } from './commands/db/diff';
|
|
7
|
+
export { generateCommand } from './commands/db/generate';
|
|
8
|
+
export { migrateCommand } from './commands/db/migrate';
|
|
9
|
+
export { rollbackCommand } from './commands/db/rollback';
|
|
10
|
+
export { devCommand, type MantaRequest } from './commands/dev';
|
|
11
|
+
export { execCommand } from './commands/exec';
|
|
12
|
+
export { initCommand } from './commands/init';
|
|
13
|
+
export { startCommand } from './commands/start';
|
|
14
|
+
export { loadConfig } from './config/load-config';
|
|
15
|
+
export { loadEnv } from './config/load-env';
|
|
16
|
+
export { resolveAdapters } from './config/resolve-adapters';
|
|
17
|
+
export type { BuildOptions, DevOptions, DiffOptions, ExecOptions, GenerateOptions, InitOptions, MigrateOptions, RollbackOptions, StartOptions, } from './types';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @mantajs/cli — Main entry point
|
|
2
|
+
// Parses argv and dispatches to the appropriate command
|
|
3
|
+
export { boot } from './bootstrap/boot';
|
|
4
|
+
export { bootstrapApp } from './bootstrap/bootstrap-app';
|
|
5
|
+
export { createProgram } from './cli';
|
|
6
|
+
export { buildCommand } from './commands/build';
|
|
7
|
+
export { createCommand } from './commands/db/create';
|
|
8
|
+
export { diffCommand } from './commands/db/diff';
|
|
9
|
+
export { generateCommand } from './commands/db/generate';
|
|
10
|
+
export { migrateCommand } from './commands/db/migrate';
|
|
11
|
+
export { rollbackCommand } from './commands/db/rollback';
|
|
12
|
+
export { devCommand } from './commands/dev';
|
|
13
|
+
export { execCommand } from './commands/exec';
|
|
14
|
+
export { initCommand } from './commands/init';
|
|
15
|
+
export { startCommand } from './commands/start';
|
|
16
|
+
export { loadConfig } from './config/load-config';
|
|
17
|
+
export { loadEnv } from './config/load-env';
|
|
18
|
+
export { resolveAdapters } from './config/resolve-adapters';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,wDAAwD;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAA+C,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAqB,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA"}
|
package/dist/jiti.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jiti.d.ts","sourceRoot":"","sources":["../src/jiti.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA"}
|
package/dist/jiti.js
ADDED
package/dist/jiti.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jiti.js","sourceRoot":"","sources":["../src/jiti.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
export interface OpenApiRoute {
|
|
3
|
+
method: string;
|
|
4
|
+
path: string;
|
|
5
|
+
summary?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
tags?: string[];
|
|
8
|
+
bodySchema?: z.ZodType<unknown>;
|
|
9
|
+
responseSchema?: z.ZodType<unknown>;
|
|
10
|
+
auth?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface OpenApiEntityField {
|
|
13
|
+
name: string;
|
|
14
|
+
type: string;
|
|
15
|
+
nullable?: boolean;
|
|
16
|
+
values?: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface OpenApiEntity {
|
|
19
|
+
name: string;
|
|
20
|
+
moduleName?: string;
|
|
21
|
+
fields: OpenApiEntityField[];
|
|
22
|
+
}
|
|
23
|
+
export interface OpenApiCommand {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
inputSchema: z.ZodType<unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface OpenApiSpec {
|
|
29
|
+
openapi: '3.1.0';
|
|
30
|
+
info: {
|
|
31
|
+
title: string;
|
|
32
|
+
version: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
};
|
|
35
|
+
paths: Record<string, Record<string, unknown>>;
|
|
36
|
+
components: {
|
|
37
|
+
schemas: Record<string, unknown>;
|
|
38
|
+
securitySchemes: Record<string, unknown>;
|
|
39
|
+
};
|
|
40
|
+
tags: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export interface GenerateOpenApiOptions {
|
|
46
|
+
title?: string;
|
|
47
|
+
version?: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
routes?: OpenApiRoute[];
|
|
50
|
+
commands?: OpenApiCommand[];
|
|
51
|
+
entities?: OpenApiEntity[];
|
|
52
|
+
basePath?: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function generateOpenApiSpec(options: GenerateOpenApiOptions): OpenApiSpec;
|
|
55
|
+
export declare function parseDmlEntityFields(schema: Record<string, unknown>): OpenApiEntityField[];
|
|
56
|
+
//# sourceMappingURL=generate-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-spec.d.ts","sourceRoot":"","sources":["../../src/openapi/generate-spec.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAI5B,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACzC,CAAA;IACD,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpD;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,WAAW,CA6VhF;AAgLD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,CAyB1F"}
|