@prisma-next/cli 0.3.0-pr.99.5 → 0.3.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/LICENSE +201 -0
- package/README.md +381 -128
- package/dist/agent-skill-mongo.md +106 -0
- package/dist/agent-skill-postgres.md +106 -0
- package/dist/cli-errors-BDCYR5ap.mjs +4 -0
- package/dist/cli-errors-DStABy9d.d.mts +3 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.js +1 -2910
- package/dist/cli.mjs +261 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/client-DiUkJAeN.mjs +987 -0
- package/dist/client-DiUkJAeN.mjs.map +1 -0
- package/dist/commands/contract-emit.d.mts +7 -0
- package/dist/commands/contract-emit.d.mts.map +1 -0
- package/dist/commands/contract-emit.mjs +9 -0
- package/dist/commands/contract-infer.d.mts +7 -0
- package/dist/commands/contract-infer.d.mts.map +1 -0
- package/dist/commands/contract-infer.mjs +10 -0
- package/dist/commands/db-init.d.mts +7 -0
- package/dist/commands/db-init.d.mts.map +1 -0
- package/dist/commands/db-init.mjs +126 -0
- package/dist/commands/db-init.mjs.map +1 -0
- package/dist/commands/db-schema.d.mts +7 -0
- package/dist/commands/db-schema.d.mts.map +1 -0
- package/dist/commands/db-schema.mjs +56 -0
- package/dist/commands/db-schema.mjs.map +1 -0
- package/dist/commands/db-sign.d.mts +7 -0
- package/dist/commands/db-sign.d.mts.map +1 -0
- package/dist/commands/db-sign.mjs +137 -0
- package/dist/commands/db-sign.mjs.map +1 -0
- package/dist/commands/db-update.d.mts +7 -0
- package/dist/commands/db-update.d.mts.map +1 -0
- package/dist/commands/db-update.mjs +123 -0
- package/dist/commands/db-update.mjs.map +1 -0
- package/dist/commands/db-verify.d.mts +7 -0
- package/dist/commands/db-verify.d.mts.map +1 -0
- package/dist/commands/db-verify.mjs +323 -0
- package/dist/commands/db-verify.mjs.map +1 -0
- package/dist/commands/migration-apply.d.mts +36 -0
- package/dist/commands/migration-apply.d.mts.map +1 -0
- package/dist/commands/migration-apply.mjs +245 -0
- package/dist/commands/migration-apply.mjs.map +1 -0
- package/dist/commands/migration-new.d.mts +8 -0
- package/dist/commands/migration-new.d.mts.map +1 -0
- package/dist/commands/migration-new.mjs +152 -0
- package/dist/commands/migration-new.mjs.map +1 -0
- package/dist/commands/migration-plan.d.mts +47 -0
- package/dist/commands/migration-plan.d.mts.map +1 -0
- package/dist/commands/migration-plan.mjs +313 -0
- package/dist/commands/migration-plan.mjs.map +1 -0
- package/dist/commands/migration-ref.d.mts +43 -0
- package/dist/commands/migration-ref.d.mts.map +1 -0
- package/dist/commands/migration-ref.mjs +195 -0
- package/dist/commands/migration-ref.mjs.map +1 -0
- package/dist/commands/migration-show.d.mts +28 -0
- package/dist/commands/migration-show.d.mts.map +1 -0
- package/dist/commands/migration-show.mjs +140 -0
- package/dist/commands/migration-show.mjs.map +1 -0
- package/dist/commands/migration-status.d.mts +86 -0
- package/dist/commands/migration-status.d.mts.map +1 -0
- package/dist/commands/migration-status.mjs +9 -0
- package/dist/commands/migration-verify.d.mts +16 -0
- package/dist/commands/migration-verify.d.mts.map +1 -0
- package/dist/commands/migration-verify.mjs +110 -0
- package/dist/commands/migration-verify.mjs.map +1 -0
- package/dist/config-loader-C4VXKl8f.mjs +43 -0
- package/dist/config-loader-C4VXKl8f.mjs.map +1 -0
- package/dist/{config-loader.d.ts → config-loader.d.mts} +8 -3
- package/dist/config-loader.d.mts.map +1 -0
- package/dist/config-loader.mjs +3 -0
- package/dist/contract-emit-D2wDXfyo.mjs +191 -0
- package/dist/contract-emit-D2wDXfyo.mjs.map +1 -0
- package/dist/contract-emit-Zm_sd1wQ.mjs +112 -0
- package/dist/contract-emit-Zm_sd1wQ.mjs.map +1 -0
- package/dist/contract-emit-kN-IkKTE.mjs +6 -0
- package/dist/contract-enrichment-CGW6mm-E.mjs +79 -0
- package/dist/contract-enrichment-CGW6mm-E.mjs.map +1 -0
- package/dist/contract-infer-DozZT511.mjs +90 -0
- package/dist/contract-infer-DozZT511.mjs.map +1 -0
- package/dist/exports/config-types.d.mts +2 -0
- package/dist/exports/config-types.mjs +3 -0
- package/dist/exports/control-api.d.mts +624 -0
- package/dist/exports/control-api.d.mts.map +1 -0
- package/dist/exports/control-api.mjs +8 -0
- package/dist/{load-ts-contract.d.ts → exports/index.d.mts} +12 -7
- package/dist/exports/index.d.mts.map +1 -0
- package/dist/exports/index.mjs +142 -0
- package/dist/exports/index.mjs.map +1 -0
- package/dist/extract-operation-statements-DZUJNmL3.mjs +13 -0
- package/dist/extract-operation-statements-DZUJNmL3.mjs.map +1 -0
- package/dist/extract-sql-ddl-DDMX-9mz.mjs +26 -0
- package/dist/extract-sql-ddl-DDMX-9mz.mjs.map +1 -0
- package/dist/framework-components-BAsliT4V.mjs +59 -0
- package/dist/framework-components-BAsliT4V.mjs.map +1 -0
- package/dist/init-6Pvm_esG.mjs +430 -0
- package/dist/init-6Pvm_esG.mjs.map +1 -0
- package/dist/inspect-live-schema-BYnhztxZ.mjs +91 -0
- package/dist/inspect-live-schema-BYnhztxZ.mjs.map +1 -0
- package/dist/migration-command-scaffold-CntCcntR.mjs +105 -0
- package/dist/migration-command-scaffold-CntCcntR.mjs.map +1 -0
- package/dist/migration-status-CJANY4yr.mjs +1583 -0
- package/dist/migration-status-CJANY4yr.mjs.map +1 -0
- package/dist/migrations-DTZBYXm1.mjs +173 -0
- package/dist/migrations-DTZBYXm1.mjs.map +1 -0
- package/dist/progress-adapter-B-YvmcDu.mjs +43 -0
- package/dist/progress-adapter-B-YvmcDu.mjs.map +1 -0
- package/dist/quick-reference-mongo.md +93 -0
- package/dist/quick-reference-postgres.md +91 -0
- package/dist/result-handler-oK_vA-Fn.mjs +697 -0
- package/dist/result-handler-oK_vA-Fn.mjs.map +1 -0
- package/dist/terminal-ui-C5k88MmW.mjs +274 -0
- package/dist/terminal-ui-C5k88MmW.mjs.map +1 -0
- package/dist/validate-contract-deps-esa-VQ0h.mjs +37 -0
- package/dist/validate-contract-deps-esa-VQ0h.mjs.map +1 -0
- package/dist/verify-DlFQ2FOw.mjs +385 -0
- package/dist/verify-DlFQ2FOw.mjs.map +1 -0
- package/package.json +87 -40
- package/src/cli.ts +118 -58
- package/src/commands/contract-emit.ts +101 -78
- package/src/commands/contract-infer-paths.ts +32 -0
- package/src/commands/contract-infer.ts +143 -0
- package/src/commands/db-init.ts +97 -219
- package/src/commands/db-schema.ts +77 -0
- package/src/commands/db-sign.ts +46 -73
- package/src/commands/db-update.ts +236 -0
- package/src/commands/db-verify.ts +409 -119
- package/src/commands/init/detect-package-manager.ts +47 -0
- package/src/commands/init/index.ts +21 -0
- package/src/commands/init/init.ts +203 -0
- package/src/commands/init/templates/agent-skill-mongo.md +106 -0
- package/src/commands/init/templates/agent-skill-postgres.md +106 -0
- package/src/commands/init/templates/agent-skill.ts +19 -0
- package/src/commands/init/templates/code-templates.ts +168 -0
- package/src/commands/init/templates/quick-reference-mongo.md +93 -0
- package/src/commands/init/templates/quick-reference-postgres.md +91 -0
- package/src/commands/init/templates/quick-reference.ts +19 -0
- package/src/commands/init/templates/render.ts +20 -0
- package/src/commands/init/templates/tsconfig.ts +35 -0
- package/src/commands/inspect-live-schema.ts +170 -0
- package/src/commands/migration-apply.ts +427 -0
- package/src/commands/migration-new.ts +260 -0
- package/src/commands/migration-plan.ts +519 -0
- package/src/commands/migration-ref.ts +305 -0
- package/src/commands/migration-show.ts +246 -0
- package/src/commands/migration-status.ts +864 -0
- package/src/commands/migration-verify.ts +180 -0
- package/src/config-loader.ts +13 -3
- package/src/control-api/client.ts +205 -183
- package/src/control-api/contract-enrichment.ts +119 -0
- package/src/control-api/errors.ts +9 -0
- package/src/control-api/operations/contract-emit.ts +181 -0
- package/src/control-api/operations/db-init.ts +53 -49
- package/src/control-api/operations/db-update.ts +220 -0
- package/src/control-api/operations/extract-operation-statements.ts +14 -0
- package/src/control-api/operations/extract-sql-ddl.ts +47 -0
- package/src/control-api/operations/migration-apply.ts +191 -0
- package/src/control-api/operations/migration-helpers.ts +49 -0
- package/src/control-api/types.ts +274 -52
- package/src/exports/config-types.ts +4 -3
- package/src/exports/control-api.ts +15 -5
- package/src/load-ts-contract.ts +30 -19
- package/src/utils/cli-errors.ts +14 -8
- package/src/utils/command-helpers.ts +302 -3
- package/src/utils/formatters/emit.ts +67 -0
- package/src/utils/formatters/errors.ts +82 -0
- package/src/utils/formatters/graph-migration-mapper.ts +240 -0
- package/src/utils/formatters/graph-render.ts +1323 -0
- package/src/utils/formatters/graph-types.ts +120 -0
- package/src/utils/formatters/help.ts +380 -0
- package/src/utils/formatters/helpers.ts +28 -0
- package/src/utils/formatters/migrations.ts +346 -0
- package/src/utils/formatters/styled.ts +212 -0
- package/src/utils/formatters/verify.ts +621 -0
- package/src/utils/framework-components.ts +13 -10
- package/src/utils/global-flags.ts +41 -23
- package/src/utils/migration-command-scaffold.ts +184 -0
- package/src/utils/migration-types.ts +12 -0
- package/src/utils/progress-adapter.ts +18 -29
- package/src/utils/result-handler.ts +12 -13
- package/src/utils/shutdown.ts +92 -0
- package/src/utils/suggest-command.ts +31 -0
- package/src/utils/terminal-ui.ts +276 -0
- package/src/utils/validate-contract-deps.ts +49 -0
- package/dist/chunk-AGOTG4L3.js +0 -965
- package/dist/chunk-AGOTG4L3.js.map +0 -1
- package/dist/chunk-HLLI4YL7.js +0 -180
- package/dist/chunk-HLLI4YL7.js.map +0 -1
- package/dist/chunk-HWYQOCAJ.js +0 -47
- package/dist/chunk-HWYQOCAJ.js.map +0 -1
- package/dist/chunk-VG2R7DGF.js +0 -735
- package/dist/chunk-VG2R7DGF.js.map +0 -1
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/contract-emit.d.ts +0 -3
- package/dist/commands/contract-emit.d.ts.map +0 -1
- package/dist/commands/contract-emit.js +0 -10
- package/dist/commands/contract-emit.js.map +0 -1
- package/dist/commands/db-init.d.ts +0 -3
- package/dist/commands/db-init.d.ts.map +0 -1
- package/dist/commands/db-init.js +0 -257
- package/dist/commands/db-init.js.map +0 -1
- package/dist/commands/db-introspect.d.ts +0 -3
- package/dist/commands/db-introspect.d.ts.map +0 -1
- package/dist/commands/db-introspect.js +0 -155
- package/dist/commands/db-introspect.js.map +0 -1
- package/dist/commands/db-schema-verify.d.ts +0 -3
- package/dist/commands/db-schema-verify.d.ts.map +0 -1
- package/dist/commands/db-schema-verify.js +0 -171
- package/dist/commands/db-schema-verify.js.map +0 -1
- package/dist/commands/db-sign.d.ts +0 -3
- package/dist/commands/db-sign.d.ts.map +0 -1
- package/dist/commands/db-sign.js +0 -195
- package/dist/commands/db-sign.js.map +0 -1
- package/dist/commands/db-verify.d.ts +0 -3
- package/dist/commands/db-verify.d.ts.map +0 -1
- package/dist/commands/db-verify.js +0 -193
- package/dist/commands/db-verify.js.map +0 -1
- package/dist/config-loader.d.ts.map +0 -1
- package/dist/config-loader.js +0 -7
- package/dist/config-loader.js.map +0 -1
- package/dist/control-api/client.d.ts +0 -13
- package/dist/control-api/client.d.ts.map +0 -1
- package/dist/control-api/operations/db-init.d.ts +0 -29
- package/dist/control-api/operations/db-init.d.ts.map +0 -1
- package/dist/control-api/types.d.ts +0 -387
- package/dist/control-api/types.d.ts.map +0 -1
- package/dist/exports/config-types.d.ts +0 -3
- package/dist/exports/config-types.d.ts.map +0 -1
- package/dist/exports/config-types.js +0 -6
- package/dist/exports/config-types.js.map +0 -1
- package/dist/exports/control-api.d.ts +0 -13
- package/dist/exports/control-api.d.ts.map +0 -1
- package/dist/exports/control-api.js +0 -7
- package/dist/exports/control-api.js.map +0 -1
- package/dist/exports/index.d.ts +0 -4
- package/dist/exports/index.d.ts.map +0 -1
- package/dist/exports/index.js +0 -176
- package/dist/exports/index.js.map +0 -1
- package/dist/load-ts-contract.d.ts.map +0 -1
- package/dist/utils/cli-errors.d.ts +0 -7
- package/dist/utils/cli-errors.d.ts.map +0 -1
- package/dist/utils/command-helpers.d.ts +0 -12
- package/dist/utils/command-helpers.d.ts.map +0 -1
- package/dist/utils/framework-components.d.ts +0 -70
- package/dist/utils/framework-components.d.ts.map +0 -1
- package/dist/utils/global-flags.d.ts +0 -25
- package/dist/utils/global-flags.d.ts.map +0 -1
- package/dist/utils/output.d.ts +0 -142
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/progress-adapter.d.ts +0 -26
- package/dist/utils/progress-adapter.d.ts.map +0 -1
- package/dist/utils/result-handler.d.ts +0 -15
- package/dist/utils/result-handler.d.ts.map +0 -1
- package/src/commands/db-introspect.ts +0 -227
- package/src/commands/db-schema-verify.ts +0 -238
- package/src/utils/output.ts +0 -1471
package/dist/cli.mjs
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import "./config-loader-C4VXKl8f.mjs";
|
|
4
|
+
import "./cli-errors-BDCYR5ap.mjs";
|
|
5
|
+
import "./framework-components-BAsliT4V.mjs";
|
|
6
|
+
import "./client-DiUkJAeN.mjs";
|
|
7
|
+
import { d as setCommandExamples, g as formatRootHelp, h as formatCommandHelp, m as parseGlobalFlags, u as setCommandDescriptions } from "./result-handler-oK_vA-Fn.mjs";
|
|
8
|
+
import { t as createContractEmitCommand } from "./contract-emit-D2wDXfyo.mjs";
|
|
9
|
+
import { n as installShutdownHandlers } from "./terminal-ui-C5k88MmW.mjs";
|
|
10
|
+
import { t as createContractInferCommand } from "./contract-infer-DozZT511.mjs";
|
|
11
|
+
import "./inspect-live-schema-BYnhztxZ.mjs";
|
|
12
|
+
import "./migrations-DTZBYXm1.mjs";
|
|
13
|
+
import "./migration-command-scaffold-CntCcntR.mjs";
|
|
14
|
+
import { createDbInitCommand } from "./commands/db-init.mjs";
|
|
15
|
+
import "./verify-DlFQ2FOw.mjs";
|
|
16
|
+
import { createDbSchemaCommand } from "./commands/db-schema.mjs";
|
|
17
|
+
import { createDbSignCommand } from "./commands/db-sign.mjs";
|
|
18
|
+
import { createDbUpdateCommand } from "./commands/db-update.mjs";
|
|
19
|
+
import { createDbVerifyCommand } from "./commands/db-verify.mjs";
|
|
20
|
+
import { createMigrationApplyCommand } from "./commands/migration-apply.mjs";
|
|
21
|
+
import { createMigrationNewCommand } from "./commands/migration-new.mjs";
|
|
22
|
+
import { createMigrationPlanCommand } from "./commands/migration-plan.mjs";
|
|
23
|
+
import { createMigrationRefCommand } from "./commands/migration-ref.mjs";
|
|
24
|
+
import { createMigrationShowCommand } from "./commands/migration-show.mjs";
|
|
25
|
+
import { t as createMigrationStatusCommand } from "./migration-status-CJANY4yr.mjs";
|
|
26
|
+
import { createMigrationVerifyCommand } from "./commands/migration-verify.mjs";
|
|
27
|
+
import { Command } from "commander";
|
|
28
|
+
import { distance } from "closest-match";
|
|
29
|
+
|
|
30
|
+
//#region src/commands/init/index.ts
|
|
31
|
+
function createInitCommand() {
|
|
32
|
+
const command = new Command("init");
|
|
33
|
+
setCommandDescriptions(command, "Initialize a new Prisma Next project", "Scaffolds config, schema, and runtime files, installs dependencies,\nand emits the contract. Gets you from zero to typed queries in one step.");
|
|
34
|
+
setCommandExamples(command, ["prisma-next init", "prisma-next init --no-install"]);
|
|
35
|
+
command.option("--no-install", "Skip dependency installation and contract emission").action(async (options) => {
|
|
36
|
+
const { runInit } = await import("./init-6Pvm_esG.mjs");
|
|
37
|
+
await runInit(process.cwd(), { noInstall: !options.install });
|
|
38
|
+
});
|
|
39
|
+
return command;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/utils/suggest-command.ts
|
|
44
|
+
/**
|
|
45
|
+
* Suggests similar command names for a mistyped input.
|
|
46
|
+
*
|
|
47
|
+
* Uses Levenshtein distance to find close matches. Only suggests commands
|
|
48
|
+
* within a reasonable distance threshold (40% of the input length, minimum 2).
|
|
49
|
+
* Returns up to 3 suggestions in case of ties.
|
|
50
|
+
*
|
|
51
|
+
* @returns Array of suggested command names (empty if nothing is close enough).
|
|
52
|
+
*/
|
|
53
|
+
function suggestCommands(input, candidates) {
|
|
54
|
+
if (candidates.length === 0) return [];
|
|
55
|
+
const maxDistance = Math.max(2, Math.ceil(input.length * .4));
|
|
56
|
+
const scored = candidates.map((name) => ({
|
|
57
|
+
name,
|
|
58
|
+
dist: distance(input, name)
|
|
59
|
+
})).filter((entry) => entry.dist <= maxDistance).sort((a, b) => a.dist - b.dist);
|
|
60
|
+
if (scored.length === 0) return [];
|
|
61
|
+
const bestDist = scored[0].dist;
|
|
62
|
+
return scored.filter((entry) => entry.dist === bestDist).slice(0, 3).map((entry) => entry.name);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/cli.ts
|
|
67
|
+
installShutdownHandlers();
|
|
68
|
+
/**
|
|
69
|
+
* Formats the "Did you mean ...?" hint for an unknown command.
|
|
70
|
+
*/
|
|
71
|
+
function formatSuggestion(input, candidates) {
|
|
72
|
+
const suggestions = suggestCommands(input, candidates.map((c) => c));
|
|
73
|
+
if (suggestions.length === 0) return "";
|
|
74
|
+
if (suggestions.length === 1) return `\nDid you mean ${suggestions[0]}?\n`;
|
|
75
|
+
return `\nDid you mean one of these?\n${suggestions.map((s) => ` ${s}`).join("\n")}\n`;
|
|
76
|
+
}
|
|
77
|
+
const program = new Command();
|
|
78
|
+
program.name("prisma-next").description("Prisma Next CLI").version("0.0.1");
|
|
79
|
+
const versionOption = program.options.find((opt) => opt.flags.includes("--version"));
|
|
80
|
+
if (versionOption) versionOption.description = "Output the version number";
|
|
81
|
+
program.configureOutput({
|
|
82
|
+
writeErr: () => {},
|
|
83
|
+
writeOut: () => {}
|
|
84
|
+
});
|
|
85
|
+
const rootHelpFormatter = (cmd) => {
|
|
86
|
+
return formatRootHelp({
|
|
87
|
+
program: cmd,
|
|
88
|
+
flags: parseGlobalFlags({})
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
program.configureHelp({
|
|
92
|
+
formatHelp: rootHelpFormatter,
|
|
93
|
+
subcommandDescription: () => ""
|
|
94
|
+
});
|
|
95
|
+
program.exitOverride((err) => {
|
|
96
|
+
if (err) {
|
|
97
|
+
const errorCode = err.code;
|
|
98
|
+
const errorMessage = String(err.message ?? "");
|
|
99
|
+
const errorName = err.name ?? "";
|
|
100
|
+
if (errorCode === "commander.unknownCommand" || errorCode === "commander.unknownArgument" || errorName === "CommanderError" && (errorMessage.includes("unknown command") || errorMessage.includes("unknown argument"))) {
|
|
101
|
+
const flags = parseGlobalFlags({});
|
|
102
|
+
const match = errorMessage.match(/unknown command ['"]([^'"]+)['"]/);
|
|
103
|
+
const commandName = match ? match[1] : process.argv[3] || process.argv[2] || "unknown";
|
|
104
|
+
const firstArg = process.argv[2];
|
|
105
|
+
const parentCommand = firstArg ? program.commands.find((cmd) => cmd.name() === firstArg) : void 0;
|
|
106
|
+
if (parentCommand && commandName !== firstArg) {
|
|
107
|
+
const subNames = parentCommand.commands.map((c) => c.name());
|
|
108
|
+
process.stderr.write(`Unknown command: ${commandName}${formatSuggestion(commandName, subNames)}\n`);
|
|
109
|
+
const helpText = formatCommandHelp({
|
|
110
|
+
command: parentCommand,
|
|
111
|
+
flags
|
|
112
|
+
});
|
|
113
|
+
process.stderr.write(`${helpText}\n`);
|
|
114
|
+
} else {
|
|
115
|
+
const topNames = program.commands.map((c) => c.name());
|
|
116
|
+
process.stderr.write(`Unknown command: ${commandName}${formatSuggestion(commandName, topNames)}\n`);
|
|
117
|
+
const helpText = formatRootHelp({
|
|
118
|
+
program,
|
|
119
|
+
flags
|
|
120
|
+
});
|
|
121
|
+
process.stderr.write(`${helpText}\n`);
|
|
122
|
+
}
|
|
123
|
+
process.exit(2);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (errorCode === "commander.help" || errorCode === "commander.helpDisplayed" || errorCode === "outputHelp" || errorMessage === "(outputHelp)" || errorMessage.includes("outputHelp") || errorName === "CommanderError" && errorMessage.includes("outputHelp")) {
|
|
127
|
+
process.exit(0);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (errorCode === "commander.missingArgument" || errorCode === "commander.missingMandatoryOptionValue" || errorName === "CommanderError" && (errorMessage.includes("missing") || errorMessage.includes("required"))) {
|
|
131
|
+
process.exit(2);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
process.stderr.write(`Unhandled error: ${err.message}\n`);
|
|
135
|
+
if (err.stack) process.stderr.write(`${err.stack}\n`);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
process.exit(0);
|
|
139
|
+
});
|
|
140
|
+
const contractCommand = new Command("contract");
|
|
141
|
+
setCommandDescriptions(contractCommand, "Contract management commands", "Define and emit your application data contract. The contract describes your schema as a\ndeclarative data structure that can be signed and verified against your database.");
|
|
142
|
+
contractCommand.configureHelp({
|
|
143
|
+
formatHelp: (cmd) => {
|
|
144
|
+
return formatCommandHelp({
|
|
145
|
+
command: cmd,
|
|
146
|
+
flags: parseGlobalFlags({})
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
subcommandDescription: () => ""
|
|
150
|
+
});
|
|
151
|
+
const contractEmitCommand = createContractEmitCommand();
|
|
152
|
+
contractCommand.addCommand(contractEmitCommand);
|
|
153
|
+
const contractInferCommand = createContractInferCommand();
|
|
154
|
+
contractCommand.addCommand(contractInferCommand);
|
|
155
|
+
program.addCommand(contractCommand);
|
|
156
|
+
const dbCommand = new Command("db");
|
|
157
|
+
setCommandDescriptions(dbCommand, "Database management commands", "Verify and sign your database with your contract. Ensure your database schema matches\nyour contract, and sign it to record the contract hash for future verification.");
|
|
158
|
+
dbCommand.configureHelp({
|
|
159
|
+
formatHelp: (cmd) => {
|
|
160
|
+
return formatCommandHelp({
|
|
161
|
+
command: cmd,
|
|
162
|
+
flags: parseGlobalFlags({})
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
subcommandDescription: () => ""
|
|
166
|
+
});
|
|
167
|
+
const dbVerifyCommand = createDbVerifyCommand();
|
|
168
|
+
dbCommand.addCommand(dbVerifyCommand);
|
|
169
|
+
const dbInitCommand = createDbInitCommand();
|
|
170
|
+
dbCommand.addCommand(dbInitCommand);
|
|
171
|
+
const dbUpdateCommand = createDbUpdateCommand();
|
|
172
|
+
dbCommand.addCommand(dbUpdateCommand);
|
|
173
|
+
const dbSchemaCommand = createDbSchemaCommand();
|
|
174
|
+
dbCommand.addCommand(dbSchemaCommand);
|
|
175
|
+
const dbSignCommand = createDbSignCommand();
|
|
176
|
+
dbCommand.addCommand(dbSignCommand);
|
|
177
|
+
program.addCommand(dbCommand);
|
|
178
|
+
const migrationCommand = new Command("migration");
|
|
179
|
+
setCommandDescriptions(migrationCommand, "On-disk migration management commands", "Plan, apply, verify, and scaffold on-disk migration packages. Migrations are\ncontract-to-contract edges stored as versioned directories under migrations/.");
|
|
180
|
+
migrationCommand.configureHelp({
|
|
181
|
+
formatHelp: (cmd) => {
|
|
182
|
+
return formatCommandHelp({
|
|
183
|
+
command: cmd,
|
|
184
|
+
flags: parseGlobalFlags({})
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
subcommandDescription: () => ""
|
|
188
|
+
});
|
|
189
|
+
const migrationPlanCommand = createMigrationPlanCommand();
|
|
190
|
+
migrationCommand.addCommand(migrationPlanCommand);
|
|
191
|
+
const migrationNewCommand = createMigrationNewCommand();
|
|
192
|
+
migrationCommand.addCommand(migrationNewCommand);
|
|
193
|
+
const migrationShowCommand = createMigrationShowCommand();
|
|
194
|
+
migrationCommand.addCommand(migrationShowCommand);
|
|
195
|
+
const migrationStatusCommand = createMigrationStatusCommand();
|
|
196
|
+
migrationCommand.addCommand(migrationStatusCommand);
|
|
197
|
+
const migrationVerifyCommand = createMigrationVerifyCommand();
|
|
198
|
+
migrationCommand.addCommand(migrationVerifyCommand);
|
|
199
|
+
const migrationApplyCommand = createMigrationApplyCommand();
|
|
200
|
+
migrationCommand.addCommand(migrationApplyCommand);
|
|
201
|
+
const migrationRefCommand = createMigrationRefCommand();
|
|
202
|
+
migrationCommand.addCommand(migrationRefCommand);
|
|
203
|
+
program.addCommand(migrationCommand);
|
|
204
|
+
const initCommand = createInitCommand();
|
|
205
|
+
program.addCommand(initCommand);
|
|
206
|
+
const helpCommand = new Command("help").description("Show usage instructions").configureHelp({ formatHelp: (cmd) => {
|
|
207
|
+
return formatCommandHelp({
|
|
208
|
+
command: cmd,
|
|
209
|
+
flags: parseGlobalFlags({})
|
|
210
|
+
});
|
|
211
|
+
} }).action(() => {
|
|
212
|
+
const helpText = formatRootHelp({
|
|
213
|
+
program,
|
|
214
|
+
flags: parseGlobalFlags({})
|
|
215
|
+
});
|
|
216
|
+
process.stderr.write(`${helpText}\n`);
|
|
217
|
+
process.exit(0);
|
|
218
|
+
});
|
|
219
|
+
program.addCommand(helpCommand);
|
|
220
|
+
program.action(() => {
|
|
221
|
+
const helpText = formatRootHelp({
|
|
222
|
+
program,
|
|
223
|
+
flags: parseGlobalFlags({})
|
|
224
|
+
});
|
|
225
|
+
process.stderr.write(`${helpText}\n`);
|
|
226
|
+
process.exit(0);
|
|
227
|
+
});
|
|
228
|
+
const args = process.argv.slice(2);
|
|
229
|
+
if (args.length > 0) {
|
|
230
|
+
const commandName = args[0];
|
|
231
|
+
if (commandName === "--version" || commandName === "-V") {
|
|
232
|
+
process.stdout.write(`${program.version()}\n`);
|
|
233
|
+
process.exit(0);
|
|
234
|
+
}
|
|
235
|
+
if (!(commandName === "--help" || commandName === "-h")) {
|
|
236
|
+
const command = program.commands.find((cmd) => cmd.name() === commandName);
|
|
237
|
+
if (!command) {
|
|
238
|
+
const flags = parseGlobalFlags({});
|
|
239
|
+
const topNames = program.commands.map((c) => c.name());
|
|
240
|
+
process.stderr.write(`Unknown command: ${commandName}${formatSuggestion(commandName, topNames)}\n`);
|
|
241
|
+
const helpText = formatRootHelp({
|
|
242
|
+
program,
|
|
243
|
+
flags
|
|
244
|
+
});
|
|
245
|
+
process.stderr.write(`${helpText}\n`);
|
|
246
|
+
process.exit(2);
|
|
247
|
+
} else if (command.commands.length > 0 && args.length === 1) {
|
|
248
|
+
const helpText = formatCommandHelp({
|
|
249
|
+
command,
|
|
250
|
+
flags: parseGlobalFlags({})
|
|
251
|
+
});
|
|
252
|
+
process.stderr.write(`${helpText}\n`);
|
|
253
|
+
process.exit(0);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
program.parse();
|
|
258
|
+
|
|
259
|
+
//#endregion
|
|
260
|
+
export { };
|
|
261
|
+
//# sourceMappingURL=cli.mjs.map
|
package/dist/cli.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/commands/init/index.ts","../src/utils/suggest-command.ts","../src/cli.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { setCommandDescriptions, setCommandExamples } from '../../utils/command-helpers';\n\nexport function createInitCommand(): Command {\n const command = new Command('init');\n setCommandDescriptions(\n command,\n 'Initialize a new Prisma Next project',\n 'Scaffolds config, schema, and runtime files, installs dependencies,\\n' +\n 'and emits the contract. Gets you from zero to typed queries in one step.',\n );\n setCommandExamples(command, ['prisma-next init', 'prisma-next init --no-install']);\n command\n .option('--no-install', 'Skip dependency installation and contract emission')\n .action(async (options: { readonly install?: boolean }) => {\n const { runInit } = await import('./init');\n await runInit(process.cwd(), { noInstall: !options.install });\n });\n\n return command;\n}\n","import { distance } from 'closest-match';\n\n/**\n * Suggests similar command names for a mistyped input.\n *\n * Uses Levenshtein distance to find close matches. Only suggests commands\n * within a reasonable distance threshold (40% of the input length, minimum 2).\n * Returns up to 3 suggestions in case of ties.\n *\n * @returns Array of suggested command names (empty if nothing is close enough).\n */\nexport function suggestCommands(input: string, candidates: readonly string[]): string[] {\n if (candidates.length === 0) return [];\n\n // Threshold: at most 40% of the input length (min 2) to avoid absurd suggestions\n const maxDistance = Math.max(2, Math.ceil(input.length * 0.4));\n\n const scored = candidates\n .map((name) => ({ name, dist: distance(input, name) }))\n .filter((entry) => entry.dist <= maxDistance)\n .sort((a, b) => a.dist - b.dist);\n\n if (scored.length === 0) return [];\n\n // Take the best distance, then include ties (up to 3)\n const bestDist = scored[0]!.dist;\n return scored\n .filter((entry) => entry.dist === bestDist)\n .slice(0, 3)\n .map((entry) => entry.name);\n}\n","import { Command } from 'commander';\nimport { createContractEmitCommand } from './commands/contract-emit';\nimport { createContractInferCommand } from './commands/contract-infer';\nimport { createInitCommand } from './commands/init';\nimport { installShutdownHandlers } from './utils/shutdown';\n\n// Install SIGINT/SIGTERM handlers before anything else\ninstallShutdownHandlers();\n\nimport { createDbInitCommand } from './commands/db-init';\nimport { createDbSchemaCommand } from './commands/db-schema';\nimport { createDbSignCommand } from './commands/db-sign';\nimport { createDbUpdateCommand } from './commands/db-update';\nimport { createDbVerifyCommand } from './commands/db-verify';\nimport { createMigrationApplyCommand } from './commands/migration-apply';\nimport { createMigrationNewCommand } from './commands/migration-new';\nimport { createMigrationPlanCommand } from './commands/migration-plan';\nimport { createMigrationRefCommand } from './commands/migration-ref';\nimport { createMigrationShowCommand } from './commands/migration-show';\nimport { createMigrationStatusCommand } from './commands/migration-status';\nimport { createMigrationVerifyCommand } from './commands/migration-verify';\nimport { setCommandDescriptions } from './utils/command-helpers';\nimport { formatCommandHelp, formatRootHelp } from './utils/formatters/help';\nimport { parseGlobalFlags } from './utils/global-flags';\nimport { suggestCommands } from './utils/suggest-command';\n\n/**\n * Formats the \"Did you mean ...?\" hint for an unknown command.\n */\nfunction formatSuggestion(input: string, candidates: readonly string[]): string {\n const suggestions = suggestCommands(\n input,\n candidates.map((c) => c),\n );\n if (suggestions.length === 0) return '';\n if (suggestions.length === 1) return `\\nDid you mean ${suggestions[0]}?\\n`;\n return `\\nDid you mean one of these?\\n${suggestions.map((s) => ` ${s}`).join('\\n')}\\n`;\n}\n\nconst program = new Command();\n\nprogram.name('prisma-next').description('Prisma Next CLI').version('0.0.1');\n\n// Override version option description to match capitalization style\nconst versionOption = program.options.find((opt) => opt.flags.includes('--version'));\nif (versionOption) {\n versionOption.description = 'Output the version number';\n}\n\nprogram.configureOutput({\n writeErr: () => {\n // Suppress all default error output - we handle errors in exitOverride\n },\n writeOut: () => {\n // Suppress all default output - our custom formatters handle everything\n },\n});\n\n// Customize root help output to use our styled format\nconst rootHelpFormatter = (cmd: Command) => {\n const flags = parseGlobalFlags({});\n return formatRootHelp({ program: cmd, flags });\n};\n\nprogram.configureHelp({\n formatHelp: rootHelpFormatter,\n subcommandDescription: () => '',\n});\n\n// Override exit to handle unhandled errors (fail fast cases)\n// Commands handle structured errors themselves via process.exit()\nprogram.exitOverride((err) => {\n if (err) {\n const errorCode = (err as { code?: string }).code;\n const errorMessage = String(err.message ?? '');\n const errorName = err.name ?? '';\n\n // Unknown command/argument → exit 2 (CLI usage error)\n const isUnknownCommandError =\n errorCode === 'commander.unknownCommand' ||\n errorCode === 'commander.unknownArgument' ||\n (errorName === 'CommanderError' &&\n (errorMessage.includes('unknown command') || errorMessage.includes('unknown argument')));\n if (isUnknownCommandError) {\n const flags = parseGlobalFlags({});\n const match = errorMessage.match(/unknown command ['\"]([^'\"]+)['\"]/);\n const commandName = match ? match[1] : process.argv[3] || process.argv[2] || 'unknown';\n\n const firstArg = process.argv[2];\n const parentCommand = firstArg\n ? program.commands.find((cmd) => cmd.name() === firstArg)\n : undefined;\n\n if (parentCommand && commandName !== firstArg) {\n const subNames = parentCommand.commands.map((c) => c.name());\n process.stderr.write(\n `Unknown command: ${commandName}${formatSuggestion(commandName!, subNames)}\\n`,\n );\n const helpText = formatCommandHelp({ command: parentCommand, flags });\n process.stderr.write(`${helpText}\\n`);\n } else {\n const topNames = program.commands.map((c) => c.name());\n process.stderr.write(\n `Unknown command: ${commandName}${formatSuggestion(commandName!, topNames)}\\n`,\n );\n const helpText = formatRootHelp({ program, flags });\n process.stderr.write(`${helpText}\\n`);\n }\n process.exit(2);\n return;\n }\n\n // Help requests → exit 0\n const isHelpError =\n errorCode === 'commander.help' ||\n errorCode === 'commander.helpDisplayed' ||\n errorCode === 'outputHelp' ||\n errorMessage === '(outputHelp)' ||\n errorMessage.includes('outputHelp') ||\n (errorName === 'CommanderError' && errorMessage.includes('outputHelp'));\n if (isHelpError) {\n process.exit(0);\n return;\n }\n\n // Missing required arguments → exit 2 (CLI usage error)\n const isMissingArgumentError =\n errorCode === 'commander.missingArgument' ||\n errorCode === 'commander.missingMandatoryOptionValue' ||\n (errorName === 'CommanderError' &&\n (errorMessage.includes('missing') || errorMessage.includes('required')));\n if (isMissingArgumentError) {\n process.exit(2);\n return;\n }\n\n // Unhandled error → exit 1\n process.stderr.write(`Unhandled error: ${err.message}\\n`);\n if (err.stack) {\n process.stderr.write(`${err.stack}\\n`);\n }\n process.exit(1);\n }\n process.exit(0);\n});\n\n// Register contract subcommand\nconst contractCommand = new Command('contract');\nsetCommandDescriptions(\n contractCommand,\n 'Contract management commands',\n 'Define and emit your application data contract. The contract describes your schema as a\\n' +\n 'declarative data structure that can be signed and verified against your database.',\n);\ncontractCommand.configureHelp({\n formatHelp: (cmd) => {\n const flags = parseGlobalFlags({});\n return formatCommandHelp({ command: cmd, flags });\n },\n subcommandDescription: () => '',\n});\n\n// Add emit subcommand to contract\nconst contractEmitCommand = createContractEmitCommand();\ncontractCommand.addCommand(contractEmitCommand);\n\n// Add infer subcommand to contract\nconst contractInferCommand = createContractInferCommand();\ncontractCommand.addCommand(contractInferCommand);\n\n// Register contract command\nprogram.addCommand(contractCommand);\n\n// Register db subcommand\nconst dbCommand = new Command('db');\nsetCommandDescriptions(\n dbCommand,\n 'Database management commands',\n 'Verify and sign your database with your contract. Ensure your database schema matches\\n' +\n 'your contract, and sign it to record the contract hash for future verification.',\n);\ndbCommand.configureHelp({\n formatHelp: (cmd) => {\n const flags = parseGlobalFlags({});\n return formatCommandHelp({ command: cmd, flags });\n },\n subcommandDescription: () => '',\n});\n\n// Add verify subcommand to db\nconst dbVerifyCommand = createDbVerifyCommand();\ndbCommand.addCommand(dbVerifyCommand);\n\n// Add init subcommand to db\nconst dbInitCommand = createDbInitCommand();\ndbCommand.addCommand(dbInitCommand);\n\n// Add update subcommand to db\nconst dbUpdateCommand = createDbUpdateCommand();\ndbCommand.addCommand(dbUpdateCommand);\n\n// Add schema subcommand to db\nconst dbSchemaCommand = createDbSchemaCommand();\ndbCommand.addCommand(dbSchemaCommand);\n\n// Add sign subcommand to db\nconst dbSignCommand = createDbSignCommand();\ndbCommand.addCommand(dbSignCommand);\n\n// Register db command\nprogram.addCommand(dbCommand);\n\n// Register migration subcommand\nconst migrationCommand = new Command('migration');\nsetCommandDescriptions(\n migrationCommand,\n 'On-disk migration management commands',\n 'Plan, apply, verify, and scaffold on-disk migration packages. Migrations are\\n' +\n 'contract-to-contract edges stored as versioned directories under migrations/.',\n);\nmigrationCommand.configureHelp({\n formatHelp: (cmd) => {\n const flags = parseGlobalFlags({});\n return formatCommandHelp({ command: cmd, flags });\n },\n subcommandDescription: () => '',\n});\n\nconst migrationPlanCommand = createMigrationPlanCommand();\nmigrationCommand.addCommand(migrationPlanCommand);\n\nconst migrationNewCommand = createMigrationNewCommand();\nmigrationCommand.addCommand(migrationNewCommand);\n\nconst migrationShowCommand = createMigrationShowCommand();\nmigrationCommand.addCommand(migrationShowCommand);\n\nconst migrationStatusCommand = createMigrationStatusCommand();\nmigrationCommand.addCommand(migrationStatusCommand);\n\nconst migrationVerifyCommand = createMigrationVerifyCommand();\nmigrationCommand.addCommand(migrationVerifyCommand);\n\nconst migrationApplyCommand = createMigrationApplyCommand();\nmigrationCommand.addCommand(migrationApplyCommand);\n\nconst migrationRefCommand = createMigrationRefCommand();\nmigrationCommand.addCommand(migrationRefCommand);\n\nprogram.addCommand(migrationCommand);\n\n// Register init command (top-level, not nested)\nconst initCommand = createInitCommand();\nprogram.addCommand(initCommand);\n\n// Create help command\nconst helpCommand = new Command('help')\n .description('Show usage instructions')\n .configureHelp({\n formatHelp: (cmd) => {\n const flags = parseGlobalFlags({});\n return formatCommandHelp({ command: cmd, flags });\n },\n })\n .action(() => {\n const flags = parseGlobalFlags({});\n const helpText = formatRootHelp({ program, flags });\n // Help is decoration → stderr\n process.stderr.write(`${helpText}\\n`);\n process.exit(0);\n });\n\nprogram.addCommand(helpCommand);\n\n// Set help as the default action when no command is provided\nprogram.action(() => {\n const flags = parseGlobalFlags({});\n const helpText = formatRootHelp({ program, flags });\n process.stderr.write(`${helpText}\\n`);\n process.exit(0);\n});\n\n// Check if a command was invoked with no arguments (just the command name)\n// or if an unrecognized command was provided\nconst args = process.argv.slice(2);\nif (args.length > 0) {\n const commandName = args[0];\n // Handle version option explicitly since we suppress default output\n if (commandName === '--version' || commandName === '-V') {\n // Version is data → stdout\n process.stdout.write(`${program.version()}\\n`);\n process.exit(0);\n }\n // Skip command check for global options like --help, -h\n const isGlobalOption = commandName === '--help' || commandName === '-h';\n if (!isGlobalOption) {\n // Check if this is a recognized command\n const command = program.commands.find((cmd) => cmd.name() === commandName);\n\n if (!command) {\n // Unrecognized command → exit 2 (CLI usage error)\n const flags = parseGlobalFlags({});\n const topNames = program.commands.map((c) => c.name());\n process.stderr.write(\n `Unknown command: ${commandName}${formatSuggestion(commandName!, topNames)}\\n`,\n );\n const helpText = formatRootHelp({ program, flags });\n process.stderr.write(`${helpText}\\n`);\n process.exit(2);\n } else if (command.commands.length > 0 && args.length === 1) {\n // Parent command called with no subcommand - show help and exit with 0\n const flags = parseGlobalFlags({});\n const helpText = formatCommandHelp({ command, flags });\n process.stderr.write(`${helpText}\\n`);\n process.exit(0);\n }\n }\n}\n\nprogram.parse();\n"],"mappings":"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"}
|