@rotorsoft/contui 1.0.1
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 +192 -0
- package/dist/components/App.d.ts +3 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +365 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/ConfirmDialog.d.ts +9 -0
- package/dist/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ConfirmDialog.js +14 -0
- package/dist/components/ConfirmDialog.js.map +1 -0
- package/dist/components/ContainersView.d.ts +10 -0
- package/dist/components/ContainersView.d.ts.map +1 -0
- package/dist/components/ContainersView.js +46 -0
- package/dist/components/ContainersView.js.map +1 -0
- package/dist/components/CreateDialog.d.ts +9 -0
- package/dist/components/CreateDialog.d.ts.map +1 -0
- package/dist/components/CreateDialog.js +19 -0
- package/dist/components/CreateDialog.js.map +1 -0
- package/dist/components/DetailView.d.ts +9 -0
- package/dist/components/DetailView.d.ts.map +1 -0
- package/dist/components/DetailView.js +38 -0
- package/dist/components/DetailView.js.map +1 -0
- package/dist/components/HelpOverlay.d.ts +7 -0
- package/dist/components/HelpOverlay.d.ts.map +1 -0
- package/dist/components/HelpOverlay.js +54 -0
- package/dist/components/HelpOverlay.js.map +1 -0
- package/dist/components/ImagesView.d.ts +10 -0
- package/dist/components/ImagesView.d.ts.map +1 -0
- package/dist/components/ImagesView.js +17 -0
- package/dist/components/ImagesView.js.map +1 -0
- package/dist/components/LogsView.d.ts +9 -0
- package/dist/components/LogsView.d.ts.map +1 -0
- package/dist/components/LogsView.js +7 -0
- package/dist/components/LogsView.js.map +1 -0
- package/dist/components/NetworksView.d.ts +10 -0
- package/dist/components/NetworksView.d.ts.map +1 -0
- package/dist/components/NetworksView.js +16 -0
- package/dist/components/NetworksView.js.map +1 -0
- package/dist/components/PullDialog.d.ts +8 -0
- package/dist/components/PullDialog.d.ts.map +1 -0
- package/dist/components/PullDialog.js +19 -0
- package/dist/components/PullDialog.js.map +1 -0
- package/dist/components/SearchInput.d.ts +9 -0
- package/dist/components/SearchInput.d.ts.map +1 -0
- package/dist/components/SearchInput.js +7 -0
- package/dist/components/SearchInput.js.map +1 -0
- package/dist/components/StatusBar.d.ts +13 -0
- package/dist/components/StatusBar.d.ts.map +1 -0
- package/dist/components/StatusBar.js +31 -0
- package/dist/components/StatusBar.js.map +1 -0
- package/dist/components/TabBar.d.ts +8 -0
- package/dist/components/TabBar.d.ts.map +1 -0
- package/dist/components/TabBar.js +13 -0
- package/dist/components/TabBar.js.map +1 -0
- package/dist/components/Table.d.ts +16 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +19 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/VolumesView.d.ts +10 -0
- package/dist/components/VolumesView.d.ts.map +1 -0
- package/dist/components/VolumesView.js +16 -0
- package/dist/components/VolumesView.js.map +1 -0
- package/dist/hooks/useContainerData.d.ts +13 -0
- package/dist/hooks/useContainerData.d.ts.map +1 -0
- package/dist/hooks/useContainerData.js +46 -0
- package/dist/hooks/useContainerData.js.map +1 -0
- package/dist/hooks/useKeyboard.d.ts +18 -0
- package/dist/hooks/useKeyboard.d.ts.map +1 -0
- package/dist/hooks/useKeyboard.js +122 -0
- package/dist/hooks/useKeyboard.js.map +1 -0
- package/dist/hooks/useReleaseCheck.d.ts +15 -0
- package/dist/hooks/useReleaseCheck.d.ts.map +1 -0
- package/dist/hooks/useReleaseCheck.js +60 -0
- package/dist/hooks/useReleaseCheck.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/services/container-cli.d.ts +33 -0
- package/dist/services/container-cli.d.ts.map +1 -0
- package/dist/services/container-cli.js +241 -0
- package/dist/services/container-cli.js.map +1 -0
- package/dist/services/health-check.d.ts +8 -0
- package/dist/services/health-check.d.ts.map +1 -0
- package/dist/services/health-check.js +59 -0
- package/dist/services/health-check.js.map +1 -0
- package/dist/types/index.d.ts +79 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/app-version.d.ts +2 -0
- package/dist/utils/app-version.d.ts.map +1 -0
- package/dist/utils/app-version.js +18 -0
- package/dist/utils/app-version.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { exec } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
const CLI_COMMAND = "container";
|
|
5
|
+
export async function checkCliInstalled() {
|
|
6
|
+
try {
|
|
7
|
+
const { stdout } = await execAsync(`which ${CLI_COMMAND}`);
|
|
8
|
+
if (!stdout.trim()) {
|
|
9
|
+
return { installed: false };
|
|
10
|
+
}
|
|
11
|
+
const { stdout: version } = await execAsync(`${CLI_COMMAND} --version`);
|
|
12
|
+
return { installed: true, version: version.trim() };
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { installed: false };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function checkServiceRunning() {
|
|
19
|
+
try {
|
|
20
|
+
// Use 'ls' command - macOS container CLI uses 'ls' not 'ps'
|
|
21
|
+
await execAsync(`${CLI_COMMAND} ls`, { timeout: 5000 });
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function performHealthCheck() {
|
|
29
|
+
const cliCheck = await checkCliInstalled();
|
|
30
|
+
if (!cliCheck.installed) {
|
|
31
|
+
return {
|
|
32
|
+
cliInstalled: false,
|
|
33
|
+
serviceRunning: false,
|
|
34
|
+
error: "The 'container' CLI is not installed. Please install it to use this application.\n\n" +
|
|
35
|
+
"On macOS, you can use Homebrew:\n" +
|
|
36
|
+
" brew install container\n\n" +
|
|
37
|
+
"Or download from the official website.",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const serviceRunning = await checkServiceRunning();
|
|
41
|
+
if (!serviceRunning) {
|
|
42
|
+
return {
|
|
43
|
+
cliInstalled: true,
|
|
44
|
+
cliVersion: cliCheck.version,
|
|
45
|
+
serviceRunning: false,
|
|
46
|
+
error: "The container service is not running. Please start it to use this application.\n\n" +
|
|
47
|
+
"You can start the service with:\n" +
|
|
48
|
+
" container system start\n\n" +
|
|
49
|
+
"Or verify by running:\n" +
|
|
50
|
+
" container ps",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
cliInstalled: true,
|
|
55
|
+
cliVersion: cliCheck.version,
|
|
56
|
+
serviceRunning: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=health-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,WAAW,YAAY,CAAC,CAAC;QACxE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,SAAS,CAAC,GAAG,WAAW,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE3C,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACxB,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;YACrB,KAAK,EACH,sFAAsF;gBACtF,mCAAmC;gBACnC,8BAA8B;gBAC9B,wCAAwC;SAC3C,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,QAAQ,CAAC,OAAO;YAC5B,cAAc,EAAE,KAAK;YACrB,KAAK,EACH,oFAAoF;gBACpF,mCAAmC;gBACnC,8BAA8B;gBAC9B,yBAAyB;gBACzB,gBAAgB;SACnB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,QAAQ,CAAC,OAAO;QAC5B,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface Container {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
image: string;
|
|
5
|
+
status: ContainerStatus;
|
|
6
|
+
state: string;
|
|
7
|
+
ports: PortMapping[];
|
|
8
|
+
created: string;
|
|
9
|
+
command?: string;
|
|
10
|
+
}
|
|
11
|
+
export type ContainerStatus = "running" | "stopped" | "paused" | "restarting" | "created" | "dead";
|
|
12
|
+
export interface PortMapping {
|
|
13
|
+
hostPort: number;
|
|
14
|
+
containerPort: number;
|
|
15
|
+
protocol: "tcp" | "udp";
|
|
16
|
+
}
|
|
17
|
+
export interface Image {
|
|
18
|
+
id: string;
|
|
19
|
+
repository: string;
|
|
20
|
+
tag: string;
|
|
21
|
+
size: string;
|
|
22
|
+
created: string;
|
|
23
|
+
reference: string;
|
|
24
|
+
}
|
|
25
|
+
export interface Network {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
driver: string;
|
|
29
|
+
scope: string;
|
|
30
|
+
ipam?: {
|
|
31
|
+
subnet?: string;
|
|
32
|
+
gateway?: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface Volume {
|
|
36
|
+
name: string;
|
|
37
|
+
driver: string;
|
|
38
|
+
mountpoint: string;
|
|
39
|
+
scope: string;
|
|
40
|
+
created?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ContainerDetails extends Container {
|
|
43
|
+
networkSettings?: {
|
|
44
|
+
ipAddress?: string;
|
|
45
|
+
gateway?: string;
|
|
46
|
+
networks?: Record<string, {
|
|
47
|
+
ipAddress?: string;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
mounts?: Array<{
|
|
51
|
+
type: string;
|
|
52
|
+
source: string;
|
|
53
|
+
destination: string;
|
|
54
|
+
}>;
|
|
55
|
+
config?: {
|
|
56
|
+
env?: string[];
|
|
57
|
+
workingDir?: string;
|
|
58
|
+
entrypoint?: string[];
|
|
59
|
+
cmd?: string[];
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export interface HealthStatus {
|
|
63
|
+
cliInstalled: boolean;
|
|
64
|
+
cliVersion?: string;
|
|
65
|
+
serviceRunning: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
export type Tab = "containers" | "images" | "networks" | "volumes";
|
|
69
|
+
export interface AppState {
|
|
70
|
+
activeTab: Tab;
|
|
71
|
+
selectedIndex: number;
|
|
72
|
+
searchQuery: string;
|
|
73
|
+
showHelp: boolean;
|
|
74
|
+
showLogs: boolean;
|
|
75
|
+
showInspect: boolean;
|
|
76
|
+
error?: string;
|
|
77
|
+
loading: boolean;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnG,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;CACzB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnD,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,GAAG,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-version.d.ts","sourceRoot":"","sources":["../../src/utils/app-version.ts"],"names":[],"mappings":"AAeA,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
function readVersionFromPackageJson() {
|
|
5
|
+
try {
|
|
6
|
+
const packagePath = resolve(dirname(fileURLToPath(import.meta.url)), "../../package.json");
|
|
7
|
+
const contents = readFileSync(packagePath, "utf8");
|
|
8
|
+
const parsed = JSON.parse(contents);
|
|
9
|
+
return parsed.version ?? null;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function getAppVersion() {
|
|
16
|
+
return process.env.npm_package_version ?? readVersionFromPackageJson() ?? "unknown";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=app-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-version.js","sourceRoot":"","sources":["../../src/utils/app-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,SAAS,0BAA0B;IACjC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAyB,CAAC;QAC5D,OAAO,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,0BAA0B,EAAE,IAAI,SAAS,CAAC;AACtF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rotorsoft/contui",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Terminal UI for macOS native container management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"contui": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"dev": "tsx src/index.tsx",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
22
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
|
23
|
+
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
24
|
+
"test": "NODE_OPTIONS='--experimental-vm-modules' jest",
|
|
25
|
+
"test:watch": "NODE_OPTIONS='--experimental-vm-modules' jest --watch",
|
|
26
|
+
"test:coverage": "NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
|
|
27
|
+
"prepare": "husky"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"container",
|
|
31
|
+
"docker",
|
|
32
|
+
"tui",
|
|
33
|
+
"terminal",
|
|
34
|
+
"macos"
|
|
35
|
+
],
|
|
36
|
+
"author": "",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"ink": "^5.0.1",
|
|
40
|
+
"ink-select-input": "^6.0.0",
|
|
41
|
+
"ink-spinner": "^5.0.0",
|
|
42
|
+
"ink-text-input": "^6.0.0",
|
|
43
|
+
"react": "^18.3.1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@commitlint/cli": "^19.6.1",
|
|
47
|
+
"@commitlint/config-conventional": "^19.6.0",
|
|
48
|
+
"@eslint/js": "^9.17.0",
|
|
49
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
50
|
+
"@semantic-release/git": "^10.0.1",
|
|
51
|
+
"@types/jest": "^29.5.14",
|
|
52
|
+
"@types/node": "^22.10.2",
|
|
53
|
+
"@types/react": "^18.3.12",
|
|
54
|
+
"eslint": "^9.17.0",
|
|
55
|
+
"eslint-plugin-react": "^7.37.2",
|
|
56
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
57
|
+
"husky": "^9.1.7",
|
|
58
|
+
"ink-testing-library": "^4.0.0",
|
|
59
|
+
"jest": "^29.7.0",
|
|
60
|
+
"prettier": "^3.4.2",
|
|
61
|
+
"semantic-release": "^24.2.1",
|
|
62
|
+
"ts-jest": "^29.2.5",
|
|
63
|
+
"tsx": "^4.19.2",
|
|
64
|
+
"typescript": "^5.7.2",
|
|
65
|
+
"typescript-eslint": "^8.18.0"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=18.0.0"
|
|
69
|
+
}
|
|
70
|
+
}
|