chkit 0.1.0-beta.14 → 0.1.0-beta.16
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/bin/chkit.js +10 -151
- package/dist/bin/chkit.js.map +1 -1
- package/dist/bin/clickhouse-resource.d.ts +4 -0
- package/dist/bin/clickhouse-resource.d.ts.map +1 -0
- package/dist/bin/clickhouse-resource.js +11 -0
- package/dist/bin/clickhouse-resource.js.map +1 -0
- package/dist/bin/command-dispatch.d.ts +18 -0
- package/dist/bin/command-dispatch.d.ts.map +1 -0
- package/dist/bin/command-dispatch.js +159 -0
- package/dist/bin/command-dispatch.js.map +1 -0
- package/dist/bin/commands/check.d.ts +1 -1
- package/dist/bin/commands/check.d.ts.map +1 -1
- package/dist/bin/commands/check.js +145 -105
- package/dist/bin/commands/check.js.map +1 -1
- package/dist/bin/commands/drift.d.ts.map +1 -1
- package/dist/bin/commands/drift.js +54 -53
- package/dist/bin/commands/drift.js.map +1 -1
- package/dist/bin/commands/migrate.d.ts.map +1 -1
- package/dist/bin/commands/migrate.js +173 -170
- package/dist/bin/commands/migrate.js.map +1 -1
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +38 -35
- package/dist/bin/commands/status.js.map +1 -1
- package/dist/bin/journal-store.d.ts.map +1 -1
- package/dist/bin/journal-store.js +39 -9
- package/dist/bin/journal-store.js.map +1 -1
- package/dist/bin/safety-markers.d.ts.map +1 -1
- package/dist/bin/safety-markers.js +82 -5
- package/dist/bin/safety-markers.js.map +1 -1
- package/dist/drift.d.ts.map +1 -1
- package/dist/drift.js +2 -1
- package/dist/drift.js.map +1 -1
- package/package.json +5 -4
|
@@ -3,9 +3,10 @@ import { join } from 'node:path';
|
|
|
3
3
|
import process from 'node:process';
|
|
4
4
|
import { createInterface } from 'node:readline/promises';
|
|
5
5
|
import { defineFlags, typedFlags } from '../../plugins.js';
|
|
6
|
+
import { withClickHouseExecutor } from '../clickhouse-resource.js';
|
|
6
7
|
import { GLOBAL_FLAGS } from '../global-flags.js';
|
|
7
8
|
import { emitJson } from '../json-output.js';
|
|
8
|
-
import {
|
|
9
|
+
import { createJournalStore } from '../journal-store.js';
|
|
9
10
|
import { checksumSQL, findChecksumMismatches, listMigrations, readSnapshot, } from '../migration-store.js';
|
|
10
11
|
import { collectDestructiveOperationMarkers, extractExecutableStatements, extractMigrationOperationSummaries, migrationContainsDangerOperation, } from '../safety-markers.js';
|
|
11
12
|
import { databaseKeyFromOperationKey, resolveTableScope, tableKeyFromOperationKey, tableKeysFromDefinitions } from '../table-scope.js';
|
|
@@ -79,192 +80,194 @@ async function cmdMigrate(ctx) {
|
|
|
79
80
|
if (!config.clickhouse) {
|
|
80
81
|
throw new Error('clickhouse config is required for migrate (journal is stored in ClickHouse)');
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (tableScope.enabled && tableScope.matchCount === 0) {
|
|
114
|
-
if (jsonMode) {
|
|
115
|
-
emitJson('migrate', {
|
|
116
|
-
mode: executeRequested ? 'execute' : 'plan',
|
|
117
|
-
scope: tableScope,
|
|
118
|
-
pending: [],
|
|
119
|
-
applied: [],
|
|
120
|
-
warning: `No tables matched selector "${tableScope.selector ?? ''}".`,
|
|
121
|
-
});
|
|
83
|
+
await withClickHouseExecutor(config.clickhouse, async (db) => {
|
|
84
|
+
const journalStore = createJournalStore(db);
|
|
85
|
+
const snapshot = await readSnapshot(metaDir);
|
|
86
|
+
const tableScope = resolveTableScope(tableSelector, tableKeysFromDefinitions(snapshot?.definitions ?? []));
|
|
87
|
+
await pluginRuntime.runOnConfigLoaded({
|
|
88
|
+
command: 'migrate',
|
|
89
|
+
config,
|
|
90
|
+
configPath,
|
|
91
|
+
tableScope,
|
|
92
|
+
flags,
|
|
93
|
+
});
|
|
94
|
+
await mkdir(migrationsDir, { recursive: true });
|
|
95
|
+
const files = await listMigrations(migrationsDir);
|
|
96
|
+
const journal = await journalStore.readJournal();
|
|
97
|
+
const appliedNames = new Set(journal.applied.map((entry) => entry.name));
|
|
98
|
+
const pendingAll = files.filter((f) => !appliedNames.has(f));
|
|
99
|
+
const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
|
|
100
|
+
if (checksumMismatches.length > 0) {
|
|
101
|
+
if (jsonMode) {
|
|
102
|
+
emitJson('migrate', {
|
|
103
|
+
mode: executeRequested ? 'execute' : 'plan',
|
|
104
|
+
scope: tableScope,
|
|
105
|
+
error: 'Checksum mismatch detected on applied migrations',
|
|
106
|
+
checksumMismatches,
|
|
107
|
+
});
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
throw new Error(`Checksum mismatch detected on applied migrations: ${checksumMismatches
|
|
112
|
+
.map((item) => item.name)
|
|
113
|
+
.join(', ')}`);
|
|
122
114
|
}
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
if (tableScope.enabled && tableScope.matchCount === 0) {
|
|
116
|
+
if (jsonMode) {
|
|
117
|
+
emitJson('migrate', {
|
|
118
|
+
mode: executeRequested ? 'execute' : 'plan',
|
|
119
|
+
scope: tableScope,
|
|
120
|
+
pending: [],
|
|
121
|
+
applied: [],
|
|
122
|
+
warning: `No tables matched selector "${tableScope.selector ?? ''}".`,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log(`No tables matched selector "${tableScope.selector ?? ''}". No migrations selected.`);
|
|
127
|
+
}
|
|
128
|
+
return;
|
|
125
129
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
const pending = tableScope.enabled
|
|
131
|
+
? await filterPendingByScope(migrationsDir, pendingAll, new Set(tableScope.matchedTables))
|
|
132
|
+
: pendingAll;
|
|
133
|
+
if (pending.length === 0) {
|
|
134
|
+
if (jsonMode) {
|
|
135
|
+
emitJson('migrate', {
|
|
136
|
+
mode: executeRequested ? 'execute' : 'plan',
|
|
137
|
+
scope: tableScope,
|
|
138
|
+
pending: [],
|
|
139
|
+
applied: [],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.log('No pending migrations.');
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
139
146
|
}
|
|
140
|
-
|
|
141
|
-
|
|
147
|
+
const planned = {
|
|
148
|
+
mode: executeRequested ? 'execute' : 'plan',
|
|
149
|
+
scope: tableScope,
|
|
150
|
+
pending,
|
|
151
|
+
};
|
|
152
|
+
if (jsonMode && !executeRequested) {
|
|
153
|
+
emitJson('migrate', planned);
|
|
154
|
+
return;
|
|
142
155
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (!jsonMode) {
|
|
155
|
-
if (tableScope.enabled) {
|
|
156
|
-
console.log(`Table scope: ${tableScope.selector ?? ''} (${tableScope.matchCount} matched)`);
|
|
157
|
-
for (const table of tableScope.matchedTables)
|
|
158
|
-
console.log(`- ${table}`);
|
|
156
|
+
if (!jsonMode) {
|
|
157
|
+
if (tableScope.enabled) {
|
|
158
|
+
console.log(`Table scope: ${tableScope.selector ?? ''} (${tableScope.matchCount} matched)`);
|
|
159
|
+
for (const table of tableScope.matchedTables)
|
|
160
|
+
console.log(`- ${table}`);
|
|
161
|
+
}
|
|
162
|
+
console.log(`Pending migrations: ${pending.length}`);
|
|
163
|
+
for (const file of pending)
|
|
164
|
+
console.log(`- ${file}`);
|
|
159
165
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
let shouldExecute = executeRequested;
|
|
167
|
+
if (!shouldExecute) {
|
|
168
|
+
if (isBackgroundOrCI() || jsonMode) {
|
|
169
|
+
if (!jsonMode) {
|
|
170
|
+
console.log('\nPlan only. Re-run with --apply to apply and journal these migrations.');
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
175
|
+
try {
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log('Type "yes" to continue. Any other input cancels.');
|
|
178
|
+
const response = await rl.question('Apply pending migrations now? [no/yes]: ');
|
|
179
|
+
shouldExecute = response.trim().toLowerCase() === 'yes';
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
rl.close();
|
|
183
|
+
}
|
|
184
|
+
if (!shouldExecute) {
|
|
185
|
+
console.log('Migration apply cancelled by user.');
|
|
186
|
+
return;
|
|
169
187
|
}
|
|
170
|
-
return;
|
|
171
188
|
}
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
189
|
+
const destructiveMigrations = [];
|
|
190
|
+
const destructiveOperations = [];
|
|
191
|
+
for (const file of pending) {
|
|
192
|
+
const sql = await readFile(join(migrationsDir, file), 'utf8');
|
|
193
|
+
if (migrationContainsDangerOperation(sql)) {
|
|
194
|
+
destructiveMigrations.push(file);
|
|
195
|
+
destructiveOperations.push(...collectDestructiveOperationMarkers(file, sql));
|
|
196
|
+
}
|
|
178
197
|
}
|
|
179
|
-
|
|
180
|
-
|
|
198
|
+
let destructiveAllowed = allowDestructive || config.safety?.allowDestructive === true;
|
|
199
|
+
if (destructiveMigrations.length > 0 && !destructiveAllowed) {
|
|
200
|
+
const error = 'Blocked destructive migration execution. Re-run with --allow-destructive or set safety.allowDestructive=true after review.';
|
|
201
|
+
if (jsonMode) {
|
|
202
|
+
emitJson('migrate', {
|
|
203
|
+
mode: 'execute',
|
|
204
|
+
scope: tableScope,
|
|
205
|
+
error,
|
|
206
|
+
destructiveMigrations,
|
|
207
|
+
destructiveOperations,
|
|
208
|
+
});
|
|
209
|
+
process.exitCode = 3;
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (isBackgroundOrCI()) {
|
|
213
|
+
printDestructiveOperationDetails(destructiveOperations);
|
|
214
|
+
throw new Error(`${error}\nDestructive migrations: ${destructiveMigrations.join(', ')}\n` +
|
|
215
|
+
'Non-interactive run detected. Pass --allow-destructive to proceed.');
|
|
216
|
+
}
|
|
217
|
+
const confirmed = await confirmDestructiveExecution(destructiveOperations);
|
|
218
|
+
if (!confirmed) {
|
|
219
|
+
throw new Error(`Destructive migration cancelled by user.\nDestructive migrations: ${destructiveMigrations.join(', ')}`);
|
|
220
|
+
}
|
|
221
|
+
destructiveAllowed = true;
|
|
181
222
|
}
|
|
182
|
-
if (!
|
|
183
|
-
|
|
184
|
-
return;
|
|
223
|
+
if (destructiveMigrations.length > 0 && !destructiveAllowed) {
|
|
224
|
+
throw new Error('Blocked destructive migration execution.');
|
|
185
225
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
226
|
+
const appliedNow = [];
|
|
227
|
+
for (const file of pending) {
|
|
228
|
+
const fullPath = join(migrationsDir, file);
|
|
229
|
+
const sql = await readFile(fullPath, 'utf8');
|
|
230
|
+
const parsedStatements = extractExecutableStatements(sql);
|
|
231
|
+
const statements = await pluginRuntime.runOnBeforeApply({
|
|
232
|
+
command: 'migrate',
|
|
233
|
+
config,
|
|
234
|
+
tableScope,
|
|
235
|
+
flags,
|
|
236
|
+
migration: file,
|
|
237
|
+
sql,
|
|
238
|
+
statements: parsedStatements,
|
|
239
|
+
});
|
|
240
|
+
for (const statement of statements) {
|
|
241
|
+
await db.execute(statement);
|
|
242
|
+
}
|
|
243
|
+
const entry = {
|
|
244
|
+
name: file,
|
|
245
|
+
appliedAt: new Date().toISOString().replace('Z', ''),
|
|
246
|
+
checksum: checksumSQL(sql),
|
|
247
|
+
};
|
|
248
|
+
appliedNow.push(entry);
|
|
249
|
+
await journalStore.appendEntry(entry);
|
|
250
|
+
await pluginRuntime.runOnAfterApply({
|
|
251
|
+
command: 'migrate',
|
|
252
|
+
config,
|
|
253
|
+
tableScope,
|
|
254
|
+
flags,
|
|
255
|
+
migration: file,
|
|
256
|
+
statements,
|
|
257
|
+
appliedAt: entry.appliedAt,
|
|
258
|
+
});
|
|
259
|
+
if (!jsonMode)
|
|
260
|
+
console.log(`Applied: ${file}`);
|
|
194
261
|
}
|
|
195
|
-
}
|
|
196
|
-
let destructiveAllowed = allowDestructive || config.safety?.allowDestructive === true;
|
|
197
|
-
if (destructiveMigrations.length > 0 && !destructiveAllowed) {
|
|
198
|
-
const error = 'Blocked destructive migration execution. Re-run with --allow-destructive or set safety.allowDestructive=true after review.';
|
|
199
262
|
if (jsonMode) {
|
|
200
263
|
emitJson('migrate', {
|
|
201
264
|
mode: 'execute',
|
|
202
265
|
scope: tableScope,
|
|
203
|
-
|
|
204
|
-
destructiveMigrations,
|
|
205
|
-
destructiveOperations,
|
|
266
|
+
applied: appliedNow,
|
|
206
267
|
});
|
|
207
|
-
process.exitCode = 3;
|
|
208
268
|
return;
|
|
209
269
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
throw new Error(`${error}\nDestructive migrations: ${destructiveMigrations.join(', ')}\n` +
|
|
213
|
-
'Non-interactive run detected. Pass --allow-destructive to proceed.');
|
|
214
|
-
}
|
|
215
|
-
const confirmed = await confirmDestructiveExecution(destructiveOperations);
|
|
216
|
-
if (!confirmed) {
|
|
217
|
-
throw new Error(`Destructive migration cancelled by user.\nDestructive migrations: ${destructiveMigrations.join(', ')}`);
|
|
218
|
-
}
|
|
219
|
-
destructiveAllowed = true;
|
|
220
|
-
}
|
|
221
|
-
if (destructiveMigrations.length > 0 && !destructiveAllowed) {
|
|
222
|
-
throw new Error('Blocked destructive migration execution.');
|
|
223
|
-
}
|
|
224
|
-
const appliedNow = [];
|
|
225
|
-
for (const file of pending) {
|
|
226
|
-
const fullPath = join(migrationsDir, file);
|
|
227
|
-
const sql = await readFile(fullPath, 'utf8');
|
|
228
|
-
const parsedStatements = extractExecutableStatements(sql);
|
|
229
|
-
const statements = await pluginRuntime.runOnBeforeApply({
|
|
230
|
-
command: 'migrate',
|
|
231
|
-
config,
|
|
232
|
-
tableScope,
|
|
233
|
-
flags,
|
|
234
|
-
migration: file,
|
|
235
|
-
sql,
|
|
236
|
-
statements: parsedStatements,
|
|
237
|
-
});
|
|
238
|
-
for (const statement of statements) {
|
|
239
|
-
await db.execute(statement);
|
|
240
|
-
}
|
|
241
|
-
const entry = {
|
|
242
|
-
name: file,
|
|
243
|
-
appliedAt: new Date().toISOString().replace('Z', ''),
|
|
244
|
-
checksum: checksumSQL(sql),
|
|
245
|
-
};
|
|
246
|
-
appliedNow.push(entry);
|
|
247
|
-
await journalStore.appendEntry(entry);
|
|
248
|
-
await pluginRuntime.runOnAfterApply({
|
|
249
|
-
command: 'migrate',
|
|
250
|
-
config,
|
|
251
|
-
tableScope,
|
|
252
|
-
flags,
|
|
253
|
-
migration: file,
|
|
254
|
-
statements,
|
|
255
|
-
appliedAt: entry.appliedAt,
|
|
256
|
-
});
|
|
257
|
-
if (!jsonMode)
|
|
258
|
-
console.log(`Applied: ${file}`);
|
|
259
|
-
}
|
|
260
|
-
if (jsonMode) {
|
|
261
|
-
emitJson('migrate', {
|
|
262
|
-
mode: 'execute',
|
|
263
|
-
scope: tableScope,
|
|
264
|
-
applied: appliedNow,
|
|
265
|
-
});
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
console.log(`\nMigrations recorded in ClickHouse _chkit_migrations table.`);
|
|
270
|
+
console.log(`\nMigrations recorded in ClickHouse _chkit_migrations table.`);
|
|
271
|
+
});
|
|
269
272
|
}
|
|
270
273
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/bin/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,UAAU,EAA2C,MAAM,kBAAkB,CAAA;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,YAAY,GAEb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,kCAAkC,EAClC,gCAAgC,GAEjC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAEtI,MAAM,aAAa,GAAG,WAAW,CAAC;IAChC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oDAAoD,EAAE;IACvG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACxE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sDAAsD,EAAE;CAC7G,CAAC,CAAA;AAEX,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE,aAAa;IACpB,GAAG,EAAE,UAAU;CAChB,CAAA;AAED,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;AAC7G,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAqC;IAC7E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,OAAqC;IAC9E,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,IAAI,CAAC;QACH,gCAAgC,CAAC,OAAO,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAA;QAC9E,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;IAChD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,aAAqB,EACrB,OAAiB,EACjB,cAAmC;IAEnC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAEhG,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7D,MAAM,UAAU,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACxD,IAAI,QAAQ;gBAAE,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAEjD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3D,IAAI,QAAQ;gBAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAEpD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAsB;IAC9C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,GAAG,CAAA;IAC9D,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAU,CAAC,CAAA;IACzE,MAAM,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IACzE,MAAM,gBAAgB,GAAG,CAAC,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAA;IAC1D,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAA;IAErC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;IAChG,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,4BAA4B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC5E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,wBAAwB,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAA;IAE1G,MAAM,aAAa,CAAC,iBAAiB,CAAC;QACpC,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,UAAU;QACV,UAAU;QACV,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAA;IAChD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAE/E,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,EAAE;gBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAC3C,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,kDAAkD;gBACzD,kBAAkB;aACnB,CAAC,CAAA;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qDAAqD,kBAAkB;aACpE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAA;IACH,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,EAAE;gBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAC3C,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,+BAA+B,UAAU,CAAC,QAAQ,IAAI,EAAE,IAAI;aACtE,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,QAAQ,IAAI,EAAE,4BAA4B,CAAC,CAAA;QACnG,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO;QAChC,CAAC,CAAC,MAAM,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1F,CAAC,CAAC,UAAU,CAAA;IAEd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,EAAE;gBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAC3C,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACvC,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QAC3C,KAAK,EAAE,UAAU;QACjB,OAAO;KACR,CAAA;IAED,IAAI,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC5B,OAAM;IACR,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,QAAQ,IAAI,EAAE,KAAK,UAAU,CAAC,UAAU,WAAW,CAAC,CAAA;YAC3F,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;QACzE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACpD,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,aAAa,GAAG,gBAAgB,CAAA;IACpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,gBAAgB,EAAE,IAAI,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAA;YACxF,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5E,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;YAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAA;YAC9E,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;QACzD,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;YACjD,OAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAa,EAAE,CAAA;IAC1C,MAAM,qBAAqB,GAAiC,EAAE,CAAA;IAC9D,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7D,IAAI,gCAAgC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,qBAAqB,CAAC,IAAI,CAAC,GAAG,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,GAAG,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACrF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5D,MAAM,KAAK,GACT,4HAA4H,CAAA;QAC9H,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,EAAE;gBAClB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,UAAU;gBACjB,KAAK;gBACL,qBAAqB;gBACrB,qBAAqB;aACtB,CAAC,CAAA;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACvB,gCAAgC,CAAC,qBAAqB,CAAC,CAAA;YACvD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,6BAA6B,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACvE,oEAAoE,CACvE,CAAA;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,qBAAqB,CAAC,CAAA;QAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,qEAAqE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAA;QACH,CAAC;QACD,kBAAkB,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,UAAU,GAA4B,EAAE,CAAA;IAE9C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC1C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC5C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;QACzD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC;YACtD,OAAO,EAAE,SAAS;YAClB,MAAM;YACN,UAAU;YACV,KAAK;YACL,SAAS,EAAE,IAAI;YACf,GAAG;YACH,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAA;QACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7B,CAAC;QAED,MAAM,KAAK,GAA0B;YACnC,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YACpD,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC;SAC3B,CAAA;QACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,aAAa,CAAC,eAAe,CAAC;YAClC,OAAO,EAAE,SAAS;YAClB,MAAM;YACN,UAAU;YACV,KAAK;YACL,SAAS,EAAE,IAAI;YACf,UAAU;YACV,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,SAAS,EAAE;YAClB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,UAAU;SACpB,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;AAC7E,CAAC"}
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/bin/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,UAAU,EAA2C,MAAM,kBAAkB,CAAA;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,YAAY,GAEb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,kCAAkC,EAClC,gCAAgC,GAEjC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAEtI,MAAM,aAAa,GAAG,WAAW,CAAC;IAChC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oDAAoD,EAAE;IACvG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACxE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sDAAsD,EAAE;CAC7G,CAAC,CAAA;AAEX,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE,aAAa;IACpB,GAAG,EAAE,UAAU;CAChB,CAAA;AAED,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;AAC7G,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAqC;IAC7E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,OAAqC;IAC9E,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,IAAI,CAAC;QACH,gCAAgC,CAAC,OAAO,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAA;QAC9E,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;IAChD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,aAAqB,EACrB,OAAiB,EACjB,cAAmC;IAEnC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAEhG,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7D,MAAM,UAAU,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACxD,IAAI,QAAQ;gBAAE,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAEjD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3D,IAAI,QAAQ;gBAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAEpD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAsB;IAC9C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,GAAG,CAAA;IAC9D,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAU,CAAC,CAAA;IACzE,MAAM,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IACzE,MAAM,gBAAgB,GAAG,CAAC,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAA;IAC1D,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAA;IAErC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;IAChG,CAAC;IAED,MAAM,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,wBAAwB,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAA;QAE1G,MAAM,aAAa,CAAC,iBAAiB,CAAC;YACpC,OAAO,EAAE,SAAS;YAClB,MAAM;YACN,UAAU;YACV,UAAU;YACV,KAAK;SACN,CAAC,CAAA;QAEF,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAA;QAChD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QACxE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAE/E,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,EAAE;oBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBAC3C,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,kDAAkD;oBACzD,kBAAkB;iBACnB,CAAC,CAAA;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YACD,MAAM,IAAI,KAAK,CACb,qDAAqD,kBAAkB;iBACpE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAA;QACH,CAAC;QAED,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YACtD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,EAAE;oBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBAC3C,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,+BAA+B,UAAU,CAAC,QAAQ,IAAI,EAAE,IAAI;iBACtE,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,QAAQ,IAAI,EAAE,4BAA4B,CAAC,CAAA;YACnG,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO;YAChC,CAAC,CAAC,MAAM,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC1F,CAAC,CAAC,UAAU,CAAA;QAEd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,EAAE;oBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBAC3C,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;YACvC,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YAC3C,KAAK,EAAE,UAAU;YACjB,OAAO;SACR,CAAA;QAED,IAAI,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC5B,OAAM;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,QAAQ,IAAI,EAAE,KAAK,UAAU,CAAC,UAAU,WAAW,CAAC,CAAA;gBAC3F,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YACpD,KAAK,MAAM,IAAI,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,IAAI,aAAa,GAAG,gBAAgB,CAAA;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,gBAAgB,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAA;gBACxF,CAAC;gBACD,OAAM;YACR,CAAC;YAED,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5E,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACf,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;gBAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAA;gBAC9E,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;YACzD,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAA;YACZ,CAAC;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;gBACjD,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,qBAAqB,GAAa,EAAE,CAAA;QAC1C,MAAM,qBAAqB,GAAiC,EAAE,CAAA;QAC9D,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;YAC7D,IAAI,gCAAgC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChC,qBAAqB,CAAC,IAAI,CAAC,GAAG,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,GAAG,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;QACrF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5D,MAAM,KAAK,GACT,4HAA4H,CAAA;YAC9H,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,EAAE;oBAClB,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,UAAU;oBACjB,KAAK;oBACL,qBAAqB;oBACrB,qBAAqB;iBACtB,CAAC,CAAA;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBACvB,gCAAgC,CAAC,qBAAqB,CAAC,CAAA;gBACvD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,6BAA6B,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;oBACvE,oEAAoE,CACvE,CAAA;YACH,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,qBAAqB,CAAC,CAAA;YAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,qEAAqE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAA;YACH,CAAC;YACD,kBAAkB,GAAG,IAAI,CAAA;QAC3B,CAAC;QAED,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,UAAU,GAA4B,EAAE,CAAA;QAE9C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YAC1C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;YACzD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC;gBACtD,OAAO,EAAE,SAAS;gBAClB,MAAM;gBACN,UAAU;gBACV,KAAK;gBACL,SAAS,EAAE,IAAI;gBACf,GAAG;gBACH,UAAU,EAAE,gBAAgB;aAC7B,CAAC,CAAA;YACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC7B,CAAC;YAED,MAAM,KAAK,GAA0B;gBACnC,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACpD,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC;aAC3B,CAAA;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtB,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,aAAa,CAAC,eAAe,CAAC;gBAClC,OAAO,EAAE,SAAS;gBAClB,MAAM;gBACN,UAAU;gBACV,KAAK;gBACL,SAAS,EAAE,IAAI;gBACf,UAAU;gBACV,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,EAAE;gBAClB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;AAMrE,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { withClickHouseExecutor } from '../clickhouse-resource.js';
|
|
2
3
|
import { emitJson } from '../json-output.js';
|
|
3
|
-
import {
|
|
4
|
+
import { createJournalStore } from '../journal-store.js';
|
|
4
5
|
import { findChecksumMismatches, listMigrations } from '../migration-store.js';
|
|
5
6
|
export const statusCommand = {
|
|
6
7
|
name: 'status',
|
|
@@ -15,39 +16,41 @@ async function cmdStatus(ctx) {
|
|
|
15
16
|
if (!config.clickhouse) {
|
|
16
17
|
throw new Error('clickhouse config is required for status (journal is stored in ClickHouse)');
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
19
|
+
await withClickHouseExecutor(config.clickhouse, async (db) => {
|
|
20
|
+
const journalStore = createJournalStore(db);
|
|
21
|
+
await mkdir(migrationsDir, { recursive: true });
|
|
22
|
+
const files = await listMigrations(migrationsDir);
|
|
23
|
+
const journal = await journalStore.readJournal();
|
|
24
|
+
const appliedNames = new Set(journal.applied.map((entry) => entry.name));
|
|
25
|
+
const pending = files.filter((f) => !appliedNames.has(f));
|
|
26
|
+
const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
|
|
27
|
+
const payload = {
|
|
28
|
+
migrationsDir,
|
|
29
|
+
total: files.length,
|
|
30
|
+
applied: journal.applied.length,
|
|
31
|
+
pending: pending.length,
|
|
32
|
+
pendingMigrations: pending,
|
|
33
|
+
checksumMismatchCount: checksumMismatches.length,
|
|
34
|
+
checksumMismatches,
|
|
35
|
+
};
|
|
36
|
+
if (jsonMode) {
|
|
37
|
+
emitJson('status', payload);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log(`Migrations directory: ${migrationsDir}`);
|
|
41
|
+
console.log(`Total migrations: ${files.length}`);
|
|
42
|
+
console.log(`Applied: ${journal.applied.length}`);
|
|
43
|
+
console.log(`Pending: ${pending.length}`);
|
|
44
|
+
if (pending.length > 0) {
|
|
45
|
+
console.log('\nPending migrations:');
|
|
46
|
+
for (const item of pending)
|
|
47
|
+
console.log(`- ${item}`);
|
|
48
|
+
}
|
|
49
|
+
if (checksumMismatches.length > 0) {
|
|
50
|
+
console.log('\nChecksum mismatches on applied migrations:');
|
|
51
|
+
for (const item of checksumMismatches)
|
|
52
|
+
console.log(`- ${item.name}`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
52
55
|
}
|
|
53
56
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGxC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;
|
|
1
|
+
{"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA4BD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAoFvE;AAED,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GACrD;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAA;CAAE,CAGxD"}
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import { createClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
2
|
import { CLI_VERSION } from './version.js';
|
|
3
|
-
const
|
|
3
|
+
const DEFAULT_JOURNAL_TABLE = '_chkit_migrations';
|
|
4
|
+
function resolveJournalTableName() {
|
|
5
|
+
const candidate = process.env.CHKIT_JOURNAL_TABLE?.trim();
|
|
6
|
+
if (!candidate)
|
|
7
|
+
return DEFAULT_JOURNAL_TABLE;
|
|
8
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(candidate)) {
|
|
9
|
+
throw new Error(`Invalid CHKIT_JOURNAL_TABLE "${candidate}". Expected unquoted identifier matching [A-Za-z_][A-Za-z0-9_]*`);
|
|
10
|
+
}
|
|
11
|
+
return candidate;
|
|
12
|
+
}
|
|
13
|
+
function isRetryableInsertRace(error) {
|
|
14
|
+
if (!(error instanceof Error))
|
|
15
|
+
return false;
|
|
16
|
+
const message = error.message;
|
|
17
|
+
return message.includes('INSERT race condition') || message.includes('Please retry the INSERT');
|
|
18
|
+
}
|
|
19
|
+
export function createJournalStore(db) {
|
|
20
|
+
const journalTable = resolveJournalTableName();
|
|
21
|
+
const createTableSql = `CREATE TABLE IF NOT EXISTS ${journalTable} (
|
|
4
22
|
name String,
|
|
5
23
|
applied_at DateTime64(3, 'UTC'),
|
|
6
24
|
checksum String,
|
|
@@ -8,7 +26,6 @@ const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS _chkit_migrations (
|
|
|
8
26
|
) ENGINE = MergeTree()
|
|
9
27
|
ORDER BY (name)
|
|
10
28
|
SETTINGS index_granularity = 1`;
|
|
11
|
-
export function createJournalStore(db) {
|
|
12
29
|
let bootstrapped = false;
|
|
13
30
|
async function ensureTable() {
|
|
14
31
|
if (bootstrapped)
|
|
@@ -19,19 +36,19 @@ export function createJournalStore(db) {
|
|
|
19
36
|
// engine normalisation (SharedMergeTree vs SharedMergeTree()) differs
|
|
20
37
|
// between the stored metadata and the new DDL statement.
|
|
21
38
|
try {
|
|
22
|
-
await db.query(`SELECT name FROM
|
|
39
|
+
await db.query(`SELECT name FROM ${journalTable} LIMIT 0`);
|
|
23
40
|
bootstrapped = true;
|
|
24
41
|
return;
|
|
25
42
|
}
|
|
26
43
|
catch {
|
|
27
44
|
// Table does not exist yet – create it below.
|
|
28
45
|
}
|
|
29
|
-
await db.execute(
|
|
46
|
+
await db.execute(createTableSql);
|
|
30
47
|
// On ClickHouse Cloud, DDL propagation across nodes may lag behind the
|
|
31
48
|
// CREATE TABLE acknowledgment. Wait until the table is queryable.
|
|
32
49
|
for (let attempt = 0; attempt < 10; attempt++) {
|
|
33
50
|
try {
|
|
34
|
-
await db.query(`SELECT name FROM
|
|
51
|
+
await db.query(`SELECT name FROM ${journalTable} LIMIT 0`);
|
|
35
52
|
break;
|
|
36
53
|
}
|
|
37
54
|
catch {
|
|
@@ -44,12 +61,12 @@ export function createJournalStore(db) {
|
|
|
44
61
|
async readJournal() {
|
|
45
62
|
await ensureTable();
|
|
46
63
|
try {
|
|
47
|
-
await db.execute(`SYSTEM SYNC REPLICA
|
|
64
|
+
await db.execute(`SYSTEM SYNC REPLICA ${journalTable}`);
|
|
48
65
|
}
|
|
49
66
|
catch {
|
|
50
67
|
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|
|
51
68
|
}
|
|
52
|
-
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM
|
|
69
|
+
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM ${journalTable} ORDER BY name SETTINGS select_sequential_consistency = 1`);
|
|
53
70
|
return {
|
|
54
71
|
version: 1,
|
|
55
72
|
applied: rows.map((row) => ({
|
|
@@ -62,9 +79,22 @@ export function createJournalStore(db) {
|
|
|
62
79
|
async appendEntry(entry) {
|
|
63
80
|
await ensureTable();
|
|
64
81
|
const esc = (s) => s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
65
|
-
|
|
82
|
+
const insertSql = `INSERT INTO ${journalTable} (name, applied_at, checksum, chkit_version) VALUES ('${esc(entry.name)}', '${esc(entry.appliedAt)}', '${esc(entry.checksum)}', '${esc(CLI_VERSION)}')`;
|
|
83
|
+
const maxAttempts = 5;
|
|
84
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
85
|
+
try {
|
|
86
|
+
await db.execute(insertSql);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (!isRetryableInsertRace(error) || attempt === maxAttempts) {
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
await new Promise((r) => setTimeout(r, attempt * 150));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
66
96
|
try {
|
|
67
|
-
await db.execute(`SYSTEM SYNC REPLICA
|
|
97
|
+
await db.execute(`SYSTEM SYNC REPLICA ${journalTable}`);
|
|
68
98
|
}
|
|
69
99
|
catch {
|
|
70
100
|
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|