@kurdel/pirx 0.1.0-beta.3 → 0.1.0-beta.5
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 +7 -0
- package/lib/commands/migrate.d.ts +1 -1
- package/lib/commands/migrate.js +4 -2
- package/lib/commands/migrate.js.map +1 -1
- package/lib/components/migrate-status.d.ts +7 -0
- package/lib/components/migrate-status.js +25 -0
- package/lib/components/migrate-status.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -15,11 +15,18 @@ npm install --save-dev @kurdel/pirx@beta
|
|
|
15
15
|
npx pirx migrate run
|
|
16
16
|
npx pirx migrate rollback
|
|
17
17
|
npx pirx migrate refresh
|
|
18
|
+
npx pirx migrate status
|
|
18
19
|
```
|
|
19
20
|
|
|
20
21
|
The commands use the database and migration configuration of the current
|
|
21
22
|
Kurdel application.
|
|
22
23
|
|
|
24
|
+
Mutating commands acquire a database-backed lease before discovering or
|
|
25
|
+
executing migrations, preventing concurrent deploys from applying the same
|
|
26
|
+
migration. The lease is released after success or failure. `status` is
|
|
27
|
+
read-only and lists applied migrations with their batch, pending files, and
|
|
28
|
+
applied records whose migration file is missing.
|
|
29
|
+
|
|
23
30
|
## Requirements
|
|
24
31
|
|
|
25
32
|
Node.js 20.19+, 22.12+, or 24+.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import zod from 'zod';
|
|
3
|
-
export declare const args: zod.ZodTuple<[zod.ZodEnum<["run", "rollback", "refresh"]>], null>;
|
|
3
|
+
export declare const args: zod.ZodTuple<[zod.ZodEnum<["run", "rollback", "refresh", "status"]>], null>;
|
|
4
4
|
type Props = {
|
|
5
5
|
args: zod.infer<typeof args>;
|
|
6
6
|
};
|
package/lib/commands/migrate.js
CHANGED
|
@@ -5,10 +5,11 @@ import { Box, Text } from 'ink';
|
|
|
5
5
|
import MigrateRun from '../components/migrate-run.js';
|
|
6
6
|
import MigrateRollback from '../components/migrate-rollback.js';
|
|
7
7
|
import MigrateRefresh from '../components/migrate-refresh.js';
|
|
8
|
+
import MigrateStatus from '../components/migrate-status.js';
|
|
8
9
|
import Checkmark from '../components/checkmark.js';
|
|
9
10
|
import useMigrationManager from '../hooks/use-migration-manager.js';
|
|
10
11
|
export const args = zod.tuple([
|
|
11
|
-
zod.enum(['run', 'rollback', 'refresh']).describe(argument({
|
|
12
|
+
zod.enum(['run', 'rollback', 'refresh', 'status']).describe(argument({
|
|
12
13
|
name: 'command',
|
|
13
14
|
description: 'Command name',
|
|
14
15
|
})),
|
|
@@ -21,6 +22,7 @@ export default function MigrateCommand({ args: [command] }) {
|
|
|
21
22
|
React.createElement(Text, null, "Connecting database")),
|
|
22
23
|
!!manager && command === 'run' && React.createElement(MigrateRun, { manager: manager }),
|
|
23
24
|
!!manager && command === 'rollback' && React.createElement(MigrateRollback, { manager: manager }),
|
|
24
|
-
!!manager && command === 'refresh' && React.createElement(MigrateRefresh, { manager: manager })
|
|
25
|
+
!!manager && command === 'refresh' && React.createElement(MigrateRefresh, { manager: manager }),
|
|
26
|
+
!!manager && command === 'status' && React.createElement(MigrateStatus, { manager: manager })));
|
|
25
27
|
}
|
|
26
28
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,8BAA8B,CAAC;AACtD,OAAO,eAAe,MAAM,mCAAmC,CAAC;AAChE,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,mBAAmB,MAAM,mCAAmC,CAAC;AAEpE,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,8BAA8B,CAAC;AACtD,OAAO,eAAe,MAAM,mCAAmC,CAAC;AAChE,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAC5D,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,mBAAmB,MAAM,mCAAmC,CAAC;AAEpE,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACzD,QAAQ,CAAC;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,cAAc;KAC5B,CAAC,CACH;CACF,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAS;IAC/D,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAEtC,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC;QACxC,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC;YACT,oBAAC,SAAS,IAAC,IAAI,EAAE,CAAC,CAAC,OAAO,GAAI;YAC9B,oBAAC,IAAI,8BAA2B,CAC5B;QACL,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,oBAAC,UAAU,IAAC,OAAO,EAAE,OAAO,GAAG;QACjE,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,UAAU,IAAI,oBAAC,eAAe,IAAC,OAAO,EAAE,OAAO,GAAG;QAC3E,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,IAAI,oBAAC,cAAc,IAAC,OAAO,EAAE,OAAO,GAAG;QACzE,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,oBAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAG,CACpE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Box, Text, useApp } from 'ink';
|
|
3
|
+
export default function MigrateStatus({ manager }) {
|
|
4
|
+
const { exit } = useApp();
|
|
5
|
+
const [status, setStatus] = useState([]);
|
|
6
|
+
const [error, setError] = useState();
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
manager.status()
|
|
9
|
+
.then(setStatus)
|
|
10
|
+
.catch(reason => setError(reason instanceof Error ? reason.message : String(reason)))
|
|
11
|
+
.finally(() => manager.close().then(() => exit()));
|
|
12
|
+
}, []);
|
|
13
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
14
|
+
status.map(migration => (React.createElement(Text, { key: migration.name, color: migration.state === 'applied'
|
|
15
|
+
? 'green'
|
|
16
|
+
: migration.state === 'pending' ? 'yellow' : 'red' },
|
|
17
|
+
migration.state.padEnd(7),
|
|
18
|
+
" ",
|
|
19
|
+
migration.name,
|
|
20
|
+
migration.batch === undefined ? '' : ` (batch ${migration.batch})`))),
|
|
21
|
+
error && React.createElement(Text, { color: "red" },
|
|
22
|
+
"Failure with message: ",
|
|
23
|
+
error)));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=migrate-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-status.js","sourceRoot":"","sources":["../../src/components/migrate-status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAIxC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,OAAO,EAAS;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAU,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,MAAM,EAAE;aACb,IAAI,CAAC,SAAS,CAAC;aACf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;aACpF,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACxB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CACvB,oBAAC,IAAI,IACH,GAAG,EAAE,SAAS,CAAC,IAAI,EACnB,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,SAAS;gBAClC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YAEnD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;;YAAG,SAAS,CAAC,IAAI;YAC1C,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,KAAK,GAAG,CAC9D,CACR,CAAC;QACD,KAAK,IAAI,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK;;YAAwB,KAAK,CAAQ,CAC5D,CACP,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kurdel/pirx",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.5",
|
|
4
4
|
"description": "Command-line tooling for Kurdel applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tag": "beta"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@kurdel/migrations": "0.1.0-beta.
|
|
44
|
+
"@kurdel/migrations": "0.1.0-beta.5",
|
|
45
45
|
"ink": "^4.4.1",
|
|
46
46
|
"ink-spinner": "^5.0.0",
|
|
47
47
|
"pastel": "^2.0.2",
|