@memberjunction/cli 6.1.0-edge.3 → 6.1.0-edge.5
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/README.md +81 -0
- package/dist/commands/ai/actions/list.d.ts +2 -1
- package/dist/commands/ai/actions/list.d.ts.map +1 -1
- package/dist/commands/ai/actions/list.js +12 -3
- package/dist/commands/ai/actions/list.js.map +1 -1
- package/dist/commands/ai/actions/run.d.ts +7 -6
- package/dist/commands/ai/actions/run.d.ts.map +1 -1
- package/dist/commands/ai/actions/run.js +15 -16
- package/dist/commands/ai/actions/run.js.map +1 -1
- package/dist/commands/ai/agents/list.d.ts +2 -1
- package/dist/commands/ai/agents/list.d.ts.map +1 -1
- package/dist/commands/ai/agents/list.js +12 -3
- package/dist/commands/ai/agents/list.js.map +1 -1
- package/dist/commands/ai/agents/run.d.ts +7 -6
- package/dist/commands/ai/agents/run.d.ts.map +1 -1
- package/dist/commands/ai/agents/run.js +27 -5
- package/dist/commands/ai/agents/run.js.map +1 -1
- package/dist/commands/ai/audit/agent-run.d.ts +15 -14
- package/dist/commands/ai/audit/agent-run.d.ts.map +1 -1
- package/dist/commands/ai/audit/agent-run.js +18 -6
- package/dist/commands/ai/audit/agent-run.js.map +1 -1
- package/dist/commands/ai/prompts/run.d.ts +10 -9
- package/dist/commands/ai/prompts/run.d.ts.map +1 -1
- package/dist/commands/ai/prompts/run.js +12 -3
- package/dist/commands/ai/prompts/run.js.map +1 -1
- package/dist/commands/ai/usage.d.ts +7 -0
- package/dist/commands/ai/usage.d.ts.map +1 -0
- package/dist/commands/ai/usage.js +10 -0
- package/dist/commands/ai/usage.js.map +1 -0
- package/dist/commands/app/check-updates.d.ts.map +1 -1
- package/dist/commands/app/check-updates.js +55 -17
- package/dist/commands/app/check-updates.js.map +1 -1
- package/dist/commands/app/remove.d.ts.map +1 -1
- package/dist/commands/app/remove.js +12 -4
- package/dist/commands/app/remove.js.map +1 -1
- package/dist/commands/app/usage.d.ts +7 -0
- package/dist/commands/app/usage.d.ts.map +1 -0
- package/dist/commands/app/usage.js +10 -0
- package/dist/commands/app/usage.js.map +1 -0
- package/dist/commands/artifacts/usage.d.ts +7 -0
- package/dist/commands/artifacts/usage.d.ts.map +1 -0
- package/dist/commands/artifacts/usage.js +10 -0
- package/dist/commands/artifacts/usage.js.map +1 -0
- package/dist/commands/baseline/usage.d.ts +7 -0
- package/dist/commands/baseline/usage.d.ts.map +1 -0
- package/dist/commands/baseline/usage.js +10 -0
- package/dist/commands/baseline/usage.js.map +1 -0
- package/dist/commands/bump/usage.d.ts +7 -0
- package/dist/commands/bump/usage.d.ts.map +1 -0
- package/dist/commands/bump/usage.js +10 -0
- package/dist/commands/bump/usage.js.map +1 -0
- package/dist/commands/bundle/usage.d.ts +7 -0
- package/dist/commands/bundle/usage.d.ts.map +1 -0
- package/dist/commands/bundle/usage.js +10 -0
- package/dist/commands/bundle/usage.js.map +1 -0
- package/dist/commands/clean/usage.d.ts +7 -0
- package/dist/commands/clean/usage.d.ts.map +1 -0
- package/dist/commands/clean/usage.js +10 -0
- package/dist/commands/clean/usage.js.map +1 -0
- package/dist/commands/dbdoc/usage.d.ts +7 -0
- package/dist/commands/dbdoc/usage.d.ts.map +1 -0
- package/dist/commands/dbdoc/usage.js +10 -0
- package/dist/commands/dbdoc/usage.js.map +1 -0
- package/dist/commands/dev/workspace/index.d.ts.map +1 -1
- package/dist/commands/dev/workspace/index.js +7 -2
- package/dist/commands/dev/workspace/index.js.map +1 -1
- package/dist/commands/doctor/usage.d.ts +7 -0
- package/dist/commands/doctor/usage.d.ts.map +1 -0
- package/dist/commands/doctor/usage.js +10 -0
- package/dist/commands/doctor/usage.js.map +1 -0
- package/dist/commands/install/index.d.ts +20 -0
- package/dist/commands/install/index.d.ts.map +1 -1
- package/dist/commands/install/index.js +80 -10
- package/dist/commands/install/index.js.map +1 -1
- package/dist/commands/install/usage.d.ts +7 -0
- package/dist/commands/install/usage.d.ts.map +1 -0
- package/dist/commands/install/usage.js +10 -0
- package/dist/commands/install/usage.js.map +1 -0
- package/dist/commands/migrate/convert.d.ts +26 -0
- package/dist/commands/migrate/convert.d.ts.map +1 -1
- package/dist/commands/migrate/convert.js +115 -13
- package/dist/commands/migrate/convert.js.map +1 -1
- package/dist/commands/migrate/index.d.ts +9 -0
- package/dist/commands/migrate/index.d.ts.map +1 -1
- package/dist/commands/migrate/index.js +41 -1
- package/dist/commands/migrate/index.js.map +1 -1
- package/dist/commands/migrate/rebake.d.ts +1 -0
- package/dist/commands/migrate/rebake.d.ts.map +1 -1
- package/dist/commands/migrate/rebake.js +16 -6
- package/dist/commands/migrate/rebake.js.map +1 -1
- package/dist/commands/migrate/usage.d.ts +7 -0
- package/dist/commands/migrate/usage.d.ts.map +1 -0
- package/dist/commands/migrate/usage.js +10 -0
- package/dist/commands/migrate/usage.js.map +1 -0
- package/dist/commands/plugin/usage.d.ts +7 -0
- package/dist/commands/plugin/usage.d.ts.map +1 -0
- package/dist/commands/plugin/usage.js +10 -0
- package/dist/commands/plugin/usage.js.map +1 -0
- package/dist/commands/querygen/usage.d.ts +7 -0
- package/dist/commands/querygen/usage.d.ts.map +1 -0
- package/dist/commands/querygen/usage.js +10 -0
- package/dist/commands/querygen/usage.js.map +1 -0
- package/dist/commands/sql-audit/usage.d.ts +7 -0
- package/dist/commands/sql-audit/usage.d.ts.map +1 -0
- package/dist/commands/sql-audit/usage.js +10 -0
- package/dist/commands/sql-audit/usage.js.map +1 -0
- package/dist/commands/sql-convert/usage.d.ts +7 -0
- package/dist/commands/sql-convert/usage.d.ts.map +1 -0
- package/dist/commands/sql-convert/usage.js +10 -0
- package/dist/commands/sql-convert/usage.js.map +1 -0
- package/dist/commands/standards/usage.d.ts +7 -0
- package/dist/commands/standards/usage.d.ts.map +1 -0
- package/dist/commands/standards/usage.js +10 -0
- package/dist/commands/standards/usage.js.map +1 -0
- package/dist/commands/sync/file-reset.d.ts +6 -6
- package/dist/commands/sync/file-reset.d.ts.map +1 -1
- package/dist/commands/sync/file-reset.js +151 -127
- package/dist/commands/sync/file-reset.js.map +1 -1
- package/dist/commands/sync/init.d.ts +10 -1
- package/dist/commands/sync/init.d.ts.map +1 -1
- package/dist/commands/sync/init.js +127 -78
- package/dist/commands/sync/init.js.map +1 -1
- package/dist/commands/test/compare.d.ts +11 -11
- package/dist/commands/test/compare.d.ts.map +1 -1
- package/dist/commands/test/compare.js +8 -7
- package/dist/commands/test/compare.js.map +1 -1
- package/dist/commands/test/history.d.ts +7 -7
- package/dist/commands/test/history.d.ts.map +1 -1
- package/dist/commands/test/history.js +8 -7
- package/dist/commands/test/history.js.map +1 -1
- package/dist/commands/test/list.d.ts +8 -8
- package/dist/commands/test/list.d.ts.map +1 -1
- package/dist/commands/test/list.js +8 -7
- package/dist/commands/test/list.js.map +1 -1
- package/dist/commands/test/regression/compare.d.ts.map +1 -1
- package/dist/commands/test/regression/compare.js +5 -7
- package/dist/commands/test/regression/compare.js.map +1 -1
- package/dist/commands/test/run.d.ts +9 -9
- package/dist/commands/test/run.d.ts.map +1 -1
- package/dist/commands/test/run.js +8 -7
- package/dist/commands/test/run.js.map +1 -1
- package/dist/commands/test/suite.d.ts +11 -11
- package/dist/commands/test/suite.d.ts.map +1 -1
- package/dist/commands/test/suite.js +8 -7
- package/dist/commands/test/suite.js.map +1 -1
- package/dist/commands/test/usage.d.ts +7 -0
- package/dist/commands/test/usage.d.ts.map +1 -0
- package/dist/commands/test/usage.js +10 -0
- package/dist/commands/test/usage.js.map +1 -0
- package/dist/commands/test/validate.d.ts +7 -7
- package/dist/commands/test/validate.d.ts.map +1 -1
- package/dist/commands/test/validate.js +8 -7
- package/dist/commands/test/validate.js.map +1 -1
- package/dist/commands/translate-sql/usage.d.ts +7 -0
- package/dist/commands/translate-sql/usage.d.ts.map +1 -0
- package/dist/commands/translate-sql/usage.js +10 -0
- package/dist/commands/translate-sql/usage.js.map +1 -0
- package/dist/commands/update/usage.d.ts +7 -0
- package/dist/commands/update/usage.d.ts.map +1 -0
- package/dist/commands/update/usage.js +10 -0
- package/dist/commands/update/usage.js.map +1 -0
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +9 -4
- package/dist/commands/usage.js.map +1 -1
- package/dist/hooks/prerun.d.ts.map +1 -1
- package/dist/hooks/prerun.js +63 -30
- package/dist/hooks/prerun.js.map +1 -1
- package/dist/lib/cli-plugins.d.ts +8 -1
- package/dist/lib/cli-plugins.d.ts.map +1 -1
- package/dist/lib/cli-plugins.js +17 -1
- package/dist/lib/cli-plugins.js.map +1 -1
- package/dist/lib/derived-usage.d.ts +68 -0
- package/dist/lib/derived-usage.d.ts.map +1 -0
- package/dist/lib/derived-usage.js +121 -0
- package/dist/lib/derived-usage.js.map +1 -0
- package/dist/lib/domain-profiles.d.ts +42 -0
- package/dist/lib/domain-profiles.d.ts.map +1 -0
- package/dist/lib/domain-profiles.js +118 -0
- package/dist/lib/domain-profiles.js.map +1 -0
- package/dist/lib/domain-usage-command.d.ts.map +1 -1
- package/dist/lib/domain-usage-command.js +9 -4
- package/dist/lib/domain-usage-command.js.map +1 -1
- package/dist/lib/format-compat.d.ts +68 -0
- package/dist/lib/format-compat.d.ts.map +1 -0
- package/dist/lib/format-compat.js +111 -0
- package/dist/lib/format-compat.js.map +1 -0
- package/dist/lib/interactive-guard.d.ts +56 -0
- package/dist/lib/interactive-guard.d.ts.map +1 -0
- package/dist/lib/interactive-guard.js +60 -0
- package/dist/lib/interactive-guard.js.map +1 -0
- package/dist/lib/legacy-install.d.ts.map +1 -1
- package/dist/lib/legacy-install.js +4 -0
- package/dist/lib/legacy-install.js.map +1 -1
- package/dist/lib/usage-render.d.ts +2 -2
- package/dist/lib/usage-render.d.ts.map +1 -1
- package/dist/lib/usage-render.js +2 -1
- package/dist/lib/usage-render.js.map +1 -1
- package/dist/light-commands.d.ts.map +1 -1
- package/dist/light-commands.js +43 -0
- package/dist/light-commands.js.map +1 -1
- package/dist/utils/open-app-context.d.ts +24 -0
- package/dist/utils/open-app-context.d.ts.map +1 -1
- package/dist/utils/open-app-context.js +21 -6
- package/dist/utils/open-app-context.js.map +1 -1
- package/dist/utils/update-check.d.ts +86 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +98 -0
- package/dist/utils/update-check.js.map +1 -0
- package/oclif.manifest.json +4099 -3239
- package/package.json +21 -21
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DomainUsageCommand } from '../../lib/domain-usage-command.js';
|
|
2
|
+
/** Tier-2 usage for the `doctor` domain (`mj doctor usage`). */
|
|
3
|
+
export default class DoctorUsage extends DomainUsageCommand {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.Domain = 'doctor';
|
|
7
|
+
}
|
|
8
|
+
static { this.description = 'Show usage, flags, examples, and runtime hints for every `mj doctor` command.'; }
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/doctor/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,gEAAgE;AAChE,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,kBAAkB;IAA3D;;QAEY,WAAM,GAAG,QAAQ,CAAC;IAC9B,CAAC;aAFQ,gBAAW,GAAG,+EAA+E,AAAlF,CAAmF"}
|
|
@@ -21,6 +21,26 @@ export default class Install extends Command {
|
|
|
21
21
|
run(): Promise<void>;
|
|
22
22
|
private runEngineInstall;
|
|
23
23
|
private wireEventHandlers;
|
|
24
|
+
/**
|
|
25
|
+
* Fails before the first byte is written when this run will be asked questions it
|
|
26
|
+
* cannot answer.
|
|
27
|
+
*
|
|
28
|
+
* Deliberately conservative: it only refuses the combination that is *guaranteed* to
|
|
29
|
+
* dead-end — no terminal to prompt on and no `--yes` to skip the prompts. A terminal
|
|
30
|
+
* run is untouched, and `--yes` is untouched, so nothing that works today starts
|
|
31
|
+
* failing.
|
|
32
|
+
*/
|
|
33
|
+
private requireAnswerableInstall;
|
|
34
|
+
/**
|
|
35
|
+
* Terminates the install with a clean, actionable message when a prompt cannot be
|
|
36
|
+
* answered.
|
|
37
|
+
*
|
|
38
|
+
* `this.error()` throws, and there is no oclif frame above an emitter callback to
|
|
39
|
+
* catch it — so this writes the message itself and exits. An abrupt exit is the right
|
|
40
|
+
* trade here: the alternative is an engine blocked forever on an answer that will
|
|
41
|
+
* never come.
|
|
42
|
+
*/
|
|
43
|
+
private abortOnPromptFailure;
|
|
24
44
|
private handlePromptEvent;
|
|
25
45
|
private renderHeader;
|
|
26
46
|
private renderDryRun;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAqB7C,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,SAAkD;IAEpE,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAiDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBZ,gBAAgB;IAmE9B,OAAO,CAAC,iBAAiB;IAwDzB;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAahC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;YAOd,iBAAiB;IAiD/B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -3,6 +3,7 @@ import { Command, Flags } from '@oclif/core';
|
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { InstallerEngine, } from '@memberjunction/installer';
|
|
5
5
|
import { LegacyInstaller } from '../../lib/legacy-install.js';
|
|
6
|
+
import { NonInteractiveError, failOnNonInteractive, requireInteractive, withNonInteractiveHandling, } from '../../lib/interactive-guard.js';
|
|
6
7
|
export default class Install extends Command {
|
|
7
8
|
static { this.description = 'Install MemberJunction from a GitHub release'; }
|
|
8
9
|
static { this.examples = [
|
|
@@ -63,11 +64,16 @@ export default class Install extends Command {
|
|
|
63
64
|
}; }
|
|
64
65
|
async run() {
|
|
65
66
|
const { flags } = await this.parse(Install);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
return withNonInteractiveHandling(this, async () => {
|
|
68
|
+
if (flags.legacy) {
|
|
69
|
+
// The legacy installer is a two-dozen-question wizard with no flag equivalents,
|
|
70
|
+
// so it is interactive by nature — refuse it up front rather than at question 1.
|
|
71
|
+
requireInteractive('The legacy interactive installer', 'Re-run at an interactive terminal, or drop --legacy to use the engine installer (which accepts --config).');
|
|
72
|
+
const legacy = new LegacyInstaller(this, flags.verbose ?? false);
|
|
73
|
+
return legacy.Run();
|
|
74
|
+
}
|
|
75
|
+
return this.runEngineInstall(flags);
|
|
76
|
+
});
|
|
71
77
|
}
|
|
72
78
|
// ---------------------------------------------------------------------------
|
|
73
79
|
// Engine-based install
|
|
@@ -75,7 +81,8 @@ export default class Install extends Command {
|
|
|
75
81
|
async runEngineInstall(flags) {
|
|
76
82
|
const engine = new InstallerEngine();
|
|
77
83
|
const fast = flags.fast ?? false;
|
|
78
|
-
|
|
84
|
+
const yes = flags.yes ?? false;
|
|
85
|
+
this.wireEventHandlers(engine, flags.verbose ?? false, yes);
|
|
79
86
|
const plan = await engine.CreatePlan({
|
|
80
87
|
Tag: flags.tag,
|
|
81
88
|
Dir: flags.dir,
|
|
@@ -88,6 +95,18 @@ export default class Install extends Command {
|
|
|
88
95
|
this.renderDryRun(plan);
|
|
89
96
|
return;
|
|
90
97
|
}
|
|
98
|
+
// Preflight, deliberately placed here: CreatePlan is pure and --dry-run has already
|
|
99
|
+
// returned, so nothing has touched disk yet, and a dry run stays usable headlessly.
|
|
100
|
+
//
|
|
101
|
+
// The engine asks its questions from inside the phases — the version picker and the
|
|
102
|
+
// not-empty-directory confirmation both live in Scaffold — so a guard that only
|
|
103
|
+
// fires when a prompt is emitted fires AFTER files have been written. Refusing here
|
|
104
|
+
// instead leaves the target directory untouched.
|
|
105
|
+
//
|
|
106
|
+
// --yes is the condition because it is what the engine itself keys on: every prompt
|
|
107
|
+
// in the installer is short-circuited by it. --config alone is not enough — it can
|
|
108
|
+
// supply configure-phase values but does not suppress the scaffold-phase questions.
|
|
109
|
+
this.requireAnswerableInstall(yes);
|
|
91
110
|
this.renderHeader();
|
|
92
111
|
const result = await engine.Run(plan, {
|
|
93
112
|
Yes: flags.yes,
|
|
@@ -103,10 +122,24 @@ export default class Install extends Command {
|
|
|
103
122
|
// ---------------------------------------------------------------------------
|
|
104
123
|
// Event wiring — bridges engine events to CLI output + inquirer prompts
|
|
105
124
|
// ---------------------------------------------------------------------------
|
|
106
|
-
wireEventHandlers(engine, verbose) {
|
|
107
|
-
engine
|
|
108
|
-
|
|
109
|
-
|
|
125
|
+
wireEventHandlers(engine, verbose, yes) {
|
|
126
|
+
// Under --yes the engine installs its own catch-all prompt listener that resolves
|
|
127
|
+
// anything unexpected with its default — the safety net that keeps Docker and CI
|
|
128
|
+
// runs from hanging. Registering an interactive bridge alongside it would make the
|
|
129
|
+
// two fight: ours runs first, refuses (no terminal), and exits(1) before the net
|
|
130
|
+
// can answer, turning a working headless install into a hard failure. So under
|
|
131
|
+
// --yes we simply don't bridge, and the engine's net owns every prompt.
|
|
132
|
+
if (!yes) {
|
|
133
|
+
engine.On('prompt', (event) => {
|
|
134
|
+
// The emitter neither awaits nor catches this promise, so a rejection escaping
|
|
135
|
+
// here becomes an unhandled rejection — Node prints a stack trace and kills the
|
|
136
|
+
// process, which is exactly the opposite of the actionable error the guard inside
|
|
137
|
+
// handlePromptEvent is meant to produce. Catch it at the boundary. (Rejecting
|
|
138
|
+
// also means the event is never Resolve()d, so the engine would otherwise sit
|
|
139
|
+
// waiting on an answer that can never arrive.)
|
|
140
|
+
void this.handlePromptEvent(event).catch((e) => this.abortOnPromptFailure(e));
|
|
141
|
+
});
|
|
142
|
+
}
|
|
110
143
|
engine.On('phase:start', (event) => {
|
|
111
144
|
this.log(chalk.cyan(`\u25b8 ${event.Description}`));
|
|
112
145
|
});
|
|
@@ -140,7 +173,44 @@ export default class Install extends Command {
|
|
|
140
173
|
}
|
|
141
174
|
});
|
|
142
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Fails before the first byte is written when this run will be asked questions it
|
|
178
|
+
* cannot answer.
|
|
179
|
+
*
|
|
180
|
+
* Deliberately conservative: it only refuses the combination that is *guaranteed* to
|
|
181
|
+
* dead-end — no terminal to prompt on and no `--yes` to skip the prompts. A terminal
|
|
182
|
+
* run is untouched, and `--yes` is untouched, so nothing that works today starts
|
|
183
|
+
* failing.
|
|
184
|
+
*/
|
|
185
|
+
requireAnswerableInstall(yes) {
|
|
186
|
+
if (yes)
|
|
187
|
+
return;
|
|
188
|
+
try {
|
|
189
|
+
requireInteractive('Answers to the installer\'s setup questions (version, target directory, configuration)', 'Pass --yes to accept defaults and install the latest version unattended, adding --tag and --config to pin the version and supply settings.');
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
failOnNonInteractive(this, error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Terminates the install with a clean, actionable message when a prompt cannot be
|
|
197
|
+
* answered.
|
|
198
|
+
*
|
|
199
|
+
* `this.error()` throws, and there is no oclif frame above an emitter callback to
|
|
200
|
+
* catch it — so this writes the message itself and exits. An abrupt exit is the right
|
|
201
|
+
* trade here: the alternative is an engine blocked forever on an answer that will
|
|
202
|
+
* never come.
|
|
203
|
+
*/
|
|
204
|
+
abortOnPromptFailure(error) {
|
|
205
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
206
|
+
const suggestion = error instanceof NonInteractiveError ? `\nTry this: ${error.suggestion}` : '';
|
|
207
|
+
process.stderr.write(`${chalk.red('Error:')} ${message}${suggestion}\n`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
143
210
|
async handlePromptEvent(event) {
|
|
211
|
+
// Every branch below blocks on stdin. Refuse up front when this run may not prompt,
|
|
212
|
+
// so the caller gets an actionable error instead of a process that never returns.
|
|
213
|
+
requireInteractive(`An answer to "${event.Message}"`, 'Re-run at an interactive terminal, or supply the value through mj.config.cjs / the command\'s flags.');
|
|
144
214
|
let answer;
|
|
145
215
|
switch (event.PromptType) {
|
|
146
216
|
case 'select':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,eAAe,GAQhB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;aACnC,gBAAW,GAAG,8CAA8C,CAAC;aAE7D,aAAQ,GAAG;QAChB,qCAAqC;QACrC,+CAA+C;QAC/C,+CAA+C;QAC/C,2CAA2C;KAC5C,CAAC;aAEK,UAAK,GAAG;QACb,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2EAA2E;SACzF,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,uCAAuC;YACpD,OAAO,EAAE,GAAG;SACb,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,8EAA8E;SAC5F,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,8DAA8D;YAC3E,MAAM,EAAE,IAAI;SACb,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,4CAA4C;SAC1D,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sEAAsE;SACpF,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sBAAsB;SACpC,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,mCAAmC;SACjD,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;YAC1B,WAAW,EAAE,sCAAsC;SACpD,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;YACzB,WAAW,EAAE,gDAAgD;SAC9D,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,4GAA4G;SAC1H,CAAC;QACF,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC;YAChC,WAAW,EAAE,kGAAkG;SAChH,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,mIAAmI;SACjJ,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC9B,WAAW,EAAE,6NAA6N;SAC3O,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,0BAA0B,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACjD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,gFAAgF;gBAChF,iFAAiF;gBACjF,kBAAkB,CAChB,kCAAkC,EAClC,2GAA2G,CAC5G,CAAC;gBACF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;gBACjE,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;YACtB,CAAC;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,uBAAuB;IACvB,8EAA8E;IAEtE,KAAK,CAAC,gBAAgB,CAAC,KAc9B;QACC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;QACjC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QAE/B,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACnC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;YACxB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC9B,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC;SACtC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,oFAAoF;QACpF,oFAAoF;QACpF,EAAE;QACF,oFAAoF;QACpF,gFAAgF;QAChF,oFAAoF;QACpF,iDAAiD;QACjD,EAAE;QACF,oFAAoF;QACpF,mFAAmF;QACnF,oFAAoF;QACpF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;YACpC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,IAAI,EAAE,IAAI;YACV,eAAe,EAAE,KAAK,CAAC,kBAAkB,CAAC;YAC1C,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAmB,EAAE,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,8EAA8E;IAC9E,wEAAwE;IACxE,8EAA8E;IAEtE,iBAAiB,CAAC,MAAuB,EAAE,OAAgB,EAAE,GAAY;QAC/E,kFAAkF;QAClF,iFAAiF;QACjF,mFAAmF;QACnF,iFAAiF;QACjF,+EAA+E;QAC/E,wEAAwE;QACxE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAkB,EAAE,EAAE;gBACzC,+EAA+E;gBAC/E,gFAAgF;gBAChF,kFAAkF;gBAClF,8EAA8E;gBAC9E,8EAA8E;gBAC9E,+CAA+C;gBAC/C,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAoB,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzE,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,KAAK,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAwB,EAAE,EAAE;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAe,EAAE,EAAE;YACnC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO;gBAAE,OAAO;YAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAgB,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACK,wBAAwB,CAAC,GAAY;QAC3C,IAAI,GAAG;YAAE,OAAO;QAEhB,IAAI,CAAC;YACH,kBAAkB,CAChB,wFAAwF,EACxF,4IAA4I,CAC7I,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,oBAAoB,CAAC,KAAc;QACzC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,UAAU,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,KAAkB;QAChD,oFAAoF;QACpF,kFAAkF;QAClF,kBAAkB,CAChB,iBAAiB,KAAK,CAAC,OAAO,GAAG,EACjC,sGAAsG,CACvG,CAAC;QAEF,IAAI,MAAc,CAAC;QAEnB,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,QAAQ;gBACX,MAAM,GAAG,MAAM,MAAM,CAAC;oBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzC,IAAI,EAAE,CAAC,CAAC,KAAK;wBACb,KAAK,EAAE,CAAC,CAAC,KAAK;qBACf,CAAC,CAAC;iBACJ,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;iBAC7D,CAAC,CAAC;gBACH,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,MAAM;YACR,CAAC;YAED,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,KAAK,CAAC;oBACnB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBACH,MAAM;YAER;gBACE,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC7B,MAAM;QACV,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAEtE,YAAY;QAClB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,IAA6B;QAChD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,YAAY,CAAC,MAMpB,EAAE,OAAgB,KAAK;QACtB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEb,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,6BAA6B,CAAC,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;gBAC3F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;gBACzF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iGAAiG,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,GAAG,EAAE,IAAI,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,GAAG,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,OAAO,KAAK,gBAAgB,GAAG,CAAC;IAC5C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DomainUsageCommand } from '../../lib/domain-usage-command.js';
|
|
2
|
+
/** Tier-2 usage for the `install` domain (`mj install usage`). */
|
|
3
|
+
export default class InstallUsage extends DomainUsageCommand {
|
|
4
|
+
static description: string;
|
|
5
|
+
protected Domain: string;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/commands/install/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,kEAAkE;AAClE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,WAAW,SAAoF;IACtG,SAAS,CAAC,MAAM,SAAa;CAC9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DomainUsageCommand } from '../../lib/domain-usage-command.js';
|
|
2
|
+
/** Tier-2 usage for the `install` domain (`mj install usage`). */
|
|
3
|
+
export default class InstallUsage extends DomainUsageCommand {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.Domain = 'install';
|
|
7
|
+
}
|
|
8
|
+
static { this.description = 'Show usage, flags, examples, and runtime hints for every `mj install` command.'; }
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/install/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,kEAAkE;AAClE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,kBAAkB;IAA5D;;QAEY,WAAM,GAAG,SAAS,CAAC;IAC/B,CAAC;aAFQ,gBAAW,GAAG,gFAAgF,AAAnF,CAAoF"}
|
|
@@ -44,6 +44,31 @@ export declare function decideConvertWrite(result: Pick<ConvertedShape, 'status'
|
|
|
44
44
|
* "preserved DDL below" banner over nothing.
|
|
45
45
|
*/
|
|
46
46
|
export declare function buildConversionFailureArtifact(sourceFile: string, message: string, preservedBody: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Decide whether a legacy (non---split) convert run fails, and with what message (issue #3857).
|
|
49
|
+
* Pure — no I/O — so the exit policy is unit-testable apart from the oclif command.
|
|
50
|
+
*
|
|
51
|
+
* A GAP is a marker comment the converter wrote into the output where it knowingly could not
|
|
52
|
+
* produce SQL (`-- Could not parse: @RoleID …`). Unlike an ERROR — a throw the converter caught —
|
|
53
|
+
* a gap leaves the batch counted as converted, so before this gate the legacy path reported
|
|
54
|
+
* `Files: 1 (1 OK, 0 errors)` and exited 0 over a file PostgreSQL rejects, and nothing short of
|
|
55
|
+
* applying it to a real PG database caught it.
|
|
56
|
+
*
|
|
57
|
+
* Errors always fail. Gaps fail too, unless the caller explicitly accepts them with --allow-gaps
|
|
58
|
+
* (which until now had effect only on the --split path).
|
|
59
|
+
*/
|
|
60
|
+
export declare function decideLegacyConvertExit(args: {
|
|
61
|
+
errorCount: number;
|
|
62
|
+
gapCount: number;
|
|
63
|
+
gapFileCount: number;
|
|
64
|
+
allowGaps: boolean;
|
|
65
|
+
}): {
|
|
66
|
+
fail: true;
|
|
67
|
+
message: string;
|
|
68
|
+
} | {
|
|
69
|
+
fail: false;
|
|
70
|
+
message: null;
|
|
71
|
+
};
|
|
47
72
|
/**
|
|
48
73
|
* CLI command to discover and convert T-SQL migrations to PostgreSQL.
|
|
49
74
|
*
|
|
@@ -75,6 +100,7 @@ export default class MigrateConvert extends Command {
|
|
|
75
100
|
'output-dir': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
76
101
|
file: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
77
102
|
schema: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
103
|
+
'core-schema': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
78
104
|
'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
79
105
|
'no-header': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
80
106
|
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAa7C,OAAO,KAAK,EAIV,yBAAyB,EACzB,oBAAoB,EAErB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAa7C,OAAO,KAAK,EAIV,yBAAyB,EACzB,oBAAoB,EAErB,MAAM,+BAA+B,CAAC;AAYvC;;;;;GAKG;AACH,KAAK,cAAc,GAAG,IAAI,CAAC,yBAAyB,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,gBAAgB,CAAC,GAAG;IAC3G,IAAI,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAIhC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC,EAC7D,WAAW,EAAE,OAAO,GACnB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAKlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAUjH;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAcnE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAA4C;IAE9D,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;MAyDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAgJ1B;;;;;;;;;;;OAWG;YACW,QAAQ;IAkLtB;;;;;;OAMG;YACW,eAAe;IAoC7B;;;;;;;;;OASG;YACW,UAAU;IA6FxB,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB;IAwCzB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB;IA6C3B,OAAO,CAAC,UAAU;CAqBnB"}
|
|
@@ -4,6 +4,11 @@ import os from 'node:os';
|
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { convertFile, getRulesForDialects, createConversionStats, deduplicateEntityFieldSequences, convertMigration, IncrementalBaker, BakeApplyError, } from '@memberjunction/sql-converter';
|
|
6
6
|
import { MJPostgresTranspiler } from '@memberjunction/sqlglot-ts';
|
|
7
|
+
/**
|
|
8
|
+
* MJ core's schema — where the boolean columns an Open App migration seeds (EntityField.AllowsNull
|
|
9
|
+
* and friends) actually live. The app's own schema is read from `--schema`.
|
|
10
|
+
*/
|
|
11
|
+
const MJ_CORE_SCHEMA = '__mj';
|
|
7
12
|
/**
|
|
8
13
|
* Decide how to write and gate one per-migration conversion result (issue #3252 Phase 4d).
|
|
9
14
|
* Pure — no I/O — so the write/halt policy is unit-testable apart from the oclif command.
|
|
@@ -51,6 +56,36 @@ export function buildConversionFailureArtifact(sourceFile, message, preservedBod
|
|
|
51
56
|
`-- The transpiled DDL below is PRESERVED for hand-finishing; complete it, then rename to .pg.sql.\n\n` +
|
|
52
57
|
`${preserved}\n`);
|
|
53
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Decide whether a legacy (non---split) convert run fails, and with what message (issue #3857).
|
|
61
|
+
* Pure — no I/O — so the exit policy is unit-testable apart from the oclif command.
|
|
62
|
+
*
|
|
63
|
+
* A GAP is a marker comment the converter wrote into the output where it knowingly could not
|
|
64
|
+
* produce SQL (`-- Could not parse: @RoleID …`). Unlike an ERROR — a throw the converter caught —
|
|
65
|
+
* a gap leaves the batch counted as converted, so before this gate the legacy path reported
|
|
66
|
+
* `Files: 1 (1 OK, 0 errors)` and exited 0 over a file PostgreSQL rejects, and nothing short of
|
|
67
|
+
* applying it to a real PG database caught it.
|
|
68
|
+
*
|
|
69
|
+
* Errors always fail. Gaps fail too, unless the caller explicitly accepts them with --allow-gaps
|
|
70
|
+
* (which until now had effect only on the --split path).
|
|
71
|
+
*/
|
|
72
|
+
export function decideLegacyConvertExit(args) {
|
|
73
|
+
const reasons = [];
|
|
74
|
+
if (args.errorCount > 0)
|
|
75
|
+
reasons.push(`errors in ${args.errorCount} file(s)`);
|
|
76
|
+
const gapsFail = args.gapCount > 0 && !args.allowGaps;
|
|
77
|
+
if (gapsFail)
|
|
78
|
+
reasons.push(`${args.gapCount} conversion gap(s) in ${args.gapFileCount} file(s)`);
|
|
79
|
+
if (reasons.length === 0)
|
|
80
|
+
return { fail: false, message: null };
|
|
81
|
+
const advice = gapsFail
|
|
82
|
+
? ' A gap is a marker comment (e.g. "-- Could not parse: …") left where the converter could not ' +
|
|
83
|
+
'produce SQL — PostgreSQL will reject the output. Resolve the gaps (rewrite the source migration ' +
|
|
84
|
+
'declaratively, hand-author the PG form, or fix the converter rule), or pass --allow-gaps to ' +
|
|
85
|
+
'accept them for now.'
|
|
86
|
+
: '';
|
|
87
|
+
return { fail: true, message: `Conversion completed with ${reasons.join(' and ')}.${advice}` };
|
|
88
|
+
}
|
|
54
89
|
/**
|
|
55
90
|
* CLI command to discover and convert T-SQL migrations to PostgreSQL.
|
|
56
91
|
*
|
|
@@ -99,6 +134,10 @@ export default class MigrateConvert extends Command {
|
|
|
99
134
|
description: 'Target schema name',
|
|
100
135
|
default: '__mj',
|
|
101
136
|
}),
|
|
137
|
+
'core-schema': Flags.string({
|
|
138
|
+
description: "MJ core schema substituted for ${mjSchema} (default __mj). Distinct from --schema, which is the app's OWN schema: an Open App migration references core as ${mjSchema} and itself as ${flyway:defaultSchema}, and for every app those differ.",
|
|
139
|
+
default: '__mj',
|
|
140
|
+
}),
|
|
102
141
|
'dry-run': Flags.boolean({
|
|
103
142
|
description: 'Show what would be converted without writing files',
|
|
104
143
|
default: false,
|
|
@@ -119,8 +158,9 @@ export default class MigrateConvert extends Command {
|
|
|
119
158
|
default: false,
|
|
120
159
|
}),
|
|
121
160
|
'allow-gaps': Flags.boolean({
|
|
122
|
-
description: '
|
|
123
|
-
'
|
|
161
|
+
description: 'Exit 0 even when migrations have conversion gaps — with --split: hand-authoring needed or ' +
|
|
162
|
+
'unhandled statements; on the legacy path: "-- Could not parse" / "-- ERROR converting batch" ' +
|
|
163
|
+
'markers in the output. Gaps are still embedded as comments and listed in the summary.',
|
|
124
164
|
default: false,
|
|
125
165
|
}),
|
|
126
166
|
'bake-codegen': Flags.boolean({
|
|
@@ -181,6 +221,7 @@ export default class MigrateConvert extends Command {
|
|
|
181
221
|
// Convert each file
|
|
182
222
|
let successCount = 0;
|
|
183
223
|
let errorCount = 0;
|
|
224
|
+
const gapFiles = [];
|
|
184
225
|
const totalStats = createConversionStats();
|
|
185
226
|
for (const migration of unconverted) {
|
|
186
227
|
this.log(`Converting: ${migration.SourceFile}`);
|
|
@@ -205,7 +246,16 @@ export default class MigrateConvert extends Command {
|
|
|
205
246
|
this.logToStderr(` ${err.substring(0, 200)}`);
|
|
206
247
|
}
|
|
207
248
|
}
|
|
208
|
-
|
|
249
|
+
// Gaps are listed the same way errors are — the whole point of issue #3857 is that a file
|
|
250
|
+
// the converter knowingly could not finish must not be reported as "OK".
|
|
251
|
+
if (result.Stats.Gaps > 0) {
|
|
252
|
+
gapFiles.push(migration.SourceFile);
|
|
253
|
+
this.logToStderr(` GAPS: ${result.Stats.Gaps} unconverted statement(s) in ${migration.SourceFile}`);
|
|
254
|
+
for (const gap of result.Stats.GapBatches) {
|
|
255
|
+
this.logToStderr(` ${gap.substring(0, 200)}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (result.Stats.Errors === 0 && result.Stats.Gaps === 0) {
|
|
209
259
|
successCount++;
|
|
210
260
|
this.log(` OK (${result.Stats.Converted} batches, ${result.Stats.TotalBatches - result.Stats.Converted} skipped)`);
|
|
211
261
|
}
|
|
@@ -213,8 +263,8 @@ export default class MigrateConvert extends Command {
|
|
|
213
263
|
// Print summary
|
|
214
264
|
this.log('');
|
|
215
265
|
this.log('=== Conversion Summary ===');
|
|
216
|
-
this.log(` Files: ${unconverted.length} (${successCount} OK, ${errorCount} errors)`);
|
|
217
|
-
this.log(` Batches: ${totalStats.TotalBatches} total, ${totalStats.Converted} converted, ${totalStats.Skipped} skipped, ${totalStats.Errors} errors`);
|
|
266
|
+
this.log(` Files: ${unconverted.length} (${successCount} OK, ${errorCount} errors, ${gapFiles.length} with gaps)`);
|
|
267
|
+
this.log(` Batches: ${totalStats.TotalBatches} total, ${totalStats.Converted} converted, ${totalStats.Skipped} skipped, ${totalStats.Errors} errors, ${totalStats.Gaps} gaps`);
|
|
218
268
|
this.log(` Tables: ${totalStats.TablesCreated}`);
|
|
219
269
|
this.log(` Views: ${totalStats.ViewsCreated}`);
|
|
220
270
|
this.log(` Procedures: ${totalStats.ProceduresConverted}`);
|
|
@@ -223,9 +273,6 @@ export default class MigrateConvert extends Command {
|
|
|
223
273
|
this.log(` Indexes: ${totalStats.IndexesCreated}`);
|
|
224
274
|
this.log(` Inserts: ${totalStats.InsertsConverted}`);
|
|
225
275
|
this.log(` Grants: ${totalStats.GrantsConverted}`);
|
|
226
|
-
if (errorCount > 0) {
|
|
227
|
-
this.error(`Conversion completed with errors in ${errorCount} file(s)`);
|
|
228
|
-
}
|
|
229
276
|
// Post-conversion: deduplicate EntityField Sequence values across files
|
|
230
277
|
// to prevent UQ_EntityField_EntityID_Sequence violations on PG
|
|
231
278
|
this.log('\nRunning EntityField Sequence deduplication...');
|
|
@@ -239,6 +286,19 @@ export default class MigrateConvert extends Command {
|
|
|
239
286
|
else {
|
|
240
287
|
this.log(` No collisions found (${dedupResult.totalInserts} EntityField INSERTs scanned).`);
|
|
241
288
|
}
|
|
289
|
+
// Gate LAST, after the sequence dedup fixup. `this.error` throws, and the files are already
|
|
290
|
+
// written: gating before the fixup would leave every output un-deduped, and a re-run skips
|
|
291
|
+
// them (they now have a .pg.sql counterpart), so the fixup would never get another chance.
|
|
292
|
+
// Errors gate here as they always did; gaps now gate too unless --allow-gaps (issue #3857).
|
|
293
|
+
const exit = decideLegacyConvertExit({
|
|
294
|
+
errorCount,
|
|
295
|
+
gapCount: totalStats.Gaps,
|
|
296
|
+
gapFileCount: gapFiles.length,
|
|
297
|
+
allowGaps: flags['allow-gaps'],
|
|
298
|
+
});
|
|
299
|
+
if (exit.fail) {
|
|
300
|
+
this.error(exit.message);
|
|
301
|
+
}
|
|
242
302
|
}
|
|
243
303
|
/**
|
|
244
304
|
* Split-and-regenerate conversion (the standard path). Classification routes
|
|
@@ -268,10 +328,15 @@ export default class MigrateConvert extends Command {
|
|
|
268
328
|
// Select the per-migration conversion: inline-baking (live DB, CodeGen baked natively) or
|
|
269
329
|
// the default transpile-only path (CodeGen regenerated by `mj codegen` at deploy).
|
|
270
330
|
const bakeCodegen = flags['bake-codegen'];
|
|
271
|
-
const baker = bakeCodegen ? await this.buildBaker(transpiler, flags.schema) : null;
|
|
331
|
+
const baker = bakeCodegen ? await this.buildBaker(transpiler, flags.schema, flags['core-schema']) : null;
|
|
272
332
|
const convertOne = (sql, fileName) => baker
|
|
273
333
|
? baker.bakeMigration(sql, fileName)
|
|
274
|
-
: convertMigration(sql, fileName, {
|
|
334
|
+
: convertMigration(sql, fileName, {
|
|
335
|
+
schema: flags.schema,
|
|
336
|
+
coreSchema: flags['core-schema'],
|
|
337
|
+
includeHeader: !flags['no-header'],
|
|
338
|
+
transpiler,
|
|
339
|
+
});
|
|
275
340
|
if (bakeCodegen)
|
|
276
341
|
this.log(`\nInline CodeGen baking ENABLED — bringing the working DB forward as each migration bakes.`);
|
|
277
342
|
const converted = [];
|
|
@@ -429,7 +494,7 @@ export default class MigrateConvert extends Command {
|
|
|
429
494
|
if (latestBaseline) {
|
|
430
495
|
try {
|
|
431
496
|
const cols = await probe.collectBitColumns(fs.readFileSync(path.join(sourceDir, latestBaseline), 'utf8'));
|
|
432
|
-
bitColumns.push(...
|
|
497
|
+
bitColumns.push(...cols);
|
|
433
498
|
}
|
|
434
499
|
catch (err) {
|
|
435
500
|
// A baseline that fails bit-column collection degrades 1/0→TRUE/FALSE
|
|
@@ -449,7 +514,7 @@ export default class MigrateConvert extends Command {
|
|
|
449
514
|
* codegen-lib + core are declared MJCLI deps) to keep a plain `convert --split` light. The
|
|
450
515
|
* matching `import type` at the top is erased at runtime, so it does not defeat the deferral.
|
|
451
516
|
*/
|
|
452
|
-
async buildBaker(transpiler, schema) {
|
|
517
|
+
async buildBaker(transpiler, schema, coreSchema) {
|
|
453
518
|
const { RunCodeGenBase, SQLCodeGenBase, initializeConfig, dbPlatform, configInfo } = await import('@memberjunction/codegen-lib');
|
|
454
519
|
if (dbPlatform() !== 'postgresql') {
|
|
455
520
|
this.error('--bake-codegen requires DB_PLATFORM=postgresql with PG_* connection env (the working DB CodeGen objects are captured from).');
|
|
@@ -463,6 +528,41 @@ export default class MigrateConvert extends Command {
|
|
|
463
528
|
this.error(`--bake-codegen could not connect/load metadata from the working PG database: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
464
529
|
'Seed the working DB to the baseline (its __mj views + metadata must exist) before baking.');
|
|
465
530
|
}
|
|
531
|
+
// Seed the BIT/BOOLEAN registry from the LIVE catalog (issue #3839).
|
|
532
|
+
//
|
|
533
|
+
// buildTranspiler() collects BIT columns from the migration set's own baseline, which declares
|
|
534
|
+
// the app's tables and never MJ core's. A migration that seeds `__mj.EntityField` therefore had
|
|
535
|
+
// no type information for AllowsNull / IsVirtual / IsPrimaryKey, so BIT 0/1 reached a
|
|
536
|
+
// PostgreSQL BOOLEAN column and the apply failed with
|
|
537
|
+
// column "AllowsNull" is of type boolean but expression is of type integer
|
|
538
|
+
// which — because the bake applies as it advances — halted the whole chain.
|
|
539
|
+
//
|
|
540
|
+
// The working database is authoritative and version-correct, which a checked-in column map is
|
|
541
|
+
// not: the copies in the bizapps repos are generated against core 5.37 and already miss columns
|
|
542
|
+
// that exist in 6.x. Failure to read the catalog degrades coercion rather than stopping the
|
|
543
|
+
// run, so it warns loudly instead of aborting.
|
|
544
|
+
try {
|
|
545
|
+
// `CodeGenConnection.query` takes SQL only — no parameter array — so the two schema names are
|
|
546
|
+
// inlined as literals. They are configuration identifiers rather than user input, and are
|
|
547
|
+
// escaped by doubling any single quote so a schema name cannot terminate the literal.
|
|
548
|
+
const schemaList = [MJ_CORE_SCHEMA, schema].map((n) => `'${n.replaceAll("'", "''")}'`).join(', ');
|
|
549
|
+
const { recordset } = await ds.connection.query(`SELECT table_name, column_name
|
|
550
|
+
FROM information_schema.columns
|
|
551
|
+
WHERE data_type = 'boolean' AND table_schema IN (${schemaList})`);
|
|
552
|
+
// The dialect's registry keys are LOWERCASED [table, column] pairs.
|
|
553
|
+
const catalogBitCols = recordset.map((r) => [
|
|
554
|
+
String(r.table_name).toLowerCase(),
|
|
555
|
+
String(r.column_name).toLowerCase(),
|
|
556
|
+
]);
|
|
557
|
+
transpiler.addExtraBitColumns(catalogBitCols);
|
|
558
|
+
if (catalogBitCols.length === 0) {
|
|
559
|
+
this.warn('No boolean columns found in the working database — bit/boolean coercion will rely on the baseline registry alone.');
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
catch (err) {
|
|
563
|
+
this.warn(`Could not read boolean columns from the working database (${err instanceof Error ? err.message : String(err)}). ` +
|
|
564
|
+
'Seed INSERT/UPDATE values targeting core boolean columns may not be coerced.');
|
|
565
|
+
}
|
|
466
566
|
const sqlGen = new SQLCodeGenBase();
|
|
467
567
|
const db = {
|
|
468
568
|
apply: async (sql) => {
|
|
@@ -497,7 +597,7 @@ export default class MigrateConvert extends Command {
|
|
|
497
597
|
.map((e) => e.Name);
|
|
498
598
|
},
|
|
499
599
|
};
|
|
500
|
-
return new IncrementalBaker({ transpiler, db, schema });
|
|
600
|
+
return new IncrementalBaker({ transpiler, db, schema, coreSchema });
|
|
501
601
|
}
|
|
502
602
|
/** Print the split-and-regenerate run summary and the mandatory next steps. */
|
|
503
603
|
printSplitSummary(converted, regenReseed, needsHand, withUnhandled, dryRun, bakeCodegen = false) {
|
|
@@ -592,8 +692,10 @@ export default class MigrateConvert extends Command {
|
|
|
592
692
|
target.FKConstraints += source.FKConstraints;
|
|
593
693
|
target.CheckConstraints += source.CheckConstraints;
|
|
594
694
|
target.CommentsConverted += source.CommentsConverted;
|
|
695
|
+
target.Gaps += source.Gaps;
|
|
595
696
|
target.ErrorBatches.push(...source.ErrorBatches);
|
|
596
697
|
target.SkippedBatches.push(...source.SkippedBatches);
|
|
698
|
+
target.GapBatches.push(...source.GapBatches);
|
|
597
699
|
}
|
|
598
700
|
}
|
|
599
701
|
//# sourceMappingURL=convert.js.map
|