supabee 0.3.1 → 0.3.3

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.
@@ -0,0 +1,234 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import readline from 'node:readline/promises';
4
+ import { stdin as input, stdout as output } from 'node:process';
5
+ import { classifyMigrations, resolveMarkers, } from '../lib/migration-classifier.js';
6
+ import { info, ok, sectionWithNote, title, warn } from '../lib/ui.js';
7
+ const DEFAULT_MIGRATIONS_DIR = 'supabase/migrations';
8
+ function absoluteMigrationsDir(dir) {
9
+ return path.resolve(process.cwd(), dir ?? DEFAULT_MIGRATIONS_DIR);
10
+ }
11
+ async function ensureDirectoryExists(dirPath) {
12
+ const stats = await fs.promises.stat(dirPath).catch(() => null);
13
+ if (!stats || !stats.isDirectory()) {
14
+ throw new Error(`Migrations directory not found: ${dirPath}`);
15
+ }
16
+ }
17
+ function recommendationText(result) {
18
+ if (result.classification === 'mixed') {
19
+ return 'Split file into schema-only and data-only migrations';
20
+ }
21
+ if (result.classification === 'unknown') {
22
+ return 'No automatic action';
23
+ }
24
+ if (!result.recommendedMarker) {
25
+ return 'No marker change needed';
26
+ }
27
+ return `Add ${result.recommendedMarker} marker`;
28
+ }
29
+ function markerLine(markerType, markers) {
30
+ if (markerType === 'data')
31
+ return `-- ${markers.dataMarker}`;
32
+ if (markerType === 'schema')
33
+ return `-- ${markers.schemaMarker}`;
34
+ throw new Error('Invalid marker type');
35
+ }
36
+ function prependMarker(sql, marker) {
37
+ if (sql.startsWith('\uFEFF')) {
38
+ const withoutBom = sql.slice(1);
39
+ return `\uFEFF${marker}\n\n${withoutBom}`;
40
+ }
41
+ return `${marker}\n\n${sql}`;
42
+ }
43
+ function removeMarkerLines(sql, markers) {
44
+ const hadBom = sql.startsWith('\uFEFF');
45
+ const raw = hadBom ? sql.slice(1) : sql;
46
+ const lines = raw.split('\n');
47
+ const markerValues = [markers.dataMarker, markers.schemaMarker];
48
+ let removed = false;
49
+ const kept = lines.filter((line) => {
50
+ const trimmed = line.trim();
51
+ for (const marker of markerValues) {
52
+ if (trimmed === `-- ${marker}` || trimmed === `--${marker}`) {
53
+ removed = true;
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ });
59
+ const updated = kept.join('\n');
60
+ return { updated: hadBom ? `\uFEFF${updated}` : updated, removed };
61
+ }
62
+ function printClassificationRow(result) {
63
+ console.log(info(`${result.fileName}`));
64
+ console.log(info(` class = ${result.classification} (${result.source})`));
65
+ console.log(info(` reason = ${result.reasons.join('; ')}`));
66
+ console.log(info(` recommendation = ${recommendationText(result)}`));
67
+ }
68
+ export async function runMigrationAuditCommand(options = {}) {
69
+ const migrationsDir = absoluteMigrationsDir(options.migrationsDir);
70
+ await ensureDirectoryExists(migrationsDir);
71
+ const markers = resolveMarkers();
72
+ const results = await classifyMigrations({ migrationsDir });
73
+ console.log(sectionWithNote(title('Migration audit'), 'Classifies migration files as data/schema/mixed/unknown.'));
74
+ console.log(info(`migrationsDir = ${migrationsDir}`));
75
+ console.log(info(`dataMarker = ${markers.dataMarker}`));
76
+ console.log(info(`schemaMarker = ${markers.schemaMarker}`));
77
+ console.log('');
78
+ if (results.length === 0) {
79
+ console.log(warn('No migration files found.'));
80
+ return;
81
+ }
82
+ let dataCount = 0;
83
+ let schemaCount = 0;
84
+ let mixedCount = 0;
85
+ let unknownCount = 0;
86
+ let suggestedMarkerCount = 0;
87
+ for (const result of results) {
88
+ if (result.classification === 'data')
89
+ dataCount += 1;
90
+ if (result.classification === 'schema')
91
+ schemaCount += 1;
92
+ if (result.classification === 'mixed')
93
+ mixedCount += 1;
94
+ if (result.classification === 'unknown')
95
+ unknownCount += 1;
96
+ if (result.recommendedMarker)
97
+ suggestedMarkerCount += 1;
98
+ printClassificationRow(result);
99
+ }
100
+ console.log('');
101
+ console.log(ok(`Summary: data=${dataCount} schema=${schemaCount} mixed=${mixedCount} unknown=${unknownCount}`));
102
+ console.log(info(`Suggested marker updates: ${suggestedMarkerCount}`));
103
+ if (mixedCount > 0) {
104
+ console.log(warn('Mixed files detected. Split schema and data into separate migration files.'));
105
+ }
106
+ }
107
+ export async function runMigrationMarkCommand(options = {}) {
108
+ const migrationsDir = absoluteMigrationsDir(options.migrationsDir);
109
+ await ensureDirectoryExists(migrationsDir);
110
+ const markers = resolveMarkers();
111
+ const results = await classifyMigrations({ migrationsDir });
112
+ const mixed = results.filter((result) => result.classification === 'mixed');
113
+ if (mixed.length > 0) {
114
+ const names = mixed.map((m) => m.fileName).join(', ');
115
+ throw new Error(`Cannot mark migrations while mixed schema+DML files exist: ${names}\nSplit each mixed migration into schema-only and data-only files, then re-run.`);
116
+ }
117
+ const candidates = results.filter((result) => result.recommendedMarker !== null);
118
+ console.log(sectionWithNote(title('Migration mark'), 'Suggests and applies marker comments to migration files.'));
119
+ console.log(info(`migrationsDir = ${migrationsDir}`));
120
+ console.log(info(`candidates = ${candidates.length}`));
121
+ console.log('');
122
+ if (candidates.length === 0) {
123
+ console.log(ok('No marker updates needed.'));
124
+ return;
125
+ }
126
+ for (const candidate of candidates) {
127
+ const marker = markerLine(candidate.recommendedMarker, markers);
128
+ console.log(info(`${candidate.fileName}`));
129
+ console.log(info(` add = ${marker}`));
130
+ console.log(info(` reason = ${candidate.reasons.join('; ')}`));
131
+ }
132
+ if (options.dryRun === true) {
133
+ console.log('');
134
+ console.log(info('Dry run only. Re-run without `--dry-run` to confirm and write markers.'));
135
+ return;
136
+ }
137
+ const confirmed = [];
138
+ if (options.yes === true) {
139
+ confirmed.push(...candidates);
140
+ }
141
+ else {
142
+ const rl = readline.createInterface({ input, output });
143
+ try {
144
+ for (const candidate of candidates) {
145
+ const marker = markerLine(candidate.recommendedMarker, markers);
146
+ const answer = await rl.question(`Add "${marker}" to ${candidate.fileName}? [y/N] `);
147
+ const accepted = answer.trim().toLowerCase();
148
+ if (accepted === 'y' || accepted === 'yes') {
149
+ confirmed.push(candidate);
150
+ }
151
+ }
152
+ }
153
+ finally {
154
+ rl.close();
155
+ }
156
+ }
157
+ if (confirmed.length === 0) {
158
+ console.log('');
159
+ console.log(warn('No marker updates selected. Nothing written.'));
160
+ return;
161
+ }
162
+ for (const candidate of confirmed) {
163
+ const marker = markerLine(candidate.recommendedMarker, markers);
164
+ const original = await fs.promises.readFile(candidate.filePath, 'utf8');
165
+ const updated = prependMarker(original, marker);
166
+ await fs.promises.writeFile(candidate.filePath, updated, 'utf8');
167
+ console.log(ok(`Updated ${candidate.fileName}`));
168
+ }
169
+ }
170
+ export async function runMigrationUnmarkCommand(options = {}) {
171
+ const migrationsDir = absoluteMigrationsDir(options.migrationsDir);
172
+ await ensureDirectoryExists(migrationsDir);
173
+ const markers = resolveMarkers();
174
+ const results = await classifyMigrations({ migrationsDir });
175
+ const candidates = results.filter((result) => result.hasDataMarker || result.hasSchemaMarker);
176
+ console.log(sectionWithNote(title('Migration unmark'), 'Removes marker comments from migration files.'));
177
+ console.log(info(`migrationsDir = ${migrationsDir}`));
178
+ console.log(info(`candidates = ${candidates.length}`));
179
+ console.log('');
180
+ if (candidates.length === 0) {
181
+ console.log(ok('No marker lines found.'));
182
+ return;
183
+ }
184
+ for (const candidate of candidates) {
185
+ const removals = [];
186
+ if (candidate.hasDataMarker)
187
+ removals.push(`-- ${markers.dataMarker}`);
188
+ if (candidate.hasSchemaMarker)
189
+ removals.push(`-- ${markers.schemaMarker}`);
190
+ console.log(info(`${candidate.fileName}`));
191
+ console.log(info(` remove = ${removals.join(', ')}`));
192
+ console.log(info(` reason = explicit marker override cleanup`));
193
+ }
194
+ if (options.dryRun === true) {
195
+ console.log('');
196
+ console.log(info('Dry run only. Re-run without `--dry-run` to confirm and remove markers.'));
197
+ return;
198
+ }
199
+ const confirmed = [];
200
+ if (options.yes === true) {
201
+ confirmed.push(...candidates);
202
+ }
203
+ else {
204
+ const rl = readline.createInterface({ input, output });
205
+ try {
206
+ for (const candidate of candidates) {
207
+ const answer = await rl.question(`Remove markers from ${candidate.fileName}? [y/N] `);
208
+ const accepted = answer.trim().toLowerCase();
209
+ if (accepted === 'y' || accepted === 'yes') {
210
+ confirmed.push(candidate);
211
+ }
212
+ }
213
+ }
214
+ finally {
215
+ rl.close();
216
+ }
217
+ }
218
+ if (confirmed.length === 0) {
219
+ console.log('');
220
+ console.log(warn('No files selected. Nothing written.'));
221
+ return;
222
+ }
223
+ for (const candidate of confirmed) {
224
+ const original = await fs.promises.readFile(candidate.filePath, 'utf8');
225
+ const { updated, removed } = removeMarkerLines(original, markers);
226
+ if (!removed) {
227
+ console.log(warn(`Skipped ${candidate.fileName}; no marker line found at write time.`));
228
+ continue;
229
+ }
230
+ await fs.promises.writeFile(candidate.filePath, updated, 'utf8');
231
+ console.log(ok(`Updated ${candidate.fileName}`));
232
+ }
233
+ }
234
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/commands/migration.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ export type SyncCommandOptions = {
3
3
  input?: string;
4
4
  output?: string;
5
5
  backup?: boolean;
6
+ force?: boolean;
6
7
  };
7
8
  export declare function runSyncCommand(target: SyncTarget, options?: SyncCommandOptions): Promise<void>;
@@ -1,9 +1,10 @@
1
1
  import fs from 'node:fs';
2
2
  import { resolveCommandConfig } from '../lib/config.js';
3
- import { info, ok, sectionWithNote, title } from '../lib/ui.js';
3
+ import { info, ok, sectionWithNote, title, warn } from '../lib/ui.js';
4
4
  import { runSchemaCommand } from './schema.js';
5
5
  import { runDataCommand } from './data.js';
6
- import { runCommandToFile } from '../lib/subprocess.js';
6
+ import { runCommandCapture, runCommandToFile } from '../lib/subprocess.js';
7
+ import { compareMigrationVersions, isValidMigrationVersion, parseMigrationListOutput, } from '../lib/post-seed-cutoff.js';
7
8
  function buildWorkflowArgs(inputFile, options) {
8
9
  const args = ['--input', inputFile];
9
10
  if (options.output)
@@ -22,7 +23,54 @@ async function assertDumpHasContent(filePath) {
22
23
  throw new Error(`Supabase dump produced an empty file: ${filePath}\nAborting before split so existing output files are not cleared.`);
23
24
  }
24
25
  }
26
+ function latestVersionFromRows(rows, key) {
27
+ const versions = new Set();
28
+ for (const row of rows) {
29
+ const value = row[key];
30
+ if (isValidMigrationVersion(value))
31
+ versions.add(value);
32
+ }
33
+ let latest = null;
34
+ for (const version of versions) {
35
+ if (!latest || compareMigrationVersions(version, latest) > 0) {
36
+ latest = version;
37
+ }
38
+ }
39
+ return latest;
40
+ }
41
+ async function assertLinkedMigrationAlignmentForSync(force) {
42
+ try {
43
+ const { stdout } = await runCommandCapture('supabase', ['migration', 'list', '--linked']);
44
+ const rows = parseMigrationListOutput(stdout);
45
+ if (rows.length === 0) {
46
+ if (force) {
47
+ console.log(warn('Linked migration alignment preflight returned no rows. Continuing due to --force.'));
48
+ return;
49
+ }
50
+ throw new Error('Linked migration alignment preflight returned no rows.');
51
+ }
52
+ const latestLocal = latestVersionFromRows(rows, 'local');
53
+ const latestRemote = latestVersionFromRows(rows, 'remote');
54
+ if (latestLocal === latestRemote)
55
+ return;
56
+ const message = `Local/remote migrations are not aligned (latestLocal=${latestLocal ?? '(none)'} latestRemote=${latestRemote ?? '(none)'}).`;
57
+ if (force) {
58
+ console.log(warn(`${message} Continuing due to --force.`));
59
+ return;
60
+ }
61
+ throw new Error(`${message} Re-run with --force to override.`);
62
+ }
63
+ catch (error) {
64
+ if (force) {
65
+ const message = error instanceof Error ? error.message : String(error);
66
+ console.log(warn(`Could not validate linked migration alignment. Continuing due to --force. Details: ${message}`));
67
+ return;
68
+ }
69
+ throw error;
70
+ }
71
+ }
25
72
  export async function runSyncCommand(target, options = {}) {
73
+ await assertLinkedMigrationAlignmentForSync(options.force === true);
26
74
  const resolved = target === 'schema'
27
75
  ? resolveCommandConfig('schema', { input: options.input, output: options.output })
28
76
  : resolveCommandConfig('data', { input: options.input, output: options.output });
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AAWpC,SAAS,iBAAiB,CAAC,SAAiB,EAAE,OAA2B;IACvE,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IAClD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,mEAAmE,CACrH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAwB,EAAE,GAAuB;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,uBAAuB,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,qCAAqC,CAAC,KAAc;IACjE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC,CAAC;gBACvG,OAAO;YACT,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,WAAW,KAAK,YAAY;YAAE,OAAO;QAEzC,MAAM,OAAO,GAAG,wDAAwD,WAAW,IAAI,QAAQ,iBAAiB,YAAY,IAAI,QAAQ,IAAI,CAAC;QAC7I,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,6BAA6B,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,mCAAmC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sFAAsF,OAAO,EAAE,CAAC,CAAC,CAAC;YACnH,OAAO;QACT,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB,EAAE,UAA8B,EAAE;IACvF,MAAM,qCAAqC,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAEpE,MAAM,QAAQ,GACZ,MAAM,KAAK,QAAQ;QACjB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAClF,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAErF,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;IAExE,OAAO,CAAC,GAAG,CACT,eAAe,CACb,KAAK,CAAC,aAAa,CAAC,EACpB,MAAM,KAAK,QAAQ;QACjB,CAAC,CAAC,sFAAsF;QACxF,CAAC,CAAC,sFAAsF,CAC3F,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,8 @@ import { runDataCommand } from './commands/data.js';
5
5
  import { runInitCommand } from './commands/init.js';
6
6
  import { runSyncCommand } from './commands/sync.js';
7
7
  import { runDbResetCommand, runStartCommand } from './commands/db-reset.js';
8
+ import { runCutoffDetectCommand } from './commands/cutoff.js';
9
+ import { runMigrationAuditCommand, runMigrationMarkCommand, runMigrationUnmarkCommand } from './commands/migration.js';
8
10
  import { runCommand } from './lib/subprocess.js';
9
11
  import { error as errText, info, warn } from './lib/ui.js';
10
12
  function buildStepArgs(step, reconstructed, options = {}) {
@@ -25,8 +27,9 @@ function buildStepArgs(step, reconstructed, options = {}) {
25
27
  args.push(reconstructed);
26
28
  return args;
27
29
  }
28
- const KNOWN_TOP_LEVEL_COMMANDS = new Set(['init', 'schema', 'data', 'sync', 'db', 'start', 'help']);
30
+ const KNOWN_TOP_LEVEL_COMMANDS = new Set(['init', 'schema', 'data', 'sync', 'db', 'start', 'cutoff', 'migration', 'help']);
29
31
  const KNOWN_DB_SUBCOMMANDS = new Set(['reset', 'help']);
32
+ const KNOWN_MIGRATION_SUBCOMMANDS = new Set(['audit', 'mark', 'unmark', 'help']);
30
33
  function firstNonOptionToken(args) {
31
34
  for (let index = 0; index < args.length; index += 1) {
32
35
  const token = args[index];
@@ -80,15 +83,25 @@ async function maybePassthroughToSupabase(args) {
80
83
  if (!topLevel)
81
84
  return false;
82
85
  if (KNOWN_TOP_LEVEL_COMMANDS.has(topLevel.token)) {
83
- if (topLevel.token !== 'db')
84
- return false;
85
- const dbSubcommand = firstNonOptionToken(args.slice(topLevel.index + 1));
86
- if (!dbSubcommand || KNOWN_DB_SUBCOMMANDS.has(dbSubcommand.token)) {
87
- return false;
86
+ if (topLevel.token === 'db') {
87
+ const dbSubcommand = firstNonOptionToken(args.slice(topLevel.index + 1));
88
+ if (!dbSubcommand || KNOWN_DB_SUBCOMMANDS.has(dbSubcommand.token)) {
89
+ return false;
90
+ }
91
+ console.log(info(`Forwarding to Supabase CLI: supabase ${args.join(' ')}`));
92
+ await runCommand('supabase', args);
93
+ return true;
88
94
  }
89
- console.log(info(`Forwarding to Supabase CLI: supabase ${args.join(' ')}`));
90
- await runCommand('supabase', args);
91
- return true;
95
+ if (topLevel.token === 'migration') {
96
+ const migrationSubcommand = firstNonOptionToken(args.slice(topLevel.index + 1));
97
+ if (!migrationSubcommand || KNOWN_MIGRATION_SUBCOMMANDS.has(migrationSubcommand.token)) {
98
+ return false;
99
+ }
100
+ console.log(info(`Forwarding to Supabase CLI: supabase ${args.join(' ')}`));
101
+ await runCommand('supabase', args);
102
+ return true;
103
+ }
104
+ return false;
92
105
  }
93
106
  console.log(info(`Forwarding to Supabase CLI: supabase ${args.join(' ')}`));
94
107
  await runCommand('supabase', args);
@@ -99,26 +112,26 @@ program
99
112
  .name('supabee')
100
113
  .description('Supabase sync and migration orchestration CLI.')
101
114
  .showHelpAfterError('(run with --help for usage)')
102
- .addHelpText('after', `
103
- Main Workflows
104
- supabee sync schema
105
- supabee sync data
106
- supabee db reset [cutoff_timestamp]
107
- supabee start [cutoff_timestamp]
108
-
109
- Setup (once per project)
110
- supabee init
111
- supabase link
112
-
113
- Examples
114
- supabee sync schema
115
- supabee sync data
116
- supabee db reset 20260309180959
117
- supabee start 20260309180959
118
-
119
- Manual Processing (existing dump files)
120
- supabee schema
121
- supabee data
115
+ .addHelpText('after', `
116
+ Main Workflows
117
+ supabee sync schema
118
+ supabee sync data
119
+ supabee db reset [cutoff_timestamp]
120
+ supabee start [cutoff_timestamp]
121
+
122
+ Setup (once per project)
123
+ supabee init
124
+ supabase link
125
+
126
+ Examples
127
+ supabee sync schema
128
+ supabee sync data
129
+ supabee db reset 20260309180959
130
+ supabee start 20260309180959
131
+
132
+ Manual Processing (existing dump files)
133
+ supabee schema
134
+ supabee data
122
135
  `);
123
136
  program
124
137
  .command('init')
@@ -146,18 +159,18 @@ for (const commandName of ['schema', 'data']) {
146
159
  const syncCommand = program
147
160
  .command('sync')
148
161
  .description('Dump from linked project, then split/reconstruct/validate')
149
- .addHelpText('after', `
150
- Main Usage
151
- supabee sync schema
152
- supabee sync data
153
-
154
- Examples
155
- supabee sync schema
156
- supabee sync data --input supabase/seeds/prod-data.sql
157
- supabee sync data --no-backup
158
-
159
- Note
160
- Requires \`supabase link\` to be configured for this project.
162
+ .addHelpText('after', `
163
+ Main Usage
164
+ supabee sync schema
165
+ supabee sync data
166
+
167
+ Examples
168
+ supabee sync schema
169
+ supabee sync data --input supabase/seeds/prod-data.sql
170
+ supabee sync data --no-backup
171
+
172
+ Note
173
+ Requires \`supabase link\` to be configured for this project.
161
174
  `);
162
175
  syncCommand
163
176
  .command('schema')
@@ -166,9 +179,8 @@ syncCommand
166
179
  .option('--output <path>', 'Split output path override for schema processing')
167
180
  .option('--backup', 'Backup existing split output before replacing')
168
181
  .option('--no-backup', 'Do not backup dirty split output folder before split')
169
- .action(async (options = {}) => {
170
- await runSyncCommand('schema', options);
171
- });
182
+ .option('--force', 'Skip linked migration alignment preflight for sync')
183
+ .action((options = {}) => runSyncCommand('schema', options));
172
184
  syncCommand
173
185
  .command('data')
174
186
  .description('Run `supabase db dump --data-only`, then process data files')
@@ -176,9 +188,35 @@ syncCommand
176
188
  .option('--output <path>', 'Split output path override for data processing')
177
189
  .option('--backup', 'Backup existing split output before replacing')
178
190
  .option('--no-backup', 'Do not backup dirty split output folder before split')
179
- .action(async (options = {}) => {
180
- await runSyncCommand('data', options);
181
- });
191
+ .option('--force', 'Skip linked migration alignment preflight for sync')
192
+ .action((options = {}) => runSyncCommand('data', options));
193
+ const cutoffCommand = program.command('cutoff').description('Cutoff detection helpers');
194
+ cutoffCommand
195
+ .command('detect [cutoffTimestamp]')
196
+ .description('Resolve cutoff from argument, linked migration alignment, or configured fallback')
197
+ .option('--env <name>', 'Environment key used for postSeedCutoffByEnv fallback lookup')
198
+ .option('--json', 'Print machine-readable JSON output')
199
+ .action((cutoffTimestamp, options = {}) => runCutoffDetectCommand(cutoffTimestamp, options));
200
+ const migrationCommand = program.command('migration').description('Migration classification helpers');
201
+ migrationCommand
202
+ .command('audit')
203
+ .description('Classify migrations as data/schema/mixed/unknown and show suggested marker actions')
204
+ .option('--migrations-dir <path>', 'Migrations directory', 'supabase/migrations')
205
+ .action((options = {}) => runMigrationAuditCommand(options));
206
+ migrationCommand
207
+ .command('mark')
208
+ .description('Add marker comments to classified migration files (interactive by default)')
209
+ .option('--migrations-dir <path>', 'Migrations directory', 'supabase/migrations')
210
+ .option('--dry-run', 'Preview marker updates without writing files')
211
+ .option('--yes', 'Apply all suggested marker updates without interactive prompts')
212
+ .action((options = {}) => runMigrationMarkCommand(options));
213
+ migrationCommand
214
+ .command('unmark')
215
+ .description('Remove marker comments from migration files (interactive by default)')
216
+ .option('--migrations-dir <path>', 'Migrations directory', 'supabase/migrations')
217
+ .option('--dry-run', 'Preview marker removals without writing files')
218
+ .option('--yes', 'Remove all found marker updates without interactive prompts')
219
+ .action((options = {}) => runMigrationUnmarkCommand(options));
182
220
  const dbCommand = program.command('db').description('Database orchestration commands');
183
221
  dbCommand
184
222
  .command('reset [cutoffTimestamp]')
@@ -186,42 +224,40 @@ dbCommand
186
224
  .option('--psql', 'Apply deferred migrations via raw psql instead of supabase migration up')
187
225
  .option('--migrations-dir <path>', 'Migrations directory', 'supabase/migrations')
188
226
  .option('--temp-dir <path>', 'Temporary directory for deferred migrations', 'supabase/.tmp-migrations')
189
- .addHelpText('after', `
190
- What This Command Does
191
- 1) Defers migrations with timestamps greater than <cutoffTimestamp>
192
- 2) Runs \`supabase db reset\`
193
- 3) Restores deferred migration files
194
- 4) Reapplies deferred migrations
195
-
196
- Examples
197
- supabee db reset 20260309180959
198
- supabee db reset
199
- supabee db reset 20260309180959 --psql
227
+ .option('--env <name>', 'Environment key used for postSeedCutoffByEnv fallback lookup')
228
+ .addHelpText('after', `
229
+ What This Command Does
230
+ 1) Defers migrations with timestamps greater than <cutoffTimestamp>
231
+ 2) Runs \`supabase db reset\`
232
+ 3) Restores deferred migration files
233
+ 4) Reapplies deferred migrations
234
+
235
+ Examples
236
+ supabee db reset 20260309180959
237
+ supabee db reset
238
+ supabee db reset 20260309180959 --psql
200
239
  `)
201
- .action(async (cutoffTimestamp, options = {}) => {
202
- await runDbResetCommand(cutoffTimestamp, options);
203
- });
240
+ .action((cutoffTimestamp, options = {}) => runDbResetCommand(cutoffTimestamp, options));
204
241
  program
205
242
  .command('start [cutoffTimestamp]')
206
243
  .description('Start Supabase with deferred post-seed migrations applied after startup')
207
244
  .option('--psql', 'Apply deferred migrations via raw psql instead of supabase migration up')
208
245
  .option('--migrations-dir <path>', 'Migrations directory', 'supabase/migrations')
209
246
  .option('--temp-dir <path>', 'Temporary directory for deferred migrations', 'supabase/.tmp-migrations')
210
- .addHelpText('after', `
211
- What This Command Does
212
- 1) Defers migrations with timestamps greater than [cutoffTimestamp]
213
- 2) Runs \`supabase start\`
214
- 3) Restores deferred migration files
215
- 4) Reapplies deferred migrations
216
-
217
- Examples
218
- supabee start 20260309180959
219
- supabee start
220
- supabee start --psql
247
+ .option('--env <name>', 'Environment key used for postSeedCutoffByEnv fallback lookup')
248
+ .addHelpText('after', `
249
+ What This Command Does
250
+ 1) Defers migrations with timestamps greater than [cutoffTimestamp]
251
+ 2) Runs \`supabase start\`
252
+ 3) Restores deferred migration files
253
+ 4) Reapplies deferred migrations
254
+
255
+ Examples
256
+ supabee start 20260309180959
257
+ supabee start
258
+ supabee start --psql
221
259
  `)
222
- .action(async (cutoffTimestamp, options = {}) => {
223
- await runStartCommand(cutoffTimestamp, options);
224
- });
260
+ .action((cutoffTimestamp, options = {}) => runStartCommand(cutoffTimestamp, options));
225
261
  async function main() {
226
262
  const args = process.argv.slice(2);
227
263
  maybePrintGlobalInstallHint(args);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,9 @@ export type DataTableRule = {
8
8
  };
9
9
  export type ToolConfig = {
10
10
  postSeedCutoff?: string;
11
+ postSeedCutoffByEnv?: Record<string, string>;
12
+ dataMigrationMarker?: string;
13
+ schemaMigrationMarker?: string;
11
14
  schema?: {
12
15
  input?: string;
13
16
  output?: string;