@memberjunction/cli 5.37.0 → 5.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -0
- package/dist/baseline/cli-helpers.d.ts +12 -0
- package/dist/baseline/cli-helpers.d.ts.map +1 -0
- package/dist/baseline/cli-helpers.js +40 -0
- package/dist/baseline/cli-helpers.js.map +1 -0
- package/dist/baseline/comparator.d.ts +26 -0
- package/dist/baseline/comparator.d.ts.map +1 -0
- package/dist/baseline/comparator.js +527 -0
- package/dist/baseline/comparator.js.map +1 -0
- package/dist/baseline/connection.d.ts +39 -0
- package/dist/baseline/connection.d.ts.map +1 -0
- package/dist/baseline/connection.js +104 -0
- package/dist/baseline/connection.js.map +1 -0
- package/dist/baseline/data-dumper.d.ts +23 -0
- package/dist/baseline/data-dumper.d.ts.map +1 -0
- package/dist/baseline/data-dumper.js +94 -0
- package/dist/baseline/data-dumper.js.map +1 -0
- package/dist/baseline/emitter.d.ts +36 -0
- package/dist/baseline/emitter.d.ts.map +1 -0
- package/dist/baseline/emitter.js +512 -0
- package/dist/baseline/emitter.js.map +1 -0
- package/dist/baseline/index.d.ts +18 -0
- package/dist/baseline/index.d.ts.map +1 -0
- package/dist/baseline/index.js +14 -0
- package/dist/baseline/index.js.map +1 -0
- package/dist/baseline/introspector-mssql.d.ts +15 -0
- package/dist/baseline/introspector-mssql.d.ts.map +1 -0
- package/dist/baseline/introspector-mssql.js +673 -0
- package/dist/baseline/introspector-mssql.js.map +1 -0
- package/dist/baseline/introspector-postgres.d.ts +14 -0
- package/dist/baseline/introspector-postgres.d.ts.map +1 -0
- package/dist/baseline/introspector-postgres.js +277 -0
- package/dist/baseline/introspector-postgres.js.map +1 -0
- package/dist/baseline/report.d.ts +7 -0
- package/dist/baseline/report.d.ts.map +1 -0
- package/dist/baseline/report.js +105 -0
- package/dist/baseline/report.js.map +1 -0
- package/dist/baseline/types.d.ts +286 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +10 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/baseline/util.d.ts +112 -0
- package/dist/baseline/util.d.ts.map +1 -0
- package/dist/baseline/util.js +325 -0
- package/dist/baseline/util.js.map +1 -0
- package/dist/commands/baseline/build.d.ts +29 -0
- package/dist/commands/baseline/build.d.ts.map +1 -0
- package/dist/commands/baseline/build.js +188 -0
- package/dist/commands/baseline/build.js.map +1 -0
- package/dist/commands/baseline/compare.d.ts +19 -0
- package/dist/commands/baseline/compare.d.ts.map +1 -0
- package/dist/commands/baseline/compare.js +133 -0
- package/dist/commands/baseline/compare.js.map +1 -0
- package/dist/commands/baseline/roundtrip.d.ts +23 -0
- package/dist/commands/baseline/roundtrip.d.ts.map +1 -0
- package/dist/commands/baseline/roundtrip.js +245 -0
- package/dist/commands/baseline/roundtrip.js.map +1 -0
- package/dist/commands/test/compare.d.ts +3 -0
- package/dist/commands/test/compare.d.ts.map +1 -1
- package/dist/commands/test/compare.js +23 -3
- package/dist/commands/test/compare.js.map +1 -1
- package/dist/commands/test/regression/build.d.ts +14 -0
- package/dist/commands/test/regression/build.d.ts.map +1 -0
- package/dist/commands/test/regression/build.js +48 -0
- package/dist/commands/test/regression/build.js.map +1 -0
- package/dist/commands/test/regression/compare.d.ts +15 -0
- package/dist/commands/test/regression/compare.d.ts.map +1 -0
- package/dist/commands/test/regression/compare.js +66 -0
- package/dist/commands/test/regression/compare.js.map +1 -0
- package/dist/commands/test/regression/down.d.ts +10 -0
- package/dist/commands/test/regression/down.d.ts.map +1 -0
- package/dist/commands/test/regression/down.js +29 -0
- package/dist/commands/test/regression/down.js.map +1 -0
- package/dist/commands/test/regression/export.d.ts +11 -0
- package/dist/commands/test/regression/export.d.ts.map +1 -0
- package/dist/commands/test/regression/export.js +56 -0
- package/dist/commands/test/regression/export.js.map +1 -0
- package/dist/commands/test/regression/gen-forms.d.ts +7 -0
- package/dist/commands/test/regression/gen-forms.d.ts.map +1 -0
- package/dist/commands/test/regression/gen-forms.js +18 -0
- package/dist/commands/test/regression/gen-forms.js.map +1 -0
- package/dist/commands/test/regression/index.d.ts +7 -0
- package/dist/commands/test/regression/index.d.ts.map +1 -0
- package/dist/commands/test/regression/index.js +33 -0
- package/dist/commands/test/regression/index.js.map +1 -0
- package/dist/commands/test/regression/init.d.ts +21 -0
- package/dist/commands/test/regression/init.d.ts.map +1 -0
- package/dist/commands/test/regression/init.js +111 -0
- package/dist/commands/test/regression/init.js.map +1 -0
- package/dist/commands/test/regression/remote.d.ts +23 -0
- package/dist/commands/test/regression/remote.d.ts.map +1 -0
- package/dist/commands/test/regression/remote.js +140 -0
- package/dist/commands/test/regression/remote.js.map +1 -0
- package/dist/commands/test/regression/up.d.ts +21 -0
- package/dist/commands/test/regression/up.d.ts.map +1 -0
- package/dist/commands/test/regression/up.js +111 -0
- package/dist/commands/test/regression/up.js.map +1 -0
- package/dist/commands/test/run.d.ts +1 -0
- package/dist/commands/test/run.d.ts.map +1 -1
- package/dist/commands/test/run.js +6 -0
- package/dist/commands/test/run.js.map +1 -1
- package/dist/commands/test/suite.d.ts +5 -0
- package/dist/commands/test/suite.d.ts.map +1 -1
- package/dist/commands/test/suite.js +27 -0
- package/dist/commands/test/suite.js.map +1 -1
- package/dist/commands/translate-sql/index.d.ts.map +1 -1
- package/dist/commands/translate-sql/index.js +3 -2
- package/dist/commands/translate-sql/index.js.map +1 -1
- package/dist/init-templates/bring-your-own-app/README.md +74 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/.mj-sync.json +10 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.byo-suite.json +51 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T01-counter-increment.json +63 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T02-contact-form-submit.json +63 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/bring-your-own-app/docker-compose.app.yml +76 -0
- package/dist/init-templates/bring-your-own-app/target.json +23 -0
- package/dist/init-templates/generic-web/README.md +115 -0
- package/dist/init-templates/generic-web/metadata/.mj-sync.json +10 -0
- package/dist/init-templates/generic-web/metadata/test-suites/.generic-web-suite.json +48 -0
- package/dist/init-templates/generic-web/metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/generic-web/metadata/tests/.GW01-home-loads.json +74 -0
- package/dist/init-templates/generic-web/metadata/tests/.GW02-search-array-map.json +82 -0
- package/dist/init-templates/generic-web/metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/generic-web/oracles/mdn-oracles.cjs +121 -0
- package/dist/init-templates/generic-web/target.json +25 -0
- package/dist/init-templates/github-actions/README.md +26 -0
- package/dist/init-templates/github-actions/regression.yml +52 -0
- package/dist/init-templates/remote-mj/README.md +95 -0
- package/dist/init-templates/remote-mj/target.json +22 -0
- package/dist/init-templates/static-file-server/Dockerfile +23 -0
- package/dist/init-templates/static-file-server/README.md +88 -0
- package/dist/init-templates/static-file-server/docker-compose.app.yml +44 -0
- package/dist/init-templates/static-file-server/metadata/.mj-sync.json +10 -0
- package/dist/init-templates/static-file-server/metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/static-file-server/metadata/test-suites/.static-server-suite.json +27 -0
- package/dist/init-templates/static-file-server/metadata/tests/.SS01-home-loads.json +45 -0
- package/dist/init-templates/static-file-server/metadata/tests/.SS02-navigate-about.json +45 -0
- package/dist/init-templates/static-file-server/metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/static-file-server/public/about.html +12 -0
- package/dist/init-templates/static-file-server/public/index.html +27 -0
- package/dist/init-templates/static-file-server/target.json +16 -0
- package/dist/lib/regression/docker-helpers.d.ts +98 -0
- package/dist/lib/regression/docker-helpers.d.ts.map +1 -0
- package/dist/lib/regression/docker-helpers.js +184 -0
- package/dist/lib/regression/docker-helpers.js.map +1 -0
- package/oclif.manifest.json +1356 -509
- package/package.json +22 -17
- package/regression-compose/docker-compose.bacpac-standalone.yml +109 -0
- package/regression-compose/docker-compose.standalone.yml +50 -0
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical T-SQL emitter.
|
|
3
|
+
*
|
|
4
|
+
* Produces a single, deterministic T-SQL script from a SchemaSnapshot plus
|
|
5
|
+
* (optional) per-table data dumps. The output ordering is dependency-aware
|
|
6
|
+
* and stable: identical input → byte-identical output.
|
|
7
|
+
*
|
|
8
|
+
* Order of emission:
|
|
9
|
+
* 1. Header banner
|
|
10
|
+
* 2. CREATE SCHEMA statements
|
|
11
|
+
* 3. CREATE SEQUENCE statements
|
|
12
|
+
* 4. CREATE TABLE statements (no FKs yet — those come later)
|
|
13
|
+
* 5. Default constraints
|
|
14
|
+
* 6. Check constraints
|
|
15
|
+
* 7. Indexes (non-PK, non-unique-constraint)
|
|
16
|
+
* 8. Data inserts (with SET IDENTITY_INSERT bookends)
|
|
17
|
+
* 9. Reseed identity columns
|
|
18
|
+
* 10. CREATE USER / CREATE ROLE (database principals — required before any GRANT)
|
|
19
|
+
* 11. CREATE TYPE … AS TABLE (UDTs — before functions/procs that take TVPs)
|
|
20
|
+
* 12. CREATE FUNCTION statements (before views — MJ views reference UDFs)
|
|
21
|
+
* 13. CREATE VIEW statements
|
|
22
|
+
* 14. CREATE PROCEDURE statements
|
|
23
|
+
* 15. CREATE TRIGGER statements
|
|
24
|
+
* 16. ALTER TABLE ADD CONSTRAINT … FOREIGN KEY (last so order doesn't matter)
|
|
25
|
+
* 17. ALTER ROLE … ADD MEMBER (role memberships — requires both principals to exist)
|
|
26
|
+
* 18. GRANT/DENY permissions (last so every grantee + every target object exists)
|
|
27
|
+
* 19. EXEC sp_addextendedproperty calls (after every object that can carry them)
|
|
28
|
+
*/
|
|
29
|
+
import { formatTsqlValue, isoUtcSeconds, NL, quoteIdent, quoteString, stableSortBy, topoSortRoutinesByDefinition, } from './util.js';
|
|
30
|
+
export function emitBaselineTsql(input) {
|
|
31
|
+
if (input.snapshot.dialect !== 'mssql') {
|
|
32
|
+
throw new Error('emitBaselineTsql requires an MSSQL snapshot');
|
|
33
|
+
}
|
|
34
|
+
const parts = [];
|
|
35
|
+
parts.push(emitHeader(input.options));
|
|
36
|
+
parts.push(emitSchemas(input.snapshot));
|
|
37
|
+
// Principals (users + custom roles) come right after schemas so they exist
|
|
38
|
+
// before any GRANT statement, and so AUTHORIZATION clauses on objects (if
|
|
39
|
+
// any) can resolve. They're also independent of every other object kind, so
|
|
40
|
+
// moving them early has no ordering risk.
|
|
41
|
+
parts.push(emitPrincipals(input.snapshot.principals));
|
|
42
|
+
parts.push(emitSequences(input.snapshot.sequences));
|
|
43
|
+
parts.push(emitTables(input.snapshot.tables));
|
|
44
|
+
parts.push(emitDefaults(input.snapshot.tables));
|
|
45
|
+
parts.push(emitChecks(input.snapshot.tables));
|
|
46
|
+
parts.push(emitIndexes(input.snapshot.tables));
|
|
47
|
+
if (input.options.includeData) {
|
|
48
|
+
parts.push(emitData(input.snapshot.tables, input.dataDumps, input.options.batchSize));
|
|
49
|
+
}
|
|
50
|
+
// UDTs (table types) BEFORE any routine: procs/functions accept these as TVPs
|
|
51
|
+
// and MSSQL needs the type to exist at create time.
|
|
52
|
+
parts.push(emitUserDefinedTypes(input.snapshot.userDefinedTypes));
|
|
53
|
+
// Functions before views: MJ views frequently reference scalar/table UDFs
|
|
54
|
+
// (e.g. vwActionCategories → fnActionCategoryParentID_GetRootID). MSSQL does
|
|
55
|
+
// NOT defer name resolution for view bodies, so the function must already
|
|
56
|
+
// exist when the view is created.
|
|
57
|
+
//
|
|
58
|
+
// Within each category we also topo-sort by inferred body references because
|
|
59
|
+
// views can reference other views, functions can reference other functions,
|
|
60
|
+
// etc. Cycles fall back to qname order so output stays deterministic.
|
|
61
|
+
parts.push(emitRoutines(topoSortRoutinesByDefinition(input.snapshot.functions), 'function'));
|
|
62
|
+
parts.push(emitViews(topoSortRoutinesByDefinition(input.snapshot.views)));
|
|
63
|
+
parts.push(emitRoutines(topoSortRoutinesByDefinition(input.snapshot.procedures), 'procedure'));
|
|
64
|
+
parts.push(emitTriggers(topoSortRoutinesByDefinition(input.snapshot.triggers)));
|
|
65
|
+
parts.push(emitForeignKeys(input.snapshot.tables));
|
|
66
|
+
// Role memberships come AFTER principals + all objects exist. ALTER ROLE
|
|
67
|
+
// requires both the role and the member principal to be present.
|
|
68
|
+
parts.push(emitRoleMemberships(input.snapshot.roleMemberships));
|
|
69
|
+
// Permissions come last among real DDL: GRANT validates that both the
|
|
70
|
+
// grantee principal AND the target object (table/view/proc/etc.) exist.
|
|
71
|
+
parts.push(emitPermissions(input.snapshot.permissions));
|
|
72
|
+
// Extended properties LAST: every object they reference must already exist,
|
|
73
|
+
// since sp_addextendedproperty validates the target.
|
|
74
|
+
parts.push(emitExtendedProperties(input.snapshot.extendedProperties));
|
|
75
|
+
parts.push(emitFooter());
|
|
76
|
+
return parts.filter((p) => p.length > 0).join(NL + NL) + NL;
|
|
77
|
+
}
|
|
78
|
+
function emitHeader(options) {
|
|
79
|
+
return [
|
|
80
|
+
`-- ============================================================================`,
|
|
81
|
+
`-- ${options.description}`,
|
|
82
|
+
`-- Baseline version : v${options.baselineVersion}.x`,
|
|
83
|
+
`-- Generated at : ${isoUtcSeconds(options.generatedAtUtc)}`,
|
|
84
|
+
`-- Generator : @memberjunction/cli baseline build`,
|
|
85
|
+
`-- ============================================================================`,
|
|
86
|
+
`SET ANSI_NULLS ON;`,
|
|
87
|
+
`SET QUOTED_IDENTIFIER ON;`,
|
|
88
|
+
`SET NOCOUNT ON;`,
|
|
89
|
+
`GO`,
|
|
90
|
+
].join(NL);
|
|
91
|
+
}
|
|
92
|
+
function emitFooter() {
|
|
93
|
+
return `-- End of baseline.${NL}GO`;
|
|
94
|
+
}
|
|
95
|
+
function emitSchemas(snapshot) {
|
|
96
|
+
const schemas = stableSortBy(snapshot.schemas, (s) => s.name.toLowerCase());
|
|
97
|
+
if (schemas.length === 0)
|
|
98
|
+
return '';
|
|
99
|
+
const lines = ['-- Schemas'];
|
|
100
|
+
for (const schema of schemas) {
|
|
101
|
+
if (schema.name.toLowerCase() === 'dbo')
|
|
102
|
+
continue;
|
|
103
|
+
lines.push(`IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = ${quoteString(schema.name)})`);
|
|
104
|
+
lines.push(` EXEC('CREATE SCHEMA ${quoteIdent(schema.name)}');`);
|
|
105
|
+
lines.push(`GO`);
|
|
106
|
+
}
|
|
107
|
+
return lines.join(NL);
|
|
108
|
+
}
|
|
109
|
+
function emitSequences(sequences) {
|
|
110
|
+
if (sequences.length === 0)
|
|
111
|
+
return '';
|
|
112
|
+
const lines = ['-- Sequences'];
|
|
113
|
+
for (const seq of sequences) {
|
|
114
|
+
const min = seq.minValue ? ` MINVALUE ${seq.minValue}` : '';
|
|
115
|
+
const max = seq.maxValue ? ` MAXVALUE ${seq.maxValue}` : '';
|
|
116
|
+
const cycle = seq.cycle ? ' CYCLE' : ' NO CYCLE';
|
|
117
|
+
lines.push(`CREATE SEQUENCE ${quoteIdent(seq.schema)}.${quoteIdent(seq.name)} ` +
|
|
118
|
+
`AS BIGINT START WITH ${seq.startValue} INCREMENT BY ${seq.increment}${min}${max}${cycle};`);
|
|
119
|
+
lines.push(`GO`);
|
|
120
|
+
}
|
|
121
|
+
return lines.join(NL);
|
|
122
|
+
}
|
|
123
|
+
function emitTables(tables) {
|
|
124
|
+
if (tables.length === 0)
|
|
125
|
+
return '';
|
|
126
|
+
const sections = ['-- Tables'];
|
|
127
|
+
for (const t of tables) {
|
|
128
|
+
sections.push(emitCreateTable(t));
|
|
129
|
+
}
|
|
130
|
+
return sections.join(NL + NL);
|
|
131
|
+
}
|
|
132
|
+
function emitCreateTable(t) {
|
|
133
|
+
const lines = [];
|
|
134
|
+
lines.push(`CREATE TABLE ${quoteIdent(t.schema)}.${quoteIdent(t.name)} (`);
|
|
135
|
+
const columnLines = [];
|
|
136
|
+
for (const c of t.columns) {
|
|
137
|
+
columnLines.push(' ' + columnDefinition(c));
|
|
138
|
+
}
|
|
139
|
+
if (t.primaryKey) {
|
|
140
|
+
const cluster = t.primaryKey.clustered ? 'CLUSTERED' : 'NONCLUSTERED';
|
|
141
|
+
columnLines.push(` CONSTRAINT ${quoteIdent(t.primaryKey.name)} PRIMARY KEY ${cluster} ` +
|
|
142
|
+
`(${t.primaryKey.columns.map((n) => quoteIdent(n)).join(', ')})`);
|
|
143
|
+
}
|
|
144
|
+
for (const u of t.uniqueConstraints) {
|
|
145
|
+
const cluster = u.clustered ? 'CLUSTERED' : 'NONCLUSTERED';
|
|
146
|
+
columnLines.push(` CONSTRAINT ${quoteIdent(u.name)} UNIQUE ${cluster} ` +
|
|
147
|
+
`(${u.columns.map((n) => quoteIdent(n)).join(', ')})`);
|
|
148
|
+
}
|
|
149
|
+
lines.push(columnLines.join(',' + NL));
|
|
150
|
+
lines.push(');');
|
|
151
|
+
lines.push('GO');
|
|
152
|
+
return lines.join(NL);
|
|
153
|
+
}
|
|
154
|
+
function columnDefinition(c) {
|
|
155
|
+
if (c.isComputed && c.computedExpression) {
|
|
156
|
+
// sys.computed_columns.is_persisted is captured in the introspector now;
|
|
157
|
+
// emit PERSISTED so the target column has the same plan/index eligibility.
|
|
158
|
+
const persisted = c.isComputedPersisted ? ' PERSISTED' : '';
|
|
159
|
+
// The introspector hands us the body inside parens already? No — `cc.definition`
|
|
160
|
+
// returns the body WITHOUT outer parens for some shapes. Wrap defensively.
|
|
161
|
+
const body = c.computedExpression.trim();
|
|
162
|
+
const wrapped = body.startsWith('(') && body.endsWith(')') ? body : `(${body})`;
|
|
163
|
+
return `${quoteIdent(c.name)} AS ${wrapped}${persisted}`;
|
|
164
|
+
}
|
|
165
|
+
const parts = [quoteIdent(c.name), c.dataType.toUpperCase()];
|
|
166
|
+
if (c.collation && c.dataType.toLowerCase().includes('char')) {
|
|
167
|
+
parts.push(`COLLATE ${c.collation}`);
|
|
168
|
+
}
|
|
169
|
+
if (c.isIdentity)
|
|
170
|
+
parts.push('IDENTITY(1,1)');
|
|
171
|
+
parts.push(c.isNullable ? 'NULL' : 'NOT NULL');
|
|
172
|
+
return parts.join(' ');
|
|
173
|
+
}
|
|
174
|
+
function emitDefaults(tables) {
|
|
175
|
+
const stmts = [];
|
|
176
|
+
for (const t of tables) {
|
|
177
|
+
for (const c of t.columns) {
|
|
178
|
+
if (c.defaultExpression && !c.isComputed) {
|
|
179
|
+
// Use the original constraint name if the introspector captured it
|
|
180
|
+
// (it should, for every default — `sys.default_constraints.name`).
|
|
181
|
+
// Fall back to the synthetic format only for hand-built test fixtures.
|
|
182
|
+
const constraintName = c.defaultConstraintName ?? `DF_${t.schema}_${t.name}_${c.name}`;
|
|
183
|
+
stmts.push(`ALTER TABLE ${quoteIdent(t.schema)}.${quoteIdent(t.name)} ` +
|
|
184
|
+
`ADD CONSTRAINT ${quoteIdent(constraintName)} DEFAULT ${c.defaultExpression} ` +
|
|
185
|
+
`FOR ${quoteIdent(c.name)};`);
|
|
186
|
+
stmts.push('GO');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (stmts.length === 0)
|
|
191
|
+
return '';
|
|
192
|
+
return ['-- Default constraints', ...stmts].join(NL);
|
|
193
|
+
}
|
|
194
|
+
function emitChecks(tables) {
|
|
195
|
+
const stmts = [];
|
|
196
|
+
for (const t of tables) {
|
|
197
|
+
for (const c of t.checks) {
|
|
198
|
+
stmts.push(`ALTER TABLE ${quoteIdent(t.schema)}.${quoteIdent(t.name)} ` +
|
|
199
|
+
`ADD CONSTRAINT ${quoteIdent(c.name)} CHECK ${c.expression};`);
|
|
200
|
+
stmts.push('GO');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (stmts.length === 0)
|
|
204
|
+
return '';
|
|
205
|
+
return ['-- Check constraints', ...stmts].join(NL);
|
|
206
|
+
}
|
|
207
|
+
function emitIndexes(tables) {
|
|
208
|
+
const stmts = [];
|
|
209
|
+
for (const t of tables) {
|
|
210
|
+
for (const idx of t.indexes) {
|
|
211
|
+
stmts.push(emitCreateIndex(t, idx));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (stmts.length === 0)
|
|
215
|
+
return '';
|
|
216
|
+
return ['-- Indexes', ...stmts].join(NL);
|
|
217
|
+
}
|
|
218
|
+
function emitCreateIndex(t, idx) {
|
|
219
|
+
const unique = idx.isUnique ? 'UNIQUE ' : '';
|
|
220
|
+
const cluster = idx.isClustered ? 'CLUSTERED' : 'NONCLUSTERED';
|
|
221
|
+
const cols = idx.columns.map((n) => quoteIdent(n)).join(', ');
|
|
222
|
+
const incl = idx.includes.length ? ` INCLUDE (${idx.includes.map((n) => quoteIdent(n)).join(', ')})` : '';
|
|
223
|
+
const filter = idx.filter ? ` WHERE ${idx.filter}` : '';
|
|
224
|
+
return (`CREATE ${unique}${cluster} INDEX ${quoteIdent(idx.name)} ON ` +
|
|
225
|
+
`${quoteIdent(t.schema)}.${quoteIdent(t.name)} (${cols})${incl}${filter};${NL}GO`);
|
|
226
|
+
}
|
|
227
|
+
function emitForeignKeys(tables) {
|
|
228
|
+
const stmts = [];
|
|
229
|
+
for (const t of tables) {
|
|
230
|
+
for (const fk of t.foreignKeys) {
|
|
231
|
+
stmts.push(emitForeignKey(t, fk));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (stmts.length === 0)
|
|
235
|
+
return '';
|
|
236
|
+
return ['-- Foreign keys', ...stmts].join(NL);
|
|
237
|
+
}
|
|
238
|
+
function emitForeignKey(t, fk) {
|
|
239
|
+
const cols = fk.columns.map((n) => quoteIdent(n)).join(', ');
|
|
240
|
+
const refCols = fk.referencedColumns.map((n) => quoteIdent(n)).join(', ');
|
|
241
|
+
const onDelete = fk.onDelete !== 'NO_ACTION' ? ` ON DELETE ${fk.onDelete.replace('_', ' ')}` : '';
|
|
242
|
+
const onUpdate = fk.onUpdate !== 'NO_ACTION' ? ` ON UPDATE ${fk.onUpdate.replace('_', ' ')}` : '';
|
|
243
|
+
return (`ALTER TABLE ${quoteIdent(t.schema)}.${quoteIdent(t.name)} ` +
|
|
244
|
+
`ADD CONSTRAINT ${quoteIdent(fk.name)} FOREIGN KEY (${cols}) ` +
|
|
245
|
+
`REFERENCES ${quoteIdent(fk.referencedSchema)}.${quoteIdent(fk.referencedTable)} (${refCols})` +
|
|
246
|
+
`${onDelete}${onUpdate};${NL}GO`);
|
|
247
|
+
}
|
|
248
|
+
function emitData(tables, dumps, batchSize) {
|
|
249
|
+
const dumpByKey = new Map(dumps.map((d) => [`${d.schema}.${d.table}`.toLowerCase(), d]));
|
|
250
|
+
const sections = ['-- Data'];
|
|
251
|
+
for (const t of tables) {
|
|
252
|
+
const dump = dumpByKey.get(`${t.schema}.${t.name}`.toLowerCase());
|
|
253
|
+
if (!dump || dump.rows.length === 0)
|
|
254
|
+
continue;
|
|
255
|
+
sections.push(emitTableData(t, dump, batchSize));
|
|
256
|
+
}
|
|
257
|
+
return sections.join(NL + NL);
|
|
258
|
+
}
|
|
259
|
+
function emitTableData(table, dump, batchSize) {
|
|
260
|
+
const lines = [];
|
|
261
|
+
const tableRef = `${quoteIdent(table.schema)}.${quoteIdent(table.name)}`;
|
|
262
|
+
const colList = dump.columns.map((n) => quoteIdent(n)).join(', ');
|
|
263
|
+
if (table.hasIdentity) {
|
|
264
|
+
lines.push(`SET IDENTITY_INSERT ${tableRef} ON;`);
|
|
265
|
+
lines.push('GO');
|
|
266
|
+
}
|
|
267
|
+
for (let i = 0; i < dump.rows.length; i += batchSize) {
|
|
268
|
+
const batch = dump.rows.slice(i, i + batchSize);
|
|
269
|
+
const valuesLines = batch.map((row) => ' (' + row.map(formatTsqlValue).join(', ') + ')');
|
|
270
|
+
lines.push(`INSERT INTO ${tableRef} (${colList}) VALUES`);
|
|
271
|
+
lines.push(valuesLines.join(',' + NL) + ';');
|
|
272
|
+
lines.push('GO');
|
|
273
|
+
}
|
|
274
|
+
if (table.hasIdentity) {
|
|
275
|
+
lines.push(`SET IDENTITY_INSERT ${tableRef} OFF;`);
|
|
276
|
+
lines.push('GO');
|
|
277
|
+
// Reseed to the maximum key so future inserts don't collide.
|
|
278
|
+
const idCol = table.columns.find((c) => c.isIdentity);
|
|
279
|
+
if (idCol) {
|
|
280
|
+
lines.push(`DECLARE @max_${table.name.replace(/\W/g, '_')} BIGINT;`);
|
|
281
|
+
lines.push(`SELECT @max_${table.name.replace(/\W/g, '_')} = MAX(${quoteIdent(idCol.name)}) FROM ${tableRef};`);
|
|
282
|
+
lines.push(`IF @max_${table.name.replace(/\W/g, '_')} IS NOT NULL ` +
|
|
283
|
+
`DBCC CHECKIDENT (${quoteString(`${table.schema}.${table.name}`)}, RESEED, ` +
|
|
284
|
+
`@max_${table.name.replace(/\W/g, '_')});`);
|
|
285
|
+
lines.push('GO');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return lines.join(NL);
|
|
289
|
+
}
|
|
290
|
+
function emitViews(views) {
|
|
291
|
+
if (views.length === 0)
|
|
292
|
+
return '';
|
|
293
|
+
// The trailing `GO` after the section header is REQUIRED: MSSQL stores the
|
|
294
|
+
// entire batch text (including leading comments) in OBJECT_DEFINITION(), so
|
|
295
|
+
// without this the first view's body would contain `-- Views\n` as a prefix
|
|
296
|
+
// and the comparator would flag a body-mismatch against the source DB whose
|
|
297
|
+
// V-stack-created view body has no such prefix.
|
|
298
|
+
const lines = ['-- Views', 'GO'];
|
|
299
|
+
for (const v of views) {
|
|
300
|
+
if (!v.definition.trim())
|
|
301
|
+
continue;
|
|
302
|
+
lines.push(v.definition.trim());
|
|
303
|
+
lines.push('GO');
|
|
304
|
+
}
|
|
305
|
+
return lines.join(NL);
|
|
306
|
+
}
|
|
307
|
+
function emitRoutines(routines, _kind) {
|
|
308
|
+
if (routines.length === 0)
|
|
309
|
+
return '';
|
|
310
|
+
// Same comment-leak fix as emitViews — see comment there.
|
|
311
|
+
const lines = [`-- ${routines[0].kind === 'procedure' ? 'Procedures' : 'Functions'}`, 'GO'];
|
|
312
|
+
for (const r of routines) {
|
|
313
|
+
if (!r.definition.trim())
|
|
314
|
+
continue;
|
|
315
|
+
lines.push(r.definition.trim());
|
|
316
|
+
lines.push('GO');
|
|
317
|
+
}
|
|
318
|
+
return lines.join(NL);
|
|
319
|
+
}
|
|
320
|
+
function emitTriggers(triggers) {
|
|
321
|
+
if (triggers.length === 0)
|
|
322
|
+
return '';
|
|
323
|
+
// Same comment-leak fix as emitViews — see comment there.
|
|
324
|
+
const lines = ['-- Triggers', 'GO'];
|
|
325
|
+
for (const t of triggers) {
|
|
326
|
+
if (!t.definition.trim())
|
|
327
|
+
continue;
|
|
328
|
+
lines.push(t.definition.trim());
|
|
329
|
+
lines.push('GO');
|
|
330
|
+
}
|
|
331
|
+
return lines.join(NL);
|
|
332
|
+
}
|
|
333
|
+
function emitUserDefinedTypes(types) {
|
|
334
|
+
if (types.length === 0)
|
|
335
|
+
return '';
|
|
336
|
+
const lines = ['-- User-defined types (table types)'];
|
|
337
|
+
for (const t of stableSortBy(types, (u) => `${u.schema}.${u.name}`.toLowerCase())) {
|
|
338
|
+
if (t.isMemoryOptimized) {
|
|
339
|
+
// MEMORY_OPTIMIZED table types require a hash/range index in their body.
|
|
340
|
+
// MJ doesn't use them today; if that changes we'll need to capture the
|
|
341
|
+
// bucket-count + index columns and emit the proper WITH (...) clause.
|
|
342
|
+
throw new Error(`User-defined type ${t.schema}.${t.name} is MEMORY_OPTIMIZED — emitter has no path for that yet.`);
|
|
343
|
+
}
|
|
344
|
+
const colLines = [];
|
|
345
|
+
for (const c of t.columns) {
|
|
346
|
+
const parts = [quoteIdent(c.name), c.dataType.toUpperCase()];
|
|
347
|
+
// CREATE TYPE AS TABLE accepts COLLATE only on char-family columns, same as CREATE TABLE.
|
|
348
|
+
if (c.collation && /char|text/.test(c.dataType.toLowerCase())) {
|
|
349
|
+
parts.push(`COLLATE ${c.collation}`);
|
|
350
|
+
}
|
|
351
|
+
parts.push(c.isNullable ? 'NULL' : 'NOT NULL');
|
|
352
|
+
colLines.push(' ' + parts.join(' '));
|
|
353
|
+
}
|
|
354
|
+
if (t.primaryKey) {
|
|
355
|
+
// Table types can't have a named PK constraint — the name is auto-generated
|
|
356
|
+
// by MSSQL. Use the inline `PRIMARY KEY (...)` clause.
|
|
357
|
+
const cluster = t.primaryKey.clustered ? 'CLUSTERED' : 'NONCLUSTERED';
|
|
358
|
+
colLines.push(` PRIMARY KEY ${cluster} (${t.primaryKey.columns.map((n) => quoteIdent(n)).join(', ')})`);
|
|
359
|
+
}
|
|
360
|
+
lines.push(`CREATE TYPE ${quoteIdent(t.schema)}.${quoteIdent(t.name)} AS TABLE (`);
|
|
361
|
+
lines.push(colLines.join(',' + NL));
|
|
362
|
+
lines.push(');');
|
|
363
|
+
lines.push('GO');
|
|
364
|
+
}
|
|
365
|
+
return lines.join(NL);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Emit `sp_addextendedproperty` calls. MJ uses these for MS_Description on
|
|
369
|
+
* schemas, tables, columns, views, procs, functions, and triggers. The level0
|
|
370
|
+
* is always SCHEMA; level1/level2 distinguish the target's kind and depth.
|
|
371
|
+
*
|
|
372
|
+
* We don't use `IF NOT EXISTS … sp_updateextendedproperty` style guards — the
|
|
373
|
+
* baseline applies to an empty DB by contract, so a straight `sp_addextendedproperty`
|
|
374
|
+
* is the right call.
|
|
375
|
+
*/
|
|
376
|
+
function emitExtendedProperties(props) {
|
|
377
|
+
if (props.length === 0)
|
|
378
|
+
return '';
|
|
379
|
+
const lines = ['-- Extended properties (descriptions etc.)'];
|
|
380
|
+
for (const p of props) {
|
|
381
|
+
const args = [
|
|
382
|
+
`@name = ${quoteString(p.name)}`,
|
|
383
|
+
`@value = ${quoteString(p.value)}`,
|
|
384
|
+
`@level0type = N'SCHEMA', @level0name = ${quoteString(p.schemaName)}`,
|
|
385
|
+
];
|
|
386
|
+
if (p.level1Type) {
|
|
387
|
+
args.push(`@level1type = N'${p.level1Type}', @level1name = ${quoteString(p.level1Name ?? '')}`);
|
|
388
|
+
}
|
|
389
|
+
if (p.level2Type) {
|
|
390
|
+
args.push(`@level2type = N'${p.level2Type}', @level2name = ${quoteString(p.level2Name ?? '')}`);
|
|
391
|
+
}
|
|
392
|
+
lines.push(`EXEC sp_addextendedproperty ${args.join(', ')};`);
|
|
393
|
+
lines.push('GO');
|
|
394
|
+
}
|
|
395
|
+
return lines.join(NL);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Emit CREATE USER + CREATE ROLE statements.
|
|
399
|
+
*
|
|
400
|
+
* Mirrors the v5.0 baseline's pattern exactly:
|
|
401
|
+
* - SQL users use the EngineEdition-aware conditional: on Azure SQL DB
|
|
402
|
+
* (EngineEdition=5) create as contained user; otherwise check the server
|
|
403
|
+
* login and create FOR LOGIN if it exists, WITHOUT LOGIN otherwise.
|
|
404
|
+
* - Roles use `IF DATABASE_PRINCIPAL_ID(...) IS NULL CREATE ROLE …
|
|
405
|
+
* AUTHORIZATION [db_securityadmin]` so the owner matches what the source
|
|
406
|
+
* DB has (where MJ's cdp_* roles are owned by db_securityadmin).
|
|
407
|
+
*
|
|
408
|
+
* Order within the section: roles first (so users can be members at creation
|
|
409
|
+
* if any future migration wanted to do that — currently the data shows none),
|
|
410
|
+
* then users.
|
|
411
|
+
*/
|
|
412
|
+
function emitPrincipals(principals) {
|
|
413
|
+
if (principals.length === 0)
|
|
414
|
+
return '';
|
|
415
|
+
const lines = ['-- Database principals (users + custom roles)', 'GO'];
|
|
416
|
+
const roles = principals.filter((p) => p.kind === 'database_role' || p.kind === 'application_role');
|
|
417
|
+
const users = principals.filter((p) => p.kind !== 'database_role' && p.kind !== 'application_role');
|
|
418
|
+
for (const r of stableSortBy(roles, (p) => p.name.toLowerCase())) {
|
|
419
|
+
const authClause = r.owner ? ` AUTHORIZATION ${quoteIdent(r.owner)}` : '';
|
|
420
|
+
lines.push(`IF DATABASE_PRINCIPAL_ID(${quoteString(r.name)}) IS NULL`);
|
|
421
|
+
lines.push(` EXEC('CREATE ROLE ${quoteIdent(r.name)}${authClause}');`);
|
|
422
|
+
lines.push('GO');
|
|
423
|
+
}
|
|
424
|
+
for (const u of stableSortBy(users, (p) => p.name.toLowerCase())) {
|
|
425
|
+
// Windows / AAD users have a different `CREATE USER` syntax (no FOR LOGIN);
|
|
426
|
+
// emit them straight if the principal isn't already in the DB.
|
|
427
|
+
if (u.kind === 'windows_user' || u.kind === 'aad_user' || u.kind === 'aad_group') {
|
|
428
|
+
lines.push(`IF DATABASE_PRINCIPAL_ID(${quoteString(u.name)}) IS NULL`);
|
|
429
|
+
lines.push(` EXEC('CREATE USER ${quoteIdent(u.name)} FROM EXTERNAL PROVIDER');`);
|
|
430
|
+
lines.push('GO');
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
// SQL users: mirror v5.0's conditional FOR LOGIN / WITHOUT LOGIN pattern.
|
|
434
|
+
// Wrapped in `IF DATABASE_PRINCIPAL_ID(...) IS NULL` so the whole block
|
|
435
|
+
// is idempotent when the baseline is re-applied (e.g. for diagnostics).
|
|
436
|
+
lines.push(`IF DATABASE_PRINCIPAL_ID(${quoteString(u.name)}) IS NULL`);
|
|
437
|
+
lines.push('BEGIN');
|
|
438
|
+
lines.push(` DECLARE @login_exists_${safeSuffix(u.name)} BIT = 0;`);
|
|
439
|
+
lines.push(` IF SERVERPROPERTY('EngineEdition') = 5 SET @login_exists_${safeSuffix(u.name)} = 1; ` +
|
|
440
|
+
`ELSE IF EXISTS (SELECT 1 FROM master.sys.server_principals WHERE name = ${quoteString(u.name)}) ` +
|
|
441
|
+
`SET @login_exists_${safeSuffix(u.name)} = 1;`);
|
|
442
|
+
lines.push(` IF @login_exists_${safeSuffix(u.name)} = 1`);
|
|
443
|
+
lines.push(` EXEC('CREATE USER ${quoteIdent(u.name)} FOR LOGIN ${quoteIdent(u.name)}');`);
|
|
444
|
+
lines.push(' ELSE');
|
|
445
|
+
lines.push(` EXEC('CREATE USER ${quoteIdent(u.name)} WITHOUT LOGIN');`);
|
|
446
|
+
lines.push('END');
|
|
447
|
+
lines.push('GO');
|
|
448
|
+
}
|
|
449
|
+
return lines.join(NL);
|
|
450
|
+
}
|
|
451
|
+
/** Safe identifier suffix for variable names embedded inside an IF block. */
|
|
452
|
+
function safeSuffix(name) {
|
|
453
|
+
return name.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Emit ALTER ROLE … ADD MEMBER statements, each guarded by IS_ROLEMEMBER so
|
|
457
|
+
* the baseline is safe to re-apply (and tolerant of orderings where Skyway
|
|
458
|
+
* itself may have created a partial state on retry).
|
|
459
|
+
*/
|
|
460
|
+
function emitRoleMemberships(memberships) {
|
|
461
|
+
if (memberships.length === 0)
|
|
462
|
+
return '';
|
|
463
|
+
const lines = ['-- Role memberships', 'GO'];
|
|
464
|
+
for (const m of stableSortBy(memberships, (x) => `${x.role}|${x.member}`.toLowerCase())) {
|
|
465
|
+
lines.push(`IF IS_ROLEMEMBER(${quoteString(m.role)}, ${quoteString(m.member)}) = 0`);
|
|
466
|
+
lines.push(` ALTER ROLE ${quoteIdent(m.role)} ADD MEMBER ${quoteIdent(m.member)};`);
|
|
467
|
+
lines.push('GO');
|
|
468
|
+
}
|
|
469
|
+
return lines.join(NL);
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Emit GRANT/DENY statements. Class-specific syntax:
|
|
473
|
+
* DATABASE: GRANT <perm> TO [grantee]
|
|
474
|
+
* SCHEMA: GRANT <perm> ON SCHEMA::[schema] TO [grantee]
|
|
475
|
+
* OBJECT: GRANT <perm> ON [schema].[object] TO [grantee] (most common)
|
|
476
|
+
* GRANT <perm> ([column]) ON [schema].[object] TO [grantee] (column-level)
|
|
477
|
+
* TYPE: GRANT <perm> ON TYPE::[schema].[type] TO [grantee]
|
|
478
|
+
*
|
|
479
|
+
* GRANT is idempotent in SQL Server (repeated GRANTs are no-ops on permission rows),
|
|
480
|
+
* so we don't need IF guards. WITH GRANT OPTION is appended for `GRANT_WITH_GRANT_OPTION`.
|
|
481
|
+
*/
|
|
482
|
+
function emitPermissions(perms) {
|
|
483
|
+
if (perms.length === 0)
|
|
484
|
+
return '';
|
|
485
|
+
const lines = ['-- Permissions', 'GO'];
|
|
486
|
+
for (const p of perms) {
|
|
487
|
+
lines.push(formatPermission(p) + ';');
|
|
488
|
+
lines.push('GO');
|
|
489
|
+
}
|
|
490
|
+
return lines.join(NL);
|
|
491
|
+
}
|
|
492
|
+
function formatPermission(p) {
|
|
493
|
+
const verb = p.state === 'DENY' ? 'DENY' :
|
|
494
|
+
p.state === 'REVOKE' ? 'REVOKE' : 'GRANT';
|
|
495
|
+
const tail = p.state === 'GRANT_WITH_GRANT_OPTION' ? ' WITH GRANT OPTION' : '';
|
|
496
|
+
const grantee = quoteIdent(p.grantee);
|
|
497
|
+
const perm = p.permission;
|
|
498
|
+
const colClause = p.targetColumn ? ` (${quoteIdent(p.targetColumn)})` : '';
|
|
499
|
+
switch (p.targetClass) {
|
|
500
|
+
case 'database':
|
|
501
|
+
return `${verb} ${perm} TO ${grantee}${tail}`;
|
|
502
|
+
case 'schema':
|
|
503
|
+
return `${verb} ${perm} ON SCHEMA::${quoteIdent(p.targetSchema)} TO ${grantee}${tail}`;
|
|
504
|
+
case 'type':
|
|
505
|
+
return `${verb} ${perm} ON TYPE::${quoteIdent(p.targetSchema)}.${quoteIdent(p.targetType)} TO ${grantee}${tail}`;
|
|
506
|
+
case 'object':
|
|
507
|
+
default:
|
|
508
|
+
return (`${verb} ${perm}${colClause} ON ${quoteIdent(p.targetSchema)}.${quoteIdent(p.targetObject)} ` +
|
|
509
|
+
`TO ${grantee}${tail}`);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
//# sourceMappingURL=emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/baseline/emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface for the baseline migration builder + comparator.
|
|
3
|
+
* Imported by the `mj baseline ...` oclif commands.
|
|
4
|
+
*/
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
export * from './util.js';
|
|
7
|
+
export { introspectMssql } from './introspector-mssql.js';
|
|
8
|
+
export { introspectPostgres } from './introspector-postgres.js';
|
|
9
|
+
export { dumpTables } from './data-dumper.js';
|
|
10
|
+
export type { DumpProgress, DumpOptions } from './data-dumper.js';
|
|
11
|
+
export { emitBaselineTsql } from './emitter.js';
|
|
12
|
+
export type { EmitInput } from './emitter.js';
|
|
13
|
+
export { compareSnapshots } from './comparator.js';
|
|
14
|
+
export type { CompareInput } from './comparator.js';
|
|
15
|
+
export { renderJson, renderMarkdown } from './report.js';
|
|
16
|
+
export { openConnection } from './connection.js';
|
|
17
|
+
export type { DbConnectionParams, DbConnectionOverrides, QueryRunner } from './connection.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface for the baseline migration builder + comparator.
|
|
3
|
+
* Imported by the `mj baseline ...` oclif commands.
|
|
4
|
+
*/
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
export * from './util.js';
|
|
7
|
+
export { introspectMssql } from './introspector-mssql.js';
|
|
8
|
+
export { introspectPostgres } from './introspector-postgres.js';
|
|
9
|
+
export { dumpTables } from './data-dumper.js';
|
|
10
|
+
export { emitBaselineTsql } from './emitter.js';
|
|
11
|
+
export { compareSnapshots } from './comparator.js';
|
|
12
|
+
export { renderJson, renderMarkdown } from './report.js';
|
|
13
|
+
export { openConnection } from './connection.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MSSQL introspector.
|
|
3
|
+
*
|
|
4
|
+
* Returns a normalized SchemaSnapshot. All object bodies (views, procs,
|
|
5
|
+
* functions, triggers) are pulled via OBJECT_DEFINITION() so they are
|
|
6
|
+
* byte-faithful to what the database actually has — no AST round-trip.
|
|
7
|
+
*/
|
|
8
|
+
import type { QueryRunner } from './connection.js';
|
|
9
|
+
import type { SchemaSnapshot } from './types.js';
|
|
10
|
+
interface Progress {
|
|
11
|
+
onPhase?(phase: string, count?: number): void;
|
|
12
|
+
}
|
|
13
|
+
export declare function introspectMssql(db: QueryRunner, progress?: Progress): Promise<SchemaSnapshot>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=introspector-mssql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspector-mssql.d.ts","sourceRoot":"","sources":["../../src/baseline/introspector-mssql.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAWV,cAAc,EAQf,MAAM,SAAS,CAAC;AAEjB,UAAU,QAAQ;IAChB,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,GAAE,QAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA2DvG"}
|