@cloak-db/app 0.1.0

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/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.js ADDED
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { spawn, execSync } from "child_process";
5
+ import { parseArgs } from "util";
6
+ var IMAGE_NAME = "ghcr.io/cloak-db/app";
7
+ var DEFAULT_PORT = 3e3;
8
+ function printHelp() {
9
+ console.log(`
10
+ Cloak DB - Local-first database studio
11
+
12
+ Usage: cloak-app [options]
13
+
14
+ Options:
15
+ -p, --port <port> Port to run on (default: ${DEFAULT_PORT})
16
+ -v, --version <tag> Docker image version/tag (default: latest)
17
+ -h, --help Show this help message
18
+
19
+ Examples:
20
+ cloak-app # Run on port ${DEFAULT_PORT}
21
+ cloak-app --port 8080 # Run on port 8080
22
+ cloak-app --version v0.2.0 # Run specific version
23
+
24
+ Requirements:
25
+ Docker must be installed and running.
26
+ Install from https://docker.com
27
+ `);
28
+ }
29
+ function parseCliArgs() {
30
+ try {
31
+ const { values } = parseArgs({
32
+ options: {
33
+ port: { type: "string", short: "p", default: String(DEFAULT_PORT) },
34
+ version: { type: "string", short: "v", default: "latest" },
35
+ help: { type: "boolean", short: "h", default: false }
36
+ },
37
+ allowPositionals: false
38
+ });
39
+ return {
40
+ port: parseInt(values.port, 10),
41
+ version: values.version,
42
+ help: values.help
43
+ };
44
+ } catch {
45
+ console.error("Error parsing arguments. Use --help for usage information.");
46
+ process.exit(1);
47
+ }
48
+ }
49
+ function checkDocker() {
50
+ try {
51
+ execSync("docker --version", { stdio: "ignore" });
52
+ return true;
53
+ } catch {
54
+ return false;
55
+ }
56
+ }
57
+ function checkDockerRunning() {
58
+ try {
59
+ execSync("docker info", { stdio: "ignore" });
60
+ return true;
61
+ } catch {
62
+ return false;
63
+ }
64
+ }
65
+ function runContainer(options) {
66
+ const image = `${IMAGE_NAME}:${options.version}`;
67
+ const containerName = `cloak-app-${Date.now()}`;
68
+ console.log(`
69
+ \u{1F680} Starting Cloak DB on port ${options.port}...`);
70
+ console.log(` Image: ${image}
71
+ `);
72
+ const dockerProcess = spawn(
73
+ "docker",
74
+ [
75
+ "run",
76
+ "--rm",
77
+ "--name",
78
+ containerName,
79
+ "-p",
80
+ `${options.port}:3000`,
81
+ image
82
+ ],
83
+ { stdio: "inherit" }
84
+ );
85
+ const cleanup = () => {
86
+ console.log("\n\n\u{1F6D1} Stopping Cloak DB...");
87
+ try {
88
+ execSync(`docker stop ${containerName}`, { stdio: "ignore" });
89
+ } catch {
90
+ }
91
+ };
92
+ process.on("SIGINT", cleanup);
93
+ process.on("SIGTERM", cleanup);
94
+ dockerProcess.on("error", (err) => {
95
+ console.error(`Failed to start container: ${err.message}`);
96
+ process.exit(1);
97
+ });
98
+ dockerProcess.on("close", (code) => {
99
+ process.exit(code ?? 0);
100
+ });
101
+ }
102
+ function main() {
103
+ const options = parseCliArgs();
104
+ if (options.help) {
105
+ printHelp();
106
+ process.exit(0);
107
+ }
108
+ if (!checkDocker()) {
109
+ console.error(`
110
+ \u274C Docker is required to run Cloak DB.
111
+
112
+ Install Docker from: https://docker.com
113
+ `);
114
+ process.exit(1);
115
+ }
116
+ if (!checkDockerRunning()) {
117
+ console.error(`
118
+ \u274C Docker is installed but not running.
119
+
120
+ Please start Docker Desktop or the Docker daemon.
121
+ `);
122
+ process.exit(1);
123
+ }
124
+ if (isNaN(options.port) || options.port < 1 || options.port > 65535) {
125
+ console.error(`\u274C Invalid port: ${options.port}. Must be between 1 and 65535.`);
126
+ process.exit(1);
127
+ }
128
+ runContainer(options);
129
+ }
130
+ main();
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@cloak-db/app",
3
+ "version": "0.1.0",
4
+ "description": "Run Cloak DB locally with Docker",
5
+ "type": "module",
6
+ "bin": {
7
+ "cloak-app": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsup src/cli.ts --format esm --dts",
14
+ "dev": "tsup src/cli.ts --format esm --watch",
15
+ "typecheck": "tsc --noEmit",
16
+ "prepublishOnly": "pnpm build"
17
+ },
18
+ "keywords": [
19
+ "cloak-db",
20
+ "database",
21
+ "postgres",
22
+ "docker",
23
+ "cli"
24
+ ],
25
+ "author": "Cloak DB",
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/cloak-db/cloak-db.git",
30
+ "directory": "packages/cli"
31
+ },
32
+ "homepage": "https://cloak-db.com",
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^22.0.0",
38
+ "tsup": "^8.0.0",
39
+ "typescript": "^5.9.2"
40
+ }
41
+ }