@memberjunction/cli 6.2.0-edge.0 → 6.2.0-edge.1
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/dist/baseline/cli-helpers.d.ts +4 -0
- package/dist/baseline/cli-helpers.d.ts.map +1 -1
- package/dist/baseline/cli-helpers.js +18 -10
- package/dist/baseline/cli-helpers.js.map +1 -1
- package/dist/baseline/comparator.d.ts +5 -3
- package/dist/baseline/comparator.d.ts.map +1 -1
- package/dist/baseline/comparator.js +142 -138
- package/dist/baseline/comparator.js.map +1 -1
- package/dist/baseline/connection.d.ts +8 -6
- package/dist/baseline/connection.d.ts.map +1 -1
- package/dist/baseline/connection.js +16 -12
- package/dist/baseline/connection.js.map +1 -1
- package/dist/baseline/data-dumper.d.ts +7 -3
- package/dist/baseline/data-dumper.d.ts.map +1 -1
- package/dist/baseline/data-dumper.js +33 -25
- package/dist/baseline/data-dumper.js.map +1 -1
- package/dist/baseline/emitter.d.ts +5 -3
- package/dist/baseline/emitter.d.ts.map +1 -1
- package/dist/baseline/emitter.js +114 -110
- package/dist/baseline/emitter.js.map +1 -1
- package/dist/baseline/index.d.ts +7 -7
- package/dist/baseline/index.d.ts.map +1 -1
- package/dist/baseline/index.js +7 -7
- package/dist/baseline/index.js.map +1 -1
- package/dist/baseline/introspector-mssql.d.ts +2 -0
- package/dist/baseline/introspector-mssql.d.ts.map +1 -1
- package/dist/baseline/introspector-mssql.js +68 -64
- package/dist/baseline/introspector-mssql.js.map +1 -1
- package/dist/baseline/introspector-postgres.d.ts +2 -0
- package/dist/baseline/introspector-postgres.d.ts.map +1 -1
- package/dist/baseline/introspector-postgres.js +34 -30
- package/dist/baseline/introspector-postgres.js.map +1 -1
- package/dist/baseline/report.d.ts +4 -0
- package/dist/baseline/report.d.ts.map +1 -1
- package/dist/baseline/report.js +25 -17
- package/dist/baseline/report.js.map +1 -1
- package/dist/baseline/types.d.ts +71 -71
- package/dist/baseline/util.d.ts +54 -6
- package/dist/baseline/util.d.ts.map +1 -1
- package/dist/baseline/util.js +112 -36
- package/dist/baseline/util.js.map +1 -1
- package/dist/commands/ai/actions/list.js +7 -7
- package/dist/commands/ai/actions/run.js +7 -7
- package/dist/commands/ai/agents/list.js +7 -7
- package/dist/commands/ai/agents/run.js +9 -9
- package/dist/commands/ai/audit/agent-run.js +7 -7
- package/dist/commands/ai/prompts/run.js +7 -7
- package/dist/commands/app/check-updates.js +5 -5
- package/dist/commands/app/disable.js +2 -2
- package/dist/commands/app/enable.js +2 -2
- package/dist/commands/app/info.js +2 -2
- package/dist/commands/app/install.js +2 -2
- package/dist/commands/app/list.js +2 -2
- package/dist/commands/app/remove.js +4 -4
- package/dist/commands/app/upgrade.js +2 -2
- package/dist/commands/artifacts/reclassify.js +2 -2
- package/dist/commands/baseline/build.js +31 -31
- package/dist/commands/baseline/build.js.map +1 -1
- package/dist/commands/baseline/compare.js +36 -36
- package/dist/commands/baseline/roundtrip.js +56 -54
- package/dist/commands/baseline/roundtrip.js.map +1 -1
- package/dist/commands/bundle/index.js +4 -4
- package/dist/commands/clean/index.js +3 -3
- package/dist/commands/codegen/manifest.d.ts +2 -0
- package/dist/commands/codegen/manifest.d.ts.map +1 -1
- package/dist/commands/codegen/manifest.js +8 -4
- package/dist/commands/codegen/manifest.js.map +1 -1
- package/dist/commands/dev/workspace/index.d.ts +2 -0
- package/dist/commands/dev/workspace/index.d.ts.map +1 -1
- package/dist/commands/dev/workspace/index.js +8 -4
- package/dist/commands/dev/workspace/index.js.map +1 -1
- package/dist/commands/install/claude.d.ts +2 -0
- package/dist/commands/install/claude.d.ts.map +1 -1
- package/dist/commands/install/claude.js +11 -7
- package/dist/commands/install/claude.js.map +1 -1
- package/dist/commands/install/index.js +3 -3
- package/dist/commands/migrate/convert.d.ts +21 -0
- package/dist/commands/migrate/convert.d.ts.map +1 -1
- package/dist/commands/migrate/convert.js +22 -6
- package/dist/commands/migrate/convert.js.map +1 -1
- package/dist/commands/migrate/create.js +2 -2
- package/dist/commands/migrate/index.js +16 -16
- package/dist/commands/sync/file-reset.js +2 -2
- package/dist/commands/sync/init.js +3 -3
- package/dist/commands/test/compare.js +6 -6
- package/dist/commands/test/history.js +6 -6
- package/dist/commands/test/list.js +6 -6
- package/dist/commands/test/regression/build.js +5 -5
- package/dist/commands/test/regression/compare.js +3 -3
- package/dist/commands/test/regression/down.js +4 -4
- package/dist/commands/test/regression/export.js +4 -4
- package/dist/commands/test/regression/gen-forms.js +3 -3
- package/dist/commands/test/regression/remote.js +10 -10
- package/dist/commands/test/regression/up.js +6 -6
- package/dist/commands/test/run.js +6 -6
- package/dist/commands/test/suite.js +6 -6
- package/dist/commands/test/validate.js +6 -6
- package/dist/commands/translate-sql/index.js +25 -25
- package/dist/commands/update/claude.js +7 -7
- package/dist/commands/usage.js +4 -4
- package/dist/config.d.ts +175 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -9
- package/dist/config.js.map +1 -1
- package/dist/hooks/postrun.js +2 -2
- package/dist/hooks/prerun.js +2 -2
- package/dist/hooks/prerun.js.map +1 -1
- package/dist/lib/claude-pack/ManagedBlockEditor.d.ts +6 -0
- package/dist/lib/claude-pack/ManagedBlockEditor.d.ts.map +1 -1
- package/dist/lib/claude-pack/ManagedBlockEditor.js +18 -6
- package/dist/lib/claude-pack/ManagedBlockEditor.js.map +1 -1
- package/dist/lib/claude-pack/PackFetcher.d.ts +8 -3
- package/dist/lib/claude-pack/PackFetcher.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackFetcher.js +26 -18
- package/dist/lib/claude-pack/PackFetcher.js.map +1 -1
- package/dist/lib/claude-pack/PackInstaller.d.ts +6 -2
- package/dist/lib/claude-pack/PackInstaller.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackInstaller.js +19 -13
- package/dist/lib/claude-pack/PackInstaller.js.map +1 -1
- package/dist/lib/claude-pack/PackMerger.d.ts +8 -0
- package/dist/lib/claude-pack/PackMerger.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackMerger.js +63 -57
- package/dist/lib/claude-pack/PackMerger.js.map +1 -1
- package/dist/lib/claude-pack/PackOutputFormatter.d.ts +4 -0
- package/dist/lib/claude-pack/PackOutputFormatter.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackOutputFormatter.js +10 -2
- package/dist/lib/claude-pack/PackOutputFormatter.js.map +1 -1
- package/dist/lib/claude-pack/PackPaths.d.ts +12 -0
- package/dist/lib/claude-pack/PackPaths.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackPaths.js +31 -7
- package/dist/lib/claude-pack/PackPaths.js.map +1 -1
- package/dist/lib/claude-pack/PackTypes.d.ts +18 -14
- package/dist/lib/claude-pack/PackTypes.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackTypes.js +11 -3
- package/dist/lib/claude-pack/PackTypes.js.map +1 -1
- package/dist/lib/claude-pack/SettingsMerger.d.ts +10 -0
- package/dist/lib/claude-pack/SettingsMerger.d.ts.map +1 -1
- package/dist/lib/claude-pack/SettingsMerger.js +36 -16
- package/dist/lib/claude-pack/SettingsMerger.js.map +1 -1
- package/dist/lib/cli-plugins.d.ts +2 -0
- package/dist/lib/cli-plugins.d.ts.map +1 -1
- package/dist/lib/cli-plugins.js +8 -4
- package/dist/lib/cli-plugins.js.map +1 -1
- package/dist/lib/db-preflight.d.ts +2 -0
- package/dist/lib/db-preflight.d.ts.map +1 -1
- package/dist/lib/db-preflight.js +12 -8
- package/dist/lib/db-preflight.js.map +1 -1
- package/dist/lib/db-version.d.ts +2 -0
- package/dist/lib/db-version.d.ts.map +1 -1
- package/dist/lib/db-version.js +5 -1
- package/dist/lib/db-version.js.map +1 -1
- package/dist/lib/derived-usage.d.ts +14 -8
- package/dist/lib/derived-usage.d.ts.map +1 -1
- package/dist/lib/derived-usage.js +30 -18
- package/dist/lib/derived-usage.js.map +1 -1
- package/dist/lib/domain-profiles.d.ts +4 -2
- package/dist/lib/domain-profiles.d.ts.map +1 -1
- package/dist/lib/domain-profiles.js +53 -49
- package/dist/lib/domain-profiles.js.map +1 -1
- package/dist/lib/domain-usage-command.js +4 -4
- package/dist/lib/dynamic-packages.d.ts +4 -2
- package/dist/lib/dynamic-packages.d.ts.map +1 -1
- package/dist/lib/dynamic-packages.js +9 -5
- package/dist/lib/dynamic-packages.js.map +1 -1
- package/dist/lib/format-compat.d.ts +9 -7
- package/dist/lib/format-compat.d.ts.map +1 -1
- package/dist/lib/format-compat.js +12 -8
- package/dist/lib/format-compat.js.map +1 -1
- package/dist/lib/interactive-guard.d.ts +16 -0
- package/dist/lib/interactive-guard.d.ts.map +1 -1
- package/dist/lib/interactive-guard.js +18 -6
- package/dist/lib/interactive-guard.js.map +1 -1
- package/dist/lib/migration-fetch.d.ts +16 -4
- package/dist/lib/migration-fetch.d.ts.map +1 -1
- package/dist/lib/migration-fetch.js +30 -18
- package/dist/lib/migration-fetch.js.map +1 -1
- package/dist/lib/regression/docker-helpers.d.ts +24 -0
- package/dist/lib/regression/docker-helpers.d.ts.map +1 -1
- package/dist/lib/regression/docker-helpers.js +46 -10
- package/dist/lib/regression/docker-helpers.js.map +1 -1
- package/dist/lib/usage-render.d.ts +6 -0
- package/dist/lib/usage-render.d.ts.map +1 -1
- package/dist/lib/usage-render.js +15 -3
- package/dist/lib/usage-render.js.map +1 -1
- package/dist/translate-sql/groundTruth.d.ts +3 -3
- package/dist/translate-sql/groundTruth.js +40 -40
- package/dist/translate-sql/reportGenerator.d.ts +7 -7
- package/dist/translate-sql/reportGenerator.js +18 -18
- package/dist/translate-sql/ruleTranslator.d.ts +3 -3
- package/dist/translate-sql/ruleTranslator.js +8 -8
- package/dist/translate-sql/ruleTranslator.js.map +1 -1
- package/dist/utils/open-app-context.d.ts +21 -0
- package/dist/utils/open-app-context.d.ts.map +1 -1
- package/dist/utils/open-app-context.js +26 -10
- package/dist/utils/open-app-context.js.map +1 -1
- package/oclif.manifest.json +1185 -1185
- package/package.json +22 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import { ListInstalledApps } from '@memberjunction/open-app-engine';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
-
import {
|
|
4
|
+
import { BuildContextUser } from '../../utils/open-app-context.js';
|
|
5
5
|
/**
|
|
6
6
|
* CLI command: `mj app list`.
|
|
7
7
|
*
|
|
@@ -19,7 +19,7 @@ export default class AppList extends Command {
|
|
|
19
19
|
async run() {
|
|
20
20
|
const { flags } = await this.parse(AppList);
|
|
21
21
|
try {
|
|
22
|
-
const contextUser = await
|
|
22
|
+
const contextUser = await BuildContextUser();
|
|
23
23
|
const apps = await ListInstalledApps(contextUser);
|
|
24
24
|
if (apps.length === 0) {
|
|
25
25
|
this.log('No Open Apps installed.');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Args, Command, Flags } from '@oclif/core';
|
|
2
2
|
import { RemoveApp } from '@memberjunction/open-app-engine';
|
|
3
3
|
import { confirm } from '@inquirer/prompts';
|
|
4
|
-
import { resolveOrPrompt,
|
|
4
|
+
import { resolveOrPrompt, WithNonInteractiveHandling } from '../../lib/interactive-guard.js';
|
|
5
5
|
import ora from 'ora-classic';
|
|
6
6
|
import chalk from 'chalk';
|
|
7
|
-
import {
|
|
7
|
+
import { BuildOrchestratorContext } from '../../utils/open-app-context.js';
|
|
8
8
|
/**
|
|
9
9
|
* CLI command: `mj app remove <name>`.
|
|
10
10
|
*
|
|
@@ -40,7 +40,7 @@ export default class AppRemove extends Command {
|
|
|
40
40
|
if (!flags.yes) {
|
|
41
41
|
// Destructive: this drops a schema. A headless run must say --yes explicitly
|
|
42
42
|
// rather than have consent inferred for it.
|
|
43
|
-
const confirmed = await
|
|
43
|
+
const confirmed = await WithNonInteractiveHandling(this, () => resolveOrPrompt({
|
|
44
44
|
flagValue: undefined,
|
|
45
45
|
what: `Confirmation to remove '${args.name}'`,
|
|
46
46
|
suggestion: 'Pass --yes to confirm removal.',
|
|
@@ -55,7 +55,7 @@ export default class AppRemove extends Command {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
try {
|
|
58
|
-
const context = await
|
|
58
|
+
const context = await BuildOrchestratorContext(this, flags.verbose);
|
|
59
59
|
const result = await RemoveApp({
|
|
60
60
|
AppName: args.name,
|
|
61
61
|
KeepData: flags['keep-data'],
|
|
@@ -2,7 +2,7 @@ import { Args, Command, Flags } from '@oclif/core';
|
|
|
2
2
|
import { UpgradeApp } from '@memberjunction/open-app-engine';
|
|
3
3
|
import ora from 'ora-classic';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
-
import {
|
|
5
|
+
import { BuildOrchestratorContext } from '../../utils/open-app-context.js';
|
|
6
6
|
/**
|
|
7
7
|
* CLI command: `mj app upgrade <name>`.
|
|
8
8
|
*
|
|
@@ -37,7 +37,7 @@ export default class AppUpgrade extends Command {
|
|
|
37
37
|
const { args, flags } = await this.parse(AppUpgrade);
|
|
38
38
|
const spinner = ora();
|
|
39
39
|
try {
|
|
40
|
-
const context = await
|
|
40
|
+
const context = await BuildOrchestratorContext(this, flags.verbose, !flags['non-interactive']);
|
|
41
41
|
const result = await UpgradeApp({
|
|
42
42
|
AppName: args.name,
|
|
43
43
|
Version: flags.version,
|
|
@@ -6,7 +6,7 @@ import { ResolveStartupMode, RunView, LogStatus, SetProductionStatus } from '@me
|
|
|
6
6
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
7
7
|
import { setupSQLServerClient, SQLServerProviderConfigData } from '@memberjunction/sqlserver-dataprovider';
|
|
8
8
|
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
9
|
-
import {
|
|
9
|
+
import { GetValidatedConfig } from '../../config.js';
|
|
10
10
|
const JSON_FALLBACK_ID = 'AE674C7E-EA0D-49EA-89E4-0649F5EB20D4';
|
|
11
11
|
export default class ArtifactsReclassify extends Command {
|
|
12
12
|
static { this.description = 'Upgrade-recovery utility for v5.35 artifact unification. Re-evaluates rows whose TypeID is the deleted JSON fallback but whose actual content does not parse as JSON. ' +
|
|
@@ -28,7 +28,7 @@ export default class ArtifactsReclassify extends Command {
|
|
|
28
28
|
const { flags } = await this.parse(ArtifactsReclassify);
|
|
29
29
|
SetProductionStatus(false);
|
|
30
30
|
const spinner = ora('Connecting to database...').start();
|
|
31
|
-
const config =
|
|
31
|
+
const config = GetValidatedConfig();
|
|
32
32
|
const pool = new sql.ConnectionPool({
|
|
33
33
|
server: config.dbHost,
|
|
34
34
|
port: config.dbPort,
|
|
@@ -3,12 +3,12 @@ import * as fs from 'node:fs';
|
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import ora from 'ora-classic';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
6
|
+
import { ResolveConnection, IsTty } from '../../baseline/cli-helpers.js';
|
|
7
|
+
import { OpenConnection } from '../../baseline/connection.js';
|
|
8
|
+
import { IntrospectMssql } from '../../baseline/introspector-mssql.js';
|
|
9
|
+
import { DumpTables } from '../../baseline/data-dumper.js';
|
|
10
|
+
import { EmitBaselineTsql } from '../../baseline/emitter.js';
|
|
11
|
+
import { BaselineFilename, ComputeAutoBaselineStamp, DiscoverMigrationsSourceDir, FindLatestVersionedMigration, } from '../../baseline/util.js';
|
|
12
12
|
export default class BaselineBuild extends Command {
|
|
13
13
|
static { this.description = 'Generate a deterministic baseline SQL script from the END-STATE of a migrated MSSQL database.'; }
|
|
14
14
|
static { this.examples = [
|
|
@@ -62,7 +62,7 @@ export default class BaselineBuild extends Command {
|
|
|
62
62
|
async run() {
|
|
63
63
|
const { flags } = await this.parse(BaselineBuild);
|
|
64
64
|
const { baselineVersion, generatedAtUtc, autoSource } = this.resolveVersionAndStamp(flags);
|
|
65
|
-
const connectionParams =
|
|
65
|
+
const connectionParams = ResolveConnection({ database: flags.database }, 'mssql');
|
|
66
66
|
const excludedDataTables = new Set(flags['exclude-data']
|
|
67
67
|
.split(',')
|
|
68
68
|
.map((s) => s.trim().toLowerCase())
|
|
@@ -70,7 +70,7 @@ export default class BaselineBuild extends Command {
|
|
|
70
70
|
.map((s) => (s.includes('.') ? s : `dbo.${s}`)));
|
|
71
71
|
excludedDataTables.add('flyway_schema_history');
|
|
72
72
|
excludedDataTables.add('dbo.flyway_schema_history');
|
|
73
|
-
const useSpinner =
|
|
73
|
+
const useSpinner = IsTty();
|
|
74
74
|
const spinner = useSpinner ? ora() : null;
|
|
75
75
|
const phase = (text) => {
|
|
76
76
|
if (spinner) {
|
|
@@ -89,38 +89,38 @@ export default class BaselineBuild extends Command {
|
|
|
89
89
|
this.log(chalk.dim(` Auto-detected baseline: v${baselineVersion}.x (from ${autoSource.filename})`));
|
|
90
90
|
this.log(chalk.dim(` Auto timestamp : ${autoSource.timestamp} + 1m`));
|
|
91
91
|
}
|
|
92
|
-
phase(`Connecting to ${connectionParams.
|
|
93
|
-
const db = await
|
|
92
|
+
phase(`Connecting to ${connectionParams.Database}@${connectionParams.Host}`);
|
|
93
|
+
const db = await OpenConnection(connectionParams);
|
|
94
94
|
try {
|
|
95
|
-
succeed(`Connected to ${connectionParams.
|
|
95
|
+
succeed(`Connected to ${connectionParams.Database}`);
|
|
96
96
|
phase(`Introspecting schema`);
|
|
97
|
-
const snapshot = await
|
|
97
|
+
const snapshot = await IntrospectMssql(db, {
|
|
98
98
|
onPhase: (p) => { if (flags.verbose)
|
|
99
99
|
this.log(` - ${p}`); },
|
|
100
100
|
});
|
|
101
|
-
succeed(`Introspected ${snapshot.
|
|
102
|
-
`${snapshot.
|
|
103
|
-
`${snapshot.
|
|
104
|
-
`${snapshot.
|
|
101
|
+
succeed(`Introspected ${snapshot.Tables.length} tables, ` +
|
|
102
|
+
`${snapshot.Views.length} views, ` +
|
|
103
|
+
`${snapshot.Procedures.length} procs, ` +
|
|
104
|
+
`${snapshot.Functions.length} functions`);
|
|
105
105
|
const dumps = flags['no-data'] ? [] : await (async () => {
|
|
106
106
|
phase(`Dumping table data (every row, every column)`);
|
|
107
|
-
const result = await
|
|
108
|
-
|
|
107
|
+
const result = await DumpTables(db, snapshot.Tables, { ExcludedTables: excludedDataTables }, {
|
|
108
|
+
OnTable: (table, count) => {
|
|
109
109
|
if (flags.verbose)
|
|
110
|
-
this.log(` ${table.
|
|
110
|
+
this.log(` ${table.Schema}.${table.Name}: ${count} rows`);
|
|
111
111
|
else if (spinner)
|
|
112
|
-
spinner.text = `Dumping ${table.
|
|
112
|
+
spinner.text = `Dumping ${table.Schema}.${table.Name} (${count} rows)`;
|
|
113
113
|
},
|
|
114
114
|
});
|
|
115
|
-
const totalRows = result.reduce((sum, d) => sum + d.
|
|
115
|
+
const totalRows = result.reduce((sum, d) => sum + d.RowCount, 0);
|
|
116
116
|
succeed(`Dumped ${totalRows.toLocaleString()} rows across ${result.length} tables`);
|
|
117
117
|
return result;
|
|
118
118
|
})();
|
|
119
119
|
phase('Emitting baseline SQL');
|
|
120
|
-
const sql =
|
|
121
|
-
snapshot,
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
const sql = EmitBaselineTsql({
|
|
121
|
+
Snapshot: snapshot,
|
|
122
|
+
DataDumps: dumps,
|
|
123
|
+
Options: {
|
|
124
124
|
baselineVersion,
|
|
125
125
|
description: flags.description,
|
|
126
126
|
generatedAtUtc,
|
|
@@ -134,7 +134,7 @@ export default class BaselineBuild extends Command {
|
|
|
134
134
|
process.stdout.write(sql);
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
|
-
const filename =
|
|
137
|
+
const filename = BaselineFilename({ generatedAtUtc, baselineVersion });
|
|
138
138
|
fs.mkdirSync(flags.out, { recursive: true });
|
|
139
139
|
const fullPath = path.resolve(flags.out, filename);
|
|
140
140
|
fs.writeFileSync(fullPath, sql, 'utf8');
|
|
@@ -168,20 +168,20 @@ export default class BaselineBuild extends Command {
|
|
|
168
168
|
}
|
|
169
169
|
return { baselineVersion: explicit, generatedAtUtc: new Date(), autoSource: null };
|
|
170
170
|
}
|
|
171
|
-
const sourceDir = flags['source-dir'] ??
|
|
171
|
+
const sourceDir = flags['source-dir'] ?? DiscoverMigrationsSourceDir(process.cwd());
|
|
172
172
|
if (!sourceDir) {
|
|
173
173
|
this.error('No --baseline-version provided and could not auto-discover a migrations directory. ' +
|
|
174
174
|
'Pass --source-dir or --baseline-version.');
|
|
175
175
|
}
|
|
176
|
-
const latest =
|
|
176
|
+
const latest = FindLatestVersionedMigration(sourceDir);
|
|
177
177
|
if (!latest) {
|
|
178
178
|
this.error(`No V-files found in ${sourceDir}. Pass --baseline-version explicitly or point --source-dir at a folder with V<ts>__v<Major>.<Minor>...sql migrations.`);
|
|
179
179
|
}
|
|
180
|
-
const { generatedAtUtc } =
|
|
180
|
+
const { generatedAtUtc } = ComputeAutoBaselineStamp(latest.Timestamp);
|
|
181
181
|
return {
|
|
182
|
-
baselineVersion: latest.
|
|
182
|
+
baselineVersion: latest.MajorMinor,
|
|
183
183
|
generatedAtUtc,
|
|
184
|
-
autoSource: { filename: latest.
|
|
184
|
+
autoSource: { filename: latest.Filename, timestamp: latest.Timestamp },
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/baseline/build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/baseline/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,13 @@ import * as fs from 'node:fs';
|
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import ora from 'ora-classic';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
6
|
+
import { ResolveConnection, IsTty } from '../../baseline/cli-helpers.js';
|
|
7
|
+
import { OpenConnection } from '../../baseline/connection.js';
|
|
8
|
+
import { IntrospectMssql } from '../../baseline/introspector-mssql.js';
|
|
9
|
+
import { IntrospectPostgres } from '../../baseline/introspector-postgres.js';
|
|
10
|
+
import { DumpTables } from '../../baseline/data-dumper.js';
|
|
11
|
+
import { CompareSnapshots } from '../../baseline/comparator.js';
|
|
12
|
+
import { RenderJson, RenderMarkdown } from '../../baseline/report.js';
|
|
13
13
|
export default class BaselineCompare extends Command {
|
|
14
14
|
static { this.description = 'Deterministically compare two databases object-by-object and row-by-row.'; }
|
|
15
15
|
static { this.examples = [
|
|
@@ -50,7 +50,7 @@ export default class BaselineCompare extends Command {
|
|
|
50
50
|
async run() {
|
|
51
51
|
const { flags } = await this.parse(BaselineCompare);
|
|
52
52
|
const dialect = flags.dialect;
|
|
53
|
-
const useSpinner =
|
|
53
|
+
const useSpinner = IsTty();
|
|
54
54
|
const spinner = useSpinner ? ora() : null;
|
|
55
55
|
const phase = (text) => {
|
|
56
56
|
if (spinner) {
|
|
@@ -63,23 +63,23 @@ export default class BaselineCompare extends Command {
|
|
|
63
63
|
};
|
|
64
64
|
const succeed = (text) => spinner ? spinner.succeed(text) : this.log(`✓ ${text}`);
|
|
65
65
|
const fail = (text) => spinner ? spinner.fail(text) : this.logToStderr(`✗ ${text}`);
|
|
66
|
-
const leftParams =
|
|
67
|
-
const rightParams =
|
|
68
|
-
phase(`Connecting (${leftParams.
|
|
69
|
-
const left = await
|
|
70
|
-
const right = await
|
|
66
|
+
const leftParams = ResolveConnection({ database: flags.left }, dialect);
|
|
67
|
+
const rightParams = ResolveConnection({ database: flags.right }, dialect);
|
|
68
|
+
phase(`Connecting (${leftParams.Database} & ${rightParams.Database})`);
|
|
69
|
+
const left = await OpenConnection(leftParams);
|
|
70
|
+
const right = await OpenConnection(rightParams);
|
|
71
71
|
succeed(`Connected to both databases`);
|
|
72
72
|
try {
|
|
73
|
-
phase(`Introspecting ${leftParams.
|
|
73
|
+
phase(`Introspecting ${leftParams.Database}`);
|
|
74
74
|
const leftSnapshot = dialect === 'mssql'
|
|
75
|
-
? await
|
|
76
|
-
: await
|
|
77
|
-
succeed(`${leftParams.
|
|
78
|
-
phase(`Introspecting ${rightParams.
|
|
75
|
+
? await IntrospectMssql(left)
|
|
76
|
+
: await IntrospectPostgres(left);
|
|
77
|
+
succeed(`${leftParams.Database}: ${leftSnapshot.Tables.length} tables, ${leftSnapshot.Views.length} views`);
|
|
78
|
+
phase(`Introspecting ${rightParams.Database}`);
|
|
79
79
|
const rightSnapshot = dialect === 'mssql'
|
|
80
|
-
? await
|
|
81
|
-
: await
|
|
82
|
-
succeed(`${rightParams.
|
|
80
|
+
? await IntrospectMssql(right)
|
|
81
|
+
: await IntrospectPostgres(right);
|
|
82
|
+
succeed(`${rightParams.Database}: ${rightSnapshot.Tables.length} tables, ${rightSnapshot.Views.length} views`);
|
|
83
83
|
const rowMode = flags['row-compare'];
|
|
84
84
|
let leftDumps = [];
|
|
85
85
|
let rightDumps = [];
|
|
@@ -88,21 +88,21 @@ export default class BaselineCompare extends Command {
|
|
|
88
88
|
this.warn('row data dump streaming optimised for MSSQL; PG path uses cursor fallback.');
|
|
89
89
|
}
|
|
90
90
|
phase(`Dumping rows (left)`);
|
|
91
|
-
leftDumps = await
|
|
92
|
-
succeed(`Dumped ${leftDumps.reduce((s, d) => s + d.
|
|
91
|
+
leftDumps = await DumpTables(left, leftSnapshot.Tables, { ExcludedTables: new Set() });
|
|
92
|
+
succeed(`Dumped ${leftDumps.reduce((s, d) => s + d.RowCount, 0).toLocaleString()} rows from ${leftParams.Database}`);
|
|
93
93
|
phase(`Dumping rows (right)`);
|
|
94
|
-
rightDumps = await
|
|
95
|
-
succeed(`Dumped ${rightDumps.reduce((s, d) => s + d.
|
|
94
|
+
rightDumps = await DumpTables(right, rightSnapshot.Tables, { ExcludedTables: new Set() });
|
|
95
|
+
succeed(`Dumped ${rightDumps.reduce((s, d) => s + d.RowCount, 0).toLocaleString()} rows from ${rightParams.Database}`);
|
|
96
96
|
}
|
|
97
97
|
phase('Comparing');
|
|
98
|
-
const report =
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
const report = CompareSnapshots({
|
|
99
|
+
Left: { snapshot: leftSnapshot, data: leftDumps, label: leftParams.Database },
|
|
100
|
+
Right: { snapshot: rightSnapshot, data: rightDumps, label: rightParams.Database },
|
|
101
|
+
Options: {
|
|
102
|
+
RowCompareMode: rowMode,
|
|
103
|
+
RowHashAlgo: flags['row-hash-algo'],
|
|
104
|
+
IgnorePattern: flags.ignore ? new RegExp(flags.ignore, 'i') : undefined,
|
|
105
|
+
RowDiffSampleLimit: flags['sample-limit'],
|
|
106
106
|
},
|
|
107
107
|
});
|
|
108
108
|
report.isClean ? succeed('Comparison complete: CLEAN') : fail(`Comparison complete: ${report.summary.objectsWithDiffs} object diff(s), ${report.summary.totalRowDiffs} row diff(s)`);
|
|
@@ -111,14 +111,14 @@ export default class BaselineCompare extends Command {
|
|
|
111
111
|
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
112
112
|
const jsonPath = path.resolve(flags.out, `baseline-compare-${stamp}.json`);
|
|
113
113
|
const mdPath = path.resolve(flags.out, `baseline-compare-${stamp}.md`);
|
|
114
|
-
fs.writeFileSync(jsonPath,
|
|
115
|
-
fs.writeFileSync(mdPath,
|
|
114
|
+
fs.writeFileSync(jsonPath, RenderJson(report), 'utf8');
|
|
115
|
+
fs.writeFileSync(mdPath, RenderMarkdown(report), 'utf8');
|
|
116
116
|
this.log('');
|
|
117
117
|
this.log(chalk.dim(` Reports: ${jsonPath}`));
|
|
118
118
|
this.log(chalk.dim(` ${mdPath}`));
|
|
119
119
|
}
|
|
120
120
|
else {
|
|
121
|
-
process.stdout.write(
|
|
121
|
+
process.stdout.write(RenderMarkdown(report));
|
|
122
122
|
}
|
|
123
123
|
if (flags['fail-on-diff'] && !report.isClean) {
|
|
124
124
|
this.exit(2);
|
|
@@ -4,15 +4,15 @@ import * as fs from 'node:fs';
|
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
import ora from 'ora-classic';
|
|
6
6
|
import chalk from 'chalk';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
7
|
+
import { ResolveConnection, IsTty } from '../../baseline/cli-helpers.js';
|
|
8
|
+
import { OpenConnection } from '../../baseline/connection.js';
|
|
9
|
+
import { IntrospectMssql } from '../../baseline/introspector-mssql.js';
|
|
10
|
+
import { IntrospectPostgres } from '../../baseline/introspector-postgres.js';
|
|
11
|
+
import { DumpTables } from '../../baseline/data-dumper.js';
|
|
12
|
+
import { EmitBaselineTsql } from '../../baseline/emitter.js';
|
|
13
|
+
import { CompareSnapshots } from '../../baseline/comparator.js';
|
|
14
|
+
import { RenderJson, RenderMarkdown } from '../../baseline/report.js';
|
|
15
|
+
import { BaselineFilename, ComputeAutoBaselineStamp, DiscoverMigrationsSourceDir, FindLatestVersionedMigration, } from '../../baseline/util.js';
|
|
16
16
|
export default class BaselineRoundtrip extends Command {
|
|
17
17
|
static { this.description = 'Build a baseline from a V-stack database, apply it to a fresh DB, and prove byte-equivalence.'; }
|
|
18
18
|
static { this.examples = [
|
|
@@ -66,7 +66,7 @@ export default class BaselineRoundtrip extends Command {
|
|
|
66
66
|
this.log(chalk.dim(` Auto timestamp : ${autoSource.timestamp} + 1m`));
|
|
67
67
|
}
|
|
68
68
|
const dialect = flags.dialect;
|
|
69
|
-
const useSpinner =
|
|
69
|
+
const useSpinner = IsTty();
|
|
70
70
|
const spinner = useSpinner ? ora() : null;
|
|
71
71
|
const phase = (text) => { if (spinner) {
|
|
72
72
|
spinner.text = text;
|
|
@@ -77,20 +77,20 @@ export default class BaselineRoundtrip extends Command {
|
|
|
77
77
|
this.log(`• ${text}`); };
|
|
78
78
|
const succeed = (text) => spinner ? spinner.succeed(text) : this.log(`✓ ${text}`);
|
|
79
79
|
const fail = (text) => spinner ? spinner.fail(text) : this.logToStderr(`✗ ${text}`);
|
|
80
|
-
const sourceParams =
|
|
80
|
+
const sourceParams = ResolveConnection({ database: flags.source }, 'mssql');
|
|
81
81
|
fs.mkdirSync(flags.out, { recursive: true });
|
|
82
82
|
// 1. Introspect source + dump rows
|
|
83
|
-
phase(`Connecting to ${sourceParams.
|
|
84
|
-
const sourceDb = await
|
|
83
|
+
phase(`Connecting to ${sourceParams.Database} (gold)`);
|
|
84
|
+
const sourceDb = await OpenConnection(sourceParams);
|
|
85
85
|
let sourceSnapshot;
|
|
86
86
|
let sourceDumps;
|
|
87
87
|
try {
|
|
88
|
-
succeed(`Connected to ${sourceParams.
|
|
88
|
+
succeed(`Connected to ${sourceParams.Database}`);
|
|
89
89
|
phase('Introspecting gold database');
|
|
90
|
-
sourceSnapshot = await
|
|
90
|
+
sourceSnapshot = await IntrospectMssql(sourceDb);
|
|
91
91
|
succeed(`Gold: ${sourceSnapshot.tables.length} tables`);
|
|
92
92
|
phase('Dumping all rows from gold');
|
|
93
|
-
sourceDumps = await
|
|
93
|
+
sourceDumps = await DumpTables(sourceDb, sourceSnapshot.tables, { ExcludedTables: new Set() });
|
|
94
94
|
succeed(`Gold: dumped ${sourceDumps.reduce((s, d) => s + d.rowCount, 0).toLocaleString()} rows`);
|
|
95
95
|
}
|
|
96
96
|
finally {
|
|
@@ -98,10 +98,10 @@ export default class BaselineRoundtrip extends Command {
|
|
|
98
98
|
}
|
|
99
99
|
// 2. Emit baseline
|
|
100
100
|
phase('Emitting baseline SQL');
|
|
101
|
-
const sql =
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
const sql = EmitBaselineTsql({
|
|
102
|
+
Snapshot: sourceSnapshot,
|
|
103
|
+
DataDumps: sourceDumps,
|
|
104
|
+
Options: {
|
|
105
105
|
baselineVersion,
|
|
106
106
|
description: flags.description,
|
|
107
107
|
generatedAtUtc,
|
|
@@ -110,7 +110,7 @@ export default class BaselineRoundtrip extends Command {
|
|
|
110
110
|
batchSize: 1000,
|
|
111
111
|
},
|
|
112
112
|
});
|
|
113
|
-
const filename =
|
|
113
|
+
const filename = BaselineFilename({ generatedAtUtc, baselineVersion });
|
|
114
114
|
const baselinePath = path.resolve(flags.out, filename);
|
|
115
115
|
fs.writeFileSync(baselinePath, sql, 'utf8');
|
|
116
116
|
succeed(`Baseline emitted: ${baselinePath}`);
|
|
@@ -137,33 +137,33 @@ export default class BaselineRoundtrip extends Command {
|
|
|
137
137
|
applyPath = pgPath;
|
|
138
138
|
}
|
|
139
139
|
// 4. Apply baseline to target
|
|
140
|
-
const targetParams =
|
|
141
|
-
phase(`Applying baseline to ${targetParams.
|
|
140
|
+
const targetParams = ResolveConnection({ database: flags.target }, dialect);
|
|
141
|
+
phase(`Applying baseline to ${targetParams.Database}`);
|
|
142
142
|
const applyResult = applyBaseline(applyPath, targetParams, flags['apply-cmd']);
|
|
143
143
|
if (applyResult.status !== 0) {
|
|
144
144
|
fail(`Apply failed (exit ${applyResult.status})`);
|
|
145
145
|
throw new Error('Baseline apply failed');
|
|
146
146
|
}
|
|
147
|
-
succeed(`Applied baseline to ${targetParams.
|
|
147
|
+
succeed(`Applied baseline to ${targetParams.Database}`);
|
|
148
148
|
// 5. Compare target vs source
|
|
149
149
|
phase('Re-introspecting target for comparison');
|
|
150
|
-
const targetDb = await
|
|
150
|
+
const targetDb = await OpenConnection(targetParams);
|
|
151
151
|
let report;
|
|
152
152
|
try {
|
|
153
153
|
const targetSnapshot = dialect === 'mssql'
|
|
154
|
-
? await
|
|
155
|
-
: await
|
|
156
|
-
const targetDumps = await
|
|
157
|
-
succeed(`Target: ${targetSnapshot.
|
|
154
|
+
? await IntrospectMssql(targetDb)
|
|
155
|
+
: await IntrospectPostgres(targetDb);
|
|
156
|
+
const targetDumps = await DumpTables(targetDb, targetSnapshot.Tables, { ExcludedTables: new Set() });
|
|
157
|
+
succeed(`Target: ${targetSnapshot.Tables.length} tables, ${targetDumps.reduce((s, d) => s + d.RowCount, 0).toLocaleString()} rows`);
|
|
158
158
|
phase('Comparing snapshots');
|
|
159
|
-
report =
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
159
|
+
report = CompareSnapshots({
|
|
160
|
+
Left: { snapshot: sourceSnapshot, data: sourceDumps, label: sourceParams.Database },
|
|
161
|
+
Right: { snapshot: targetSnapshot, data: targetDumps, label: targetParams.Database },
|
|
162
|
+
Options: {
|
|
163
|
+
RowCompareMode: flags['row-compare'],
|
|
164
|
+
RowHashAlgo: 'sha256',
|
|
165
|
+
IgnorePattern: /^flyway_schema_history$/i,
|
|
166
|
+
RowDiffSampleLimit: 100,
|
|
167
167
|
},
|
|
168
168
|
});
|
|
169
169
|
report.isClean
|
|
@@ -176,8 +176,8 @@ export default class BaselineRoundtrip extends Command {
|
|
|
176
176
|
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
177
177
|
const jsonPath = path.resolve(flags.out, `baseline-compare-${stamp}.json`);
|
|
178
178
|
const mdPath = path.resolve(flags.out, `baseline-compare-${stamp}.md`);
|
|
179
|
-
fs.writeFileSync(jsonPath,
|
|
180
|
-
fs.writeFileSync(mdPath,
|
|
179
|
+
fs.writeFileSync(jsonPath, RenderJson(report), 'utf8');
|
|
180
|
+
fs.writeFileSync(mdPath, RenderMarkdown(report), 'utf8');
|
|
181
181
|
this.log('');
|
|
182
182
|
this.log(chalk.bold(report.isClean ? chalk.green('ROUNDTRIP CLEAN ✓') : chalk.red('ROUNDTRIP HAS DIFFS ✗')));
|
|
183
183
|
this.log(chalk.dim(` Baseline : ${baselinePath}`));
|
|
@@ -196,35 +196,37 @@ export default class BaselineRoundtrip extends Command {
|
|
|
196
196
|
}
|
|
197
197
|
return { baselineVersion: explicit, generatedAtUtc: new Date(), autoSource: null };
|
|
198
198
|
}
|
|
199
|
-
const sourceDir = flags['source-dir'] ??
|
|
199
|
+
const sourceDir = flags['source-dir'] ?? DiscoverMigrationsSourceDir(process.cwd());
|
|
200
200
|
if (!sourceDir) {
|
|
201
201
|
this.error('No --baseline-version provided and could not auto-discover a migrations directory. ' +
|
|
202
202
|
'Pass --source-dir or --baseline-version.');
|
|
203
203
|
}
|
|
204
|
-
const latest =
|
|
204
|
+
const latest = FindLatestVersionedMigration(sourceDir);
|
|
205
205
|
if (!latest) {
|
|
206
206
|
this.error(`No V-files found in ${sourceDir}. Pass --baseline-version explicitly or point --source-dir at a folder with V<ts>__v<Major>.<Minor>...sql migrations.`);
|
|
207
207
|
}
|
|
208
|
-
const { generatedAtUtc } =
|
|
208
|
+
const { generatedAtUtc } = ComputeAutoBaselineStamp(latest.Timestamp);
|
|
209
209
|
return {
|
|
210
|
-
baselineVersion: latest.
|
|
210
|
+
baselineVersion: latest.MajorMinor,
|
|
211
211
|
generatedAtUtc,
|
|
212
|
-
autoSource: { filename: latest.
|
|
212
|
+
autoSource: { filename: latest.Filename, timestamp: latest.Timestamp },
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
function applyBaseline(file, params, applyCmd) {
|
|
217
217
|
if (applyCmd) {
|
|
218
|
-
|
|
218
|
+
// Function replacements: this builds a SHELL command, and a string replacement expands `$&`
|
|
219
|
+
// and friends in the path or database name rather than inserting them.
|
|
220
|
+
const cmd = applyCmd.replace('{file}', () => file).replace('{database}', () => params.Database);
|
|
219
221
|
const result = spawnSync('sh', ['-c', cmd], { stdio: 'inherit' });
|
|
220
222
|
return { status: result.status };
|
|
221
223
|
}
|
|
222
|
-
if (params.
|
|
224
|
+
if (params.Dialect === 'mssql') {
|
|
223
225
|
const args = [
|
|
224
|
-
'-S', `${params.
|
|
225
|
-
'-U', params.
|
|
226
|
-
'-P', params.
|
|
227
|
-
'-d', params.
|
|
226
|
+
'-S', `${params.Host},${params.port ?? 1433}`,
|
|
227
|
+
'-U', params.User,
|
|
228
|
+
'-P', params.Password,
|
|
229
|
+
'-d', params.Database,
|
|
228
230
|
'-i', file,
|
|
229
231
|
'-b',
|
|
230
232
|
];
|
|
@@ -234,12 +236,12 @@ function applyBaseline(file, params, applyCmd) {
|
|
|
234
236
|
return { status: result.status };
|
|
235
237
|
}
|
|
236
238
|
else {
|
|
237
|
-
const env = { ...process.env, PGPASSWORD: params.
|
|
239
|
+
const env = { ...process.env, PGPASSWORD: params.Password };
|
|
238
240
|
const args = [
|
|
239
|
-
'-h', params.
|
|
241
|
+
'-h', params.Host,
|
|
240
242
|
'-p', String(params.port ?? 5432),
|
|
241
|
-
'-U', params.
|
|
242
|
-
'-d', params.
|
|
243
|
+
'-U', params.User,
|
|
244
|
+
'-d', params.Database,
|
|
243
245
|
'-v', 'ON_ERROR_STOP=1',
|
|
244
246
|
'-f', file,
|
|
245
247
|
];
|