@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.
Files changed (197) hide show
  1. package/dist/baseline/cli-helpers.d.ts +4 -0
  2. package/dist/baseline/cli-helpers.d.ts.map +1 -1
  3. package/dist/baseline/cli-helpers.js +18 -10
  4. package/dist/baseline/cli-helpers.js.map +1 -1
  5. package/dist/baseline/comparator.d.ts +5 -3
  6. package/dist/baseline/comparator.d.ts.map +1 -1
  7. package/dist/baseline/comparator.js +142 -138
  8. package/dist/baseline/comparator.js.map +1 -1
  9. package/dist/baseline/connection.d.ts +8 -6
  10. package/dist/baseline/connection.d.ts.map +1 -1
  11. package/dist/baseline/connection.js +16 -12
  12. package/dist/baseline/connection.js.map +1 -1
  13. package/dist/baseline/data-dumper.d.ts +7 -3
  14. package/dist/baseline/data-dumper.d.ts.map +1 -1
  15. package/dist/baseline/data-dumper.js +33 -25
  16. package/dist/baseline/data-dumper.js.map +1 -1
  17. package/dist/baseline/emitter.d.ts +5 -3
  18. package/dist/baseline/emitter.d.ts.map +1 -1
  19. package/dist/baseline/emitter.js +114 -110
  20. package/dist/baseline/emitter.js.map +1 -1
  21. package/dist/baseline/index.d.ts +7 -7
  22. package/dist/baseline/index.d.ts.map +1 -1
  23. package/dist/baseline/index.js +7 -7
  24. package/dist/baseline/index.js.map +1 -1
  25. package/dist/baseline/introspector-mssql.d.ts +2 -0
  26. package/dist/baseline/introspector-mssql.d.ts.map +1 -1
  27. package/dist/baseline/introspector-mssql.js +68 -64
  28. package/dist/baseline/introspector-mssql.js.map +1 -1
  29. package/dist/baseline/introspector-postgres.d.ts +2 -0
  30. package/dist/baseline/introspector-postgres.d.ts.map +1 -1
  31. package/dist/baseline/introspector-postgres.js +34 -30
  32. package/dist/baseline/introspector-postgres.js.map +1 -1
  33. package/dist/baseline/report.d.ts +4 -0
  34. package/dist/baseline/report.d.ts.map +1 -1
  35. package/dist/baseline/report.js +25 -17
  36. package/dist/baseline/report.js.map +1 -1
  37. package/dist/baseline/types.d.ts +71 -71
  38. package/dist/baseline/util.d.ts +54 -6
  39. package/dist/baseline/util.d.ts.map +1 -1
  40. package/dist/baseline/util.js +112 -36
  41. package/dist/baseline/util.js.map +1 -1
  42. package/dist/commands/ai/actions/list.js +7 -7
  43. package/dist/commands/ai/actions/run.js +7 -7
  44. package/dist/commands/ai/agents/list.js +7 -7
  45. package/dist/commands/ai/agents/run.js +9 -9
  46. package/dist/commands/ai/audit/agent-run.js +7 -7
  47. package/dist/commands/ai/prompts/run.js +7 -7
  48. package/dist/commands/app/check-updates.js +5 -5
  49. package/dist/commands/app/disable.js +2 -2
  50. package/dist/commands/app/enable.js +2 -2
  51. package/dist/commands/app/info.js +2 -2
  52. package/dist/commands/app/install.js +2 -2
  53. package/dist/commands/app/list.js +2 -2
  54. package/dist/commands/app/remove.js +4 -4
  55. package/dist/commands/app/upgrade.js +2 -2
  56. package/dist/commands/artifacts/reclassify.js +2 -2
  57. package/dist/commands/baseline/build.js +31 -31
  58. package/dist/commands/baseline/build.js.map +1 -1
  59. package/dist/commands/baseline/compare.js +36 -36
  60. package/dist/commands/baseline/roundtrip.js +56 -54
  61. package/dist/commands/baseline/roundtrip.js.map +1 -1
  62. package/dist/commands/bundle/index.js +4 -4
  63. package/dist/commands/clean/index.js +3 -3
  64. package/dist/commands/codegen/manifest.d.ts +2 -0
  65. package/dist/commands/codegen/manifest.d.ts.map +1 -1
  66. package/dist/commands/codegen/manifest.js +8 -4
  67. package/dist/commands/codegen/manifest.js.map +1 -1
  68. package/dist/commands/dev/workspace/index.d.ts +2 -0
  69. package/dist/commands/dev/workspace/index.d.ts.map +1 -1
  70. package/dist/commands/dev/workspace/index.js +8 -4
  71. package/dist/commands/dev/workspace/index.js.map +1 -1
  72. package/dist/commands/install/claude.d.ts +2 -0
  73. package/dist/commands/install/claude.d.ts.map +1 -1
  74. package/dist/commands/install/claude.js +11 -7
  75. package/dist/commands/install/claude.js.map +1 -1
  76. package/dist/commands/install/index.js +3 -3
  77. package/dist/commands/migrate/convert.d.ts +21 -0
  78. package/dist/commands/migrate/convert.d.ts.map +1 -1
  79. package/dist/commands/migrate/convert.js +22 -6
  80. package/dist/commands/migrate/convert.js.map +1 -1
  81. package/dist/commands/migrate/create.js +2 -2
  82. package/dist/commands/migrate/index.js +16 -16
  83. package/dist/commands/sync/file-reset.js +2 -2
  84. package/dist/commands/sync/init.js +3 -3
  85. package/dist/commands/test/compare.js +6 -6
  86. package/dist/commands/test/history.js +6 -6
  87. package/dist/commands/test/list.js +6 -6
  88. package/dist/commands/test/regression/build.js +5 -5
  89. package/dist/commands/test/regression/compare.js +3 -3
  90. package/dist/commands/test/regression/down.js +4 -4
  91. package/dist/commands/test/regression/export.js +4 -4
  92. package/dist/commands/test/regression/gen-forms.js +3 -3
  93. package/dist/commands/test/regression/remote.js +10 -10
  94. package/dist/commands/test/regression/up.js +6 -6
  95. package/dist/commands/test/run.js +6 -6
  96. package/dist/commands/test/suite.js +6 -6
  97. package/dist/commands/test/validate.js +6 -6
  98. package/dist/commands/translate-sql/index.js +25 -25
  99. package/dist/commands/update/claude.js +7 -7
  100. package/dist/commands/usage.js +4 -4
  101. package/dist/config.d.ts +175 -1
  102. package/dist/config.d.ts.map +1 -1
  103. package/dist/config.js +23 -9
  104. package/dist/config.js.map +1 -1
  105. package/dist/hooks/postrun.js +2 -2
  106. package/dist/hooks/prerun.js +2 -2
  107. package/dist/hooks/prerun.js.map +1 -1
  108. package/dist/lib/claude-pack/ManagedBlockEditor.d.ts +6 -0
  109. package/dist/lib/claude-pack/ManagedBlockEditor.d.ts.map +1 -1
  110. package/dist/lib/claude-pack/ManagedBlockEditor.js +18 -6
  111. package/dist/lib/claude-pack/ManagedBlockEditor.js.map +1 -1
  112. package/dist/lib/claude-pack/PackFetcher.d.ts +8 -3
  113. package/dist/lib/claude-pack/PackFetcher.d.ts.map +1 -1
  114. package/dist/lib/claude-pack/PackFetcher.js +26 -18
  115. package/dist/lib/claude-pack/PackFetcher.js.map +1 -1
  116. package/dist/lib/claude-pack/PackInstaller.d.ts +6 -2
  117. package/dist/lib/claude-pack/PackInstaller.d.ts.map +1 -1
  118. package/dist/lib/claude-pack/PackInstaller.js +19 -13
  119. package/dist/lib/claude-pack/PackInstaller.js.map +1 -1
  120. package/dist/lib/claude-pack/PackMerger.d.ts +8 -0
  121. package/dist/lib/claude-pack/PackMerger.d.ts.map +1 -1
  122. package/dist/lib/claude-pack/PackMerger.js +63 -57
  123. package/dist/lib/claude-pack/PackMerger.js.map +1 -1
  124. package/dist/lib/claude-pack/PackOutputFormatter.d.ts +4 -0
  125. package/dist/lib/claude-pack/PackOutputFormatter.d.ts.map +1 -1
  126. package/dist/lib/claude-pack/PackOutputFormatter.js +10 -2
  127. package/dist/lib/claude-pack/PackOutputFormatter.js.map +1 -1
  128. package/dist/lib/claude-pack/PackPaths.d.ts +12 -0
  129. package/dist/lib/claude-pack/PackPaths.d.ts.map +1 -1
  130. package/dist/lib/claude-pack/PackPaths.js +31 -7
  131. package/dist/lib/claude-pack/PackPaths.js.map +1 -1
  132. package/dist/lib/claude-pack/PackTypes.d.ts +18 -14
  133. package/dist/lib/claude-pack/PackTypes.d.ts.map +1 -1
  134. package/dist/lib/claude-pack/PackTypes.js +11 -3
  135. package/dist/lib/claude-pack/PackTypes.js.map +1 -1
  136. package/dist/lib/claude-pack/SettingsMerger.d.ts +10 -0
  137. package/dist/lib/claude-pack/SettingsMerger.d.ts.map +1 -1
  138. package/dist/lib/claude-pack/SettingsMerger.js +36 -16
  139. package/dist/lib/claude-pack/SettingsMerger.js.map +1 -1
  140. package/dist/lib/cli-plugins.d.ts +2 -0
  141. package/dist/lib/cli-plugins.d.ts.map +1 -1
  142. package/dist/lib/cli-plugins.js +8 -4
  143. package/dist/lib/cli-plugins.js.map +1 -1
  144. package/dist/lib/db-preflight.d.ts +2 -0
  145. package/dist/lib/db-preflight.d.ts.map +1 -1
  146. package/dist/lib/db-preflight.js +12 -8
  147. package/dist/lib/db-preflight.js.map +1 -1
  148. package/dist/lib/db-version.d.ts +2 -0
  149. package/dist/lib/db-version.d.ts.map +1 -1
  150. package/dist/lib/db-version.js +5 -1
  151. package/dist/lib/db-version.js.map +1 -1
  152. package/dist/lib/derived-usage.d.ts +14 -8
  153. package/dist/lib/derived-usage.d.ts.map +1 -1
  154. package/dist/lib/derived-usage.js +30 -18
  155. package/dist/lib/derived-usage.js.map +1 -1
  156. package/dist/lib/domain-profiles.d.ts +4 -2
  157. package/dist/lib/domain-profiles.d.ts.map +1 -1
  158. package/dist/lib/domain-profiles.js +53 -49
  159. package/dist/lib/domain-profiles.js.map +1 -1
  160. package/dist/lib/domain-usage-command.js +4 -4
  161. package/dist/lib/dynamic-packages.d.ts +4 -2
  162. package/dist/lib/dynamic-packages.d.ts.map +1 -1
  163. package/dist/lib/dynamic-packages.js +9 -5
  164. package/dist/lib/dynamic-packages.js.map +1 -1
  165. package/dist/lib/format-compat.d.ts +9 -7
  166. package/dist/lib/format-compat.d.ts.map +1 -1
  167. package/dist/lib/format-compat.js +12 -8
  168. package/dist/lib/format-compat.js.map +1 -1
  169. package/dist/lib/interactive-guard.d.ts +16 -0
  170. package/dist/lib/interactive-guard.d.ts.map +1 -1
  171. package/dist/lib/interactive-guard.js +18 -6
  172. package/dist/lib/interactive-guard.js.map +1 -1
  173. package/dist/lib/migration-fetch.d.ts +16 -4
  174. package/dist/lib/migration-fetch.d.ts.map +1 -1
  175. package/dist/lib/migration-fetch.js +30 -18
  176. package/dist/lib/migration-fetch.js.map +1 -1
  177. package/dist/lib/regression/docker-helpers.d.ts +24 -0
  178. package/dist/lib/regression/docker-helpers.d.ts.map +1 -1
  179. package/dist/lib/regression/docker-helpers.js +46 -10
  180. package/dist/lib/regression/docker-helpers.js.map +1 -1
  181. package/dist/lib/usage-render.d.ts +6 -0
  182. package/dist/lib/usage-render.d.ts.map +1 -1
  183. package/dist/lib/usage-render.js +15 -3
  184. package/dist/lib/usage-render.js.map +1 -1
  185. package/dist/translate-sql/groundTruth.d.ts +3 -3
  186. package/dist/translate-sql/groundTruth.js +40 -40
  187. package/dist/translate-sql/reportGenerator.d.ts +7 -7
  188. package/dist/translate-sql/reportGenerator.js +18 -18
  189. package/dist/translate-sql/ruleTranslator.d.ts +3 -3
  190. package/dist/translate-sql/ruleTranslator.js +8 -8
  191. package/dist/translate-sql/ruleTranslator.js.map +1 -1
  192. package/dist/utils/open-app-context.d.ts +21 -0
  193. package/dist/utils/open-app-context.d.ts.map +1 -1
  194. package/dist/utils/open-app-context.js +26 -10
  195. package/dist/utils/open-app-context.js.map +1 -1
  196. package/oclif.manifest.json +1185 -1185
  197. 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 { buildContextUser } from '../../utils/open-app-context.js';
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 buildContextUser();
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, withNonInteractiveHandling } from '../../lib/interactive-guard.js';
4
+ import { resolveOrPrompt, WithNonInteractiveHandling } from '../../lib/interactive-guard.js';
5
5
  import ora from 'ora-classic';
6
6
  import chalk from 'chalk';
7
- import { buildOrchestratorContext } from '../../utils/open-app-context.js';
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 withNonInteractiveHandling(this, () => resolveOrPrompt({
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 buildOrchestratorContext(this, flags.verbose);
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 { buildOrchestratorContext } from '../../utils/open-app-context.js';
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 buildOrchestratorContext(this, flags.verbose, !flags['non-interactive']);
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 { getValidatedConfig } from '../../config.js';
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 = getValidatedConfig();
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 { 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';
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 = resolveConnection({ database: flags.database }, 'mssql');
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 = isTty();
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.database}@${connectionParams.host}`);
93
- const db = await openConnection(connectionParams);
92
+ phase(`Connecting to ${connectionParams.Database}@${connectionParams.Host}`);
93
+ const db = await OpenConnection(connectionParams);
94
94
  try {
95
- succeed(`Connected to ${connectionParams.database}`);
95
+ succeed(`Connected to ${connectionParams.Database}`);
96
96
  phase(`Introspecting schema`);
97
- const snapshot = await introspectMssql(db, {
97
+ const snapshot = await IntrospectMssql(db, {
98
98
  onPhase: (p) => { if (flags.verbose)
99
99
  this.log(` - ${p}`); },
100
100
  });
101
- succeed(`Introspected ${snapshot.tables.length} tables, ` +
102
- `${snapshot.views.length} views, ` +
103
- `${snapshot.procedures.length} procs, ` +
104
- `${snapshot.functions.length} functions`);
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 dumpTables(db, snapshot.tables, { excludedTables: excludedDataTables }, {
108
- onTable: (table, count) => {
107
+ const result = await DumpTables(db, snapshot.Tables, { ExcludedTables: excludedDataTables }, {
108
+ OnTable: (table, count) => {
109
109
  if (flags.verbose)
110
- this.log(` ${table.schema}.${table.name}: ${count} rows`);
110
+ this.log(` ${table.Schema}.${table.Name}: ${count} rows`);
111
111
  else if (spinner)
112
- spinner.text = `Dumping ${table.schema}.${table.name} (${count} rows)`;
112
+ spinner.text = `Dumping ${table.Schema}.${table.Name} (${count} rows)`;
113
113
  },
114
114
  });
115
- const totalRows = result.reduce((sum, d) => sum + d.rowCount, 0);
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 = emitBaselineTsql({
121
- snapshot,
122
- dataDumps: dumps,
123
- options: {
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 = baselineFilename({ generatedAtUtc, baselineVersion });
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'] ?? discoverMigrationsSourceDir(process.cwd());
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 = findLatestVersionedMigration(sourceDir);
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 } = computeAutoBaselineStamp(latest.timestamp);
180
+ const { generatedAtUtc } = ComputeAutoBaselineStamp(latest.Timestamp);
181
181
  return {
182
- baselineVersion: latest.majorMinor,
182
+ baselineVersion: latest.MajorMinor,
183
183
  generatedAtUtc,
184
- autoSource: { filename: latest.filename, timestamp: latest.timestamp },
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 { 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';
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 = isTty();
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 = 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);
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.database}`);
73
+ phase(`Introspecting ${leftParams.Database}`);
74
74
  const leftSnapshot = dialect === 'mssql'
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}`);
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 introspectMssql(right)
81
- : await introspectPostgres(right);
82
- succeed(`${rightParams.database}: ${rightSnapshot.tables.length} tables, ${rightSnapshot.views.length} views`);
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 dumpTables(left, leftSnapshot.tables, { excludedTables: new Set() });
92
- succeed(`Dumped ${leftDumps.reduce((s, d) => s + d.rowCount, 0).toLocaleString()} rows from ${leftParams.database}`);
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 dumpTables(right, rightSnapshot.tables, { excludedTables: new Set() });
95
- succeed(`Dumped ${rightDumps.reduce((s, d) => s + d.rowCount, 0).toLocaleString()} rows from ${rightParams.database}`);
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 = 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'],
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, renderJson(report), 'utf8');
115
- fs.writeFileSync(mdPath, renderMarkdown(report), 'utf8');
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(renderMarkdown(report));
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 { 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';
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 = isTty();
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 = resolveConnection({ database: flags.source }, 'mssql');
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.database} (gold)`);
84
- const sourceDb = await openConnection(sourceParams);
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.database}`);
88
+ succeed(`Connected to ${sourceParams.Database}`);
89
89
  phase('Introspecting gold database');
90
- sourceSnapshot = await introspectMssql(sourceDb);
90
+ sourceSnapshot = await IntrospectMssql(sourceDb);
91
91
  succeed(`Gold: ${sourceSnapshot.tables.length} tables`);
92
92
  phase('Dumping all rows from gold');
93
- sourceDumps = await dumpTables(sourceDb, sourceSnapshot.tables, { excludedTables: new Set() });
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 = emitBaselineTsql({
102
- snapshot: sourceSnapshot,
103
- dataDumps: sourceDumps,
104
- options: {
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 = baselineFilename({ generatedAtUtc, baselineVersion });
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 = resolveConnection({ database: flags.target }, dialect);
141
- phase(`Applying baseline to ${targetParams.database}`);
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.database}`);
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 openConnection(targetParams);
150
+ const targetDb = await OpenConnection(targetParams);
151
151
  let report;
152
152
  try {
153
153
  const targetSnapshot = dialect === 'mssql'
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`);
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 = 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,
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, renderJson(report), 'utf8');
180
- fs.writeFileSync(mdPath, renderMarkdown(report), 'utf8');
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'] ?? discoverMigrationsSourceDir(process.cwd());
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 = findLatestVersionedMigration(sourceDir);
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 } = computeAutoBaselineStamp(latest.timestamp);
208
+ const { generatedAtUtc } = ComputeAutoBaselineStamp(latest.Timestamp);
209
209
  return {
210
- baselineVersion: latest.majorMinor,
210
+ baselineVersion: latest.MajorMinor,
211
211
  generatedAtUtc,
212
- autoSource: { filename: latest.filename, timestamp: latest.timestamp },
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
- const cmd = applyCmd.replace('{file}', file).replace('{database}', params.database);
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.dialect === 'mssql') {
224
+ if (params.Dialect === 'mssql') {
223
225
  const args = [
224
- '-S', `${params.host},${params.port ?? 1433}`,
225
- '-U', params.user,
226
- '-P', params.password,
227
- '-d', params.database,
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.password };
239
+ const env = { ...process.env, PGPASSWORD: params.Password };
238
240
  const args = [
239
- '-h', params.host,
241
+ '-h', params.Host,
240
242
  '-p', String(params.port ?? 5432),
241
- '-U', params.user,
242
- '-d', params.database,
243
+ '-U', params.User,
244
+ '-d', params.Database,
243
245
  '-v', 'ON_ERROR_STOP=1',
244
246
  '-f', file,
245
247
  ];