@productbrain/cli 0.1.0-beta.3678 → 0.1.0-beta.3683
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/commands/admin/index.d.ts +21 -0
- package/dist/commands/admin/index.d.ts.map +1 -1
- package/dist/commands/admin/index.js +37 -12
- package/dist/commands/admin/index.js.map +1 -1
- package/dist/commands/admin/index.test.d.ts +2 -0
- package/dist/commands/admin/index.test.d.ts.map +1 -0
- package/dist/commands/admin/index.test.js +26 -0
- package/dist/commands/admin/index.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -16,6 +16,27 @@
|
|
|
16
16
|
* Environment sourced from active profile (same as all other pb commands).
|
|
17
17
|
*/
|
|
18
18
|
import { Command } from 'commander';
|
|
19
|
+
export type MigrationRow = {
|
|
20
|
+
migrationId: string;
|
|
21
|
+
command?: string;
|
|
22
|
+
argsHash?: string;
|
|
23
|
+
appliedAt?: number;
|
|
24
|
+
lastRunAt?: number;
|
|
25
|
+
status: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Reduce ledger rows to the latest row per command.
|
|
29
|
+
*
|
|
30
|
+
* A missing `lastRunAt` (WP-605: now optional) is treated as -Infinity rather
|
|
31
|
+
* than compared directly — `m.lastRunAt > existing.lastRunAt` would otherwise
|
|
32
|
+
* evaluate `undefined > undefined` as `false` and silently keep whichever row
|
|
33
|
+
* happened to arrive first.
|
|
34
|
+
*
|
|
35
|
+
* On a tie (equal timestamps, or both missing `lastRunAt`) the LATER row in
|
|
36
|
+
* iteration order wins (`>=`, not `>`): `inspect:system-migrations` orders
|
|
37
|
+
* ascending, so the later row in the array is the newer document.
|
|
38
|
+
*/
|
|
39
|
+
export declare function pickLatestByCommand(rows: MigrationRow[]): Map<string, MigrationRow>;
|
|
19
40
|
/** Build the admin subcommand group for registration in index.ts. */
|
|
20
41
|
export declare function createAdminCommand(): Command;
|
|
21
42
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAaF;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAUnF;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CA4O5C"}
|
|
@@ -31,6 +31,39 @@ function isBootstrapResponse(data) {
|
|
|
31
31
|
'workspaces' in data &&
|
|
32
32
|
Array.isArray(data.workspaces));
|
|
33
33
|
}
|
|
34
|
+
/** Runtime guard: keep only rows that at minimum carry a migrationId + status. */
|
|
35
|
+
function parseMigrationRows(raw) {
|
|
36
|
+
if (!Array.isArray(raw))
|
|
37
|
+
return [];
|
|
38
|
+
return raw.filter((r) => typeof r === 'object' &&
|
|
39
|
+
r !== null &&
|
|
40
|
+
typeof r.migrationId === 'string' &&
|
|
41
|
+
typeof r.status === 'string');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Reduce ledger rows to the latest row per command.
|
|
45
|
+
*
|
|
46
|
+
* A missing `lastRunAt` (WP-605: now optional) is treated as -Infinity rather
|
|
47
|
+
* than compared directly — `m.lastRunAt > existing.lastRunAt` would otherwise
|
|
48
|
+
* evaluate `undefined > undefined` as `false` and silently keep whichever row
|
|
49
|
+
* happened to arrive first.
|
|
50
|
+
*
|
|
51
|
+
* On a tie (equal timestamps, or both missing `lastRunAt`) the LATER row in
|
|
52
|
+
* iteration order wins (`>=`, not `>`): `inspect:system-migrations` orders
|
|
53
|
+
* ascending, so the later row in the array is the newer document.
|
|
54
|
+
*/
|
|
55
|
+
export function pickLatestByCommand(rows) {
|
|
56
|
+
const byCommand = new Map();
|
|
57
|
+
for (const m of rows) {
|
|
58
|
+
if (!m.command)
|
|
59
|
+
continue;
|
|
60
|
+
const existing = byCommand.get(m.command);
|
|
61
|
+
if (!existing || (m.lastRunAt ?? -Infinity) >= (existing.lastRunAt ?? -Infinity)) {
|
|
62
|
+
byCommand.set(m.command, m);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return byCommand;
|
|
66
|
+
}
|
|
34
67
|
/** Build the admin subcommand group for registration in index.ts. */
|
|
35
68
|
export function createAdminCommand() {
|
|
36
69
|
const admin = new Command('admin')
|
|
@@ -85,12 +118,11 @@ export function createAdminCommand() {
|
|
|
85
118
|
const React = await import('react');
|
|
86
119
|
const { Cockpit, WorkspaceDetail } = await import('./cockpit.js');
|
|
87
120
|
const cockpitSiteUrl = bootstrapData.env?.siteUrl ?? siteUrl;
|
|
121
|
+
// Fetch real system_migrations data for Seeds tab (WP-317 S4)
|
|
88
122
|
let migrationsData = [];
|
|
89
123
|
try {
|
|
90
124
|
const raw = await adminCall('inspect:system-migrations', {});
|
|
91
|
-
|
|
92
|
-
migrationsData = raw;
|
|
93
|
-
}
|
|
125
|
+
migrationsData = parseMigrationRows(raw);
|
|
94
126
|
}
|
|
95
127
|
catch {
|
|
96
128
|
// Fall back to static seeds if not yet deployed
|
|
@@ -109,15 +141,8 @@ export function createAdminCommand() {
|
|
|
109
141
|
catch {
|
|
110
142
|
// Fall back to empty if not yet deployed
|
|
111
143
|
}
|
|
112
|
-
// Build migration lookup by command name
|
|
113
|
-
const migrationByCommand =
|
|
114
|
-
for (const m of migrationsData) {
|
|
115
|
-
// Prefer latest by lastRunAt if multiple records exist for same command
|
|
116
|
-
const existing = migrationByCommand.get(m.command);
|
|
117
|
-
if (!existing || m.lastRunAt > existing.lastRunAt) {
|
|
118
|
-
migrationByCommand.set(m.command, m);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
144
|
+
// Build migration lookup by command name (latest row per command)
|
|
145
|
+
const migrationByCommand = pickLatestByCommand(migrationsData);
|
|
121
146
|
// Build seed rows: merge manifest metadata with real migration data
|
|
122
147
|
const seedRows = SEED_COMMAND_ENTRIES.map((e) => {
|
|
123
148
|
const migration = migrationByCommand.get(e.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/admin/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAarE,SAAS,mBAAmB,CAAC,IAAa;IACxC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,YAAY,IAAI,IAAI;QACpB,KAAK,CAAC,OAAO,CAAE,IAA0B,CAAC,UAAU,CAAC,CACtD,CAAC;AACJ,CAAC;AAiBD,kFAAkF;AAClF,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CACzC,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAQ,CAAkB,CAAC,WAAW,KAAK,QAAQ;QACnD,OAAQ,CAAkB,CAAC,MAAM,KAAK,QAAQ,CAC/C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjF,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;SAC/B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,yEAAyE;QACzE,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,IAAI,aAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;gBACzD,aAAa,GAAG;oBACd,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,oBAAoB,CAAC,MAAM,aAAa,EAAE;wBAChG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8DAA8D,EAAE;qBACjG;oBACD,UAAU,EAAE;wBACV,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,8BAA8B;qBAC/B;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YAAC,OAAO,GAAG,kBAAkB,EAAE,CAAC,OAAO,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAC9E,IAAI,OAAO;YAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAElC,wEAAwE;QACxE,IAAI,aAAa,EAAE,EAAE,CAAC;YACpB,IAAI,aAAa,GAA6B,IAAI,CAAC;YAEnD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBACnD,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,aAAa,GAAG,GAAG,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kEAAkE;YACpE,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,8DAA8D;gBAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;gBAElE,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC;gBAE7D,8DAA8D;gBAC9D,IAAI,cAAc,GAAmB,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;oBAC7D,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;gBAClD,CAAC;gBAED,+CAA+C;gBAC/C,IAAI,aAAa,GAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;oBACrD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvB,aAAa,GAAI,GAA4D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACxF,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,cAAc,EAAE,CAAC,CAAC,cAAc;yBACjC,CAAC,CAAC,CAAC;oBACN,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,yCAAyC;gBAC3C,CAAC;gBAED,kEAAkE;gBAClE,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBAE/D,oEAAoE;gBACpE,MAAM,QAAQ,GAAc,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACzD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAI,SAAS,EAAE,MAA4B,IAAI,SAAS,CAAC;oBACrE,OAAO;wBACL,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;wBAC1C,eAAe,EAAE,CAAC,CAAC,eAAe;wBAClC,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE;wBACzC,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,EAAE;wBACnC,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;wBACvC,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;wBACvC,MAAM;qBACP,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,wEAAwE;gBACxE,KAAK,UAAU,eAAe,CAAC,EAAgB;oBAC7C,4EAA4E;oBAC5E,IAAI,UAA+B,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;4BACtE,SAAS,CAAC,0BAA0B,EAAE,EAAE,CAAC;4BACzC,SAAS,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;4BACxD,SAAS,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;4BAC/D,SAAS,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;yBAC1D,CAAC,CAAC;wBACH,UAAU,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;oBAC/D,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,4BAA4B,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;wBAC3E,OAAO,KAAK,CAAC,CAAC,UAAU;oBAC1B,CAAC;oBAED,IAAI,SAAS,GAAG,KAAK,CAAC;oBAEtB,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CACvC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE;wBAC3C,SAAS,EAAE,EAAE;wBACb,UAAU;wBACV,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;qBAC/C,CAAC,CACH,CAAC;oBAEF,MAAM,aAAa,EAAE,CAAC;oBACtB,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,wEAAwE;gBACxE,KAAK,UAAU,UAAU;oBACvB,IAAI,gBAAgB,GAAwB,IAAI,CAAC;oBAEjD,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CACvC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE;wBACnC,UAAU,EAAE,aAAc,CAAC,UAAU;wBACrC,qBAAqB,EAAE,aAAc,CAAC,qBAAqB;wBAC3D,OAAO,EAAE,cAAc;wBACvB,QAAQ;wBACR,aAAa;wBACb,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;wBACvB,SAAS,EAAE,CAAC,EAAgB,EAAE,EAAE;4BAC9B,gBAAgB,GAAG,EAAE,CAAC;4BACtB,OAAO,EAAE,CAAC;wBACZ,CAAC;wBACD,QAAQ,EAAE,KAAK,EAAE,EAAgB,EAAE,GAAgB,EAAE,EAAE;4BACrD,IAAI,CAAC;gCACH,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;4BAC3C,CAAC;4BAAC,MAAM,CAAC;gCACP,uEAAuE;4BACzE,CAAC;wBACH,CAAC;qBACF,CAAC,CACH,CAAC;oBAEF,MAAM,aAAa,EAAE,CAAC;oBACtB,OAAO,gBAAgB,CAAC;gBAC1B,CAAC;gBAED,wEAAwE;gBACxE,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,iCAAiC;wBACjC,IAAI,GAAG,KAAK,CAAC;oBACf,CAAC;yBAAM,CAAC;wBACN,gEAAgE;wBAChE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;wBACjD,IAAI,CAAC,SAAS,EAAE,CAAC;4BACf,IAAI,GAAG,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO;YACT,CAAC;YAED,qEAAqE;YACrE,KAAK,CAAC,UAAU,CAAC,CAAC;YAElB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAS;gBAClC,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,iBAAiB,EAAI,IAAI,EAAE,GAAG,oBAAoB,CAAC,MAAM,mDAAmD,EAAE;oBACzI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAG,IAAI,EAAE,0CAA0C,EAAE;oBACnG,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,mBAAmB,EAAG,IAAI,EAAE,iCAAiC,EAAE;iBAC3F;aACF,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,GAAG,CAAC,OAAO,CAAC;oBACV,EAAE;oBACF,uDAAuD;oBACvD,0FAA0F;iBAC3F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACd,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,iCAAiC,oBAAoB,CAAC,MAAM,eAAe,CAAC,CAAC;QACnH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;QAChH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAC9G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,eAAe,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC5G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,GAAG,CAAC,qCAAqC,CAAC,IAAI,CAAC,CAAC;QACzH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,8BAA8B,CAAC,WAAW,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC;QACtH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,iDAAiD,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;SAC7B,WAAW,CAAC,kEAAkE,CAAC,CAAC;IAEnF,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SACnC,WAAW,CAAC,0EAA0E,CAAC,CAAC;IAE3F,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAExB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { pickLatestByCommand } from './index';
|
|
3
|
+
describe('pickLatestByCommand', () => {
|
|
4
|
+
it('keeps the latest row when lastRunAt is present', () => {
|
|
5
|
+
const rows = [
|
|
6
|
+
{ migrationId: 'a', command: 'seed:x', status: 'applied', lastRunAt: 100 },
|
|
7
|
+
{ migrationId: 'b', command: 'seed:x', status: 'failed', lastRunAt: 200 },
|
|
8
|
+
];
|
|
9
|
+
expect(pickLatestByCommand(rows).get('seed:x')?.status).toBe('failed');
|
|
10
|
+
});
|
|
11
|
+
it('does not silently keep the first row when lastRunAt is absent', () => {
|
|
12
|
+
const rows = [
|
|
13
|
+
{ migrationId: 'a', command: 'seed:x', status: 'applied' },
|
|
14
|
+
{ migrationId: 'b', command: 'seed:x', status: 'failed', lastRunAt: 200 },
|
|
15
|
+
];
|
|
16
|
+
expect(pickLatestByCommand(rows).get('seed:x')?.status).toBe('failed');
|
|
17
|
+
});
|
|
18
|
+
it('on a tie with no lastRunAt on either row, the later (newer) row wins', () => {
|
|
19
|
+
const rows = [
|
|
20
|
+
{ migrationId: 'a', command: 'seed:x', status: 'applied' },
|
|
21
|
+
{ migrationId: 'b', command: 'seed:x', status: 'failed' },
|
|
22
|
+
];
|
|
23
|
+
expect(pickLatestByCommand(rows).get('seed:x')?.migrationId).toBe('b');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/commands/admin/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG;YACX,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE;YAC1E,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;SAC1E,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,IAAI,GAAG;YACX,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;YAC1D,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;SAC1E,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,IAAI,GAAG;YACX,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;YAC1D,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;SAC1D,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|