openboot 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.
Files changed (79) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +273 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +132 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/clean.d.ts +7 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +173 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/dev.d.ts +7 -0
  12. package/dist/commands/dev.d.ts.map +1 -0
  13. package/dist/commands/dev.js +92 -0
  14. package/dist/commands/dev.js.map +1 -0
  15. package/dist/commands/down.d.ts +5 -0
  16. package/dist/commands/down.d.ts.map +1 -0
  17. package/dist/commands/down.js +33 -0
  18. package/dist/commands/down.js.map +1 -0
  19. package/dist/commands/init.d.ts +5 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +560 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/logs.d.ts +14 -0
  24. package/dist/commands/logs.d.ts.map +1 -0
  25. package/dist/commands/logs.js +243 -0
  26. package/dist/commands/logs.js.map +1 -0
  27. package/dist/commands/reboot.d.ts +5 -0
  28. package/dist/commands/reboot.d.ts.map +1 -0
  29. package/dist/commands/reboot.js +15 -0
  30. package/dist/commands/reboot.js.map +1 -0
  31. package/dist/commands/setup.d.ts +5 -0
  32. package/dist/commands/setup.d.ts.map +1 -0
  33. package/dist/commands/setup.js +200 -0
  34. package/dist/commands/setup.js.map +1 -0
  35. package/dist/commands/status.d.ts +5 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +200 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/up.d.ts +7 -0
  40. package/dist/commands/up.d.ts.map +1 -0
  41. package/dist/commands/up.js +325 -0
  42. package/dist/commands/up.js.map +1 -0
  43. package/dist/lib/config.d.ts +18 -0
  44. package/dist/lib/config.d.ts.map +1 -0
  45. package/dist/lib/config.js +95 -0
  46. package/dist/lib/config.js.map +1 -0
  47. package/dist/lib/docker.d.ts +19 -0
  48. package/dist/lib/docker.d.ts.map +1 -0
  49. package/dist/lib/docker.js +511 -0
  50. package/dist/lib/docker.js.map +1 -0
  51. package/dist/lib/health.d.ts +5 -0
  52. package/dist/lib/health.d.ts.map +1 -0
  53. package/dist/lib/health.js +80 -0
  54. package/dist/lib/health.js.map +1 -0
  55. package/dist/lib/log.d.ts +11 -0
  56. package/dist/lib/log.d.ts.map +1 -0
  57. package/dist/lib/log.js +51 -0
  58. package/dist/lib/log.js.map +1 -0
  59. package/dist/lib/ports.d.ts +13 -0
  60. package/dist/lib/ports.d.ts.map +1 -0
  61. package/dist/lib/ports.js +45 -0
  62. package/dist/lib/ports.js.map +1 -0
  63. package/dist/lib/prereqs.d.ts +8 -0
  64. package/dist/lib/prereqs.d.ts.map +1 -0
  65. package/dist/lib/prereqs.js +78 -0
  66. package/dist/lib/prereqs.js.map +1 -0
  67. package/dist/lib/process.d.ts +38 -0
  68. package/dist/lib/process.d.ts.map +1 -0
  69. package/dist/lib/process.js +285 -0
  70. package/dist/lib/process.js.map +1 -0
  71. package/dist/lib/tail.d.ts +12 -0
  72. package/dist/lib/tail.d.ts.map +1 -0
  73. package/dist/lib/tail.js +136 -0
  74. package/dist/lib/tail.js.map +1 -0
  75. package/dist/types.d.ts +71 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +3 -0
  78. package/dist/types.js.map +1 -0
  79. package/package.json +29 -0
@@ -0,0 +1,12 @@
1
+ import { BootConfig } from "../types";
2
+ interface TailHandle {
3
+ /** Stop all watchers and clean up. */
4
+ stop: () => void;
5
+ }
6
+ /**
7
+ * Stream all app logs to stdout, interleaved and color-coded by service name.
8
+ * Returns a handle to stop tailing.
9
+ */
10
+ export declare function tailAllLogs(config: BootConfig): TailHandle;
11
+ export {};
12
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/lib/tail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAoBtC,UAAU,UAAU;IAClB,sCAAsC;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwF1D"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.tailAllLogs = tailAllLogs;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const LOGS_DIR = path.join(".boot", "logs");
40
+ /**
41
+ * ANSI color codes for service labels.
42
+ */
43
+ const COLORS = [
44
+ "\x1b[36m", // cyan
45
+ "\x1b[33m", // yellow
46
+ "\x1b[35m", // magenta
47
+ "\x1b[32m", // green
48
+ "\x1b[34m", // blue
49
+ "\x1b[91m", // bright red
50
+ "\x1b[93m", // bright yellow
51
+ "\x1b[95m", // bright magenta
52
+ ];
53
+ const RESET = "\x1b[0m";
54
+ const DIM = "\x1b[2m";
55
+ /**
56
+ * Stream all app logs to stdout, interleaved and color-coded by service name.
57
+ * Returns a handle to stop tailing.
58
+ */
59
+ function tailAllLogs(config) {
60
+ const watchers = [];
61
+ const positions = new Map();
62
+ const apps = config.apps || [];
63
+ const maxNameLen = Math.max(...apps.map((a) => a.name.length), 5);
64
+ // Print initial message
65
+ console.log(`${DIM}Streaming logs for ${apps.length} service${apps.length !== 1 ? "s" : ""}... (Ctrl+C to detach)${RESET}\n`);
66
+ for (let i = 0; i < apps.length; i++) {
67
+ const app = apps[i];
68
+ const color = COLORS[i % COLORS.length];
69
+ const logPath = path.join(LOGS_DIR, `${app.name}.log`);
70
+ const label = app.name.padEnd(maxNameLen);
71
+ // Read existing content from the end (last 5 lines for context)
72
+ if (fs.existsSync(logPath)) {
73
+ const content = fs.readFileSync(logPath, "utf-8");
74
+ const lines = content.split("\n");
75
+ const startLine = Math.max(0, lines.length - 6);
76
+ const tail = lines.slice(startLine).join("\n").trim();
77
+ if (tail) {
78
+ for (const line of tail.split("\n")) {
79
+ console.log(`${color}${label}${RESET} ${DIM}│${RESET} ${line}`);
80
+ }
81
+ }
82
+ positions.set(app.name, content.length);
83
+ }
84
+ else {
85
+ positions.set(app.name, 0);
86
+ }
87
+ // Watch for changes
88
+ try {
89
+ // Ensure the log file exists
90
+ if (!fs.existsSync(logPath)) {
91
+ fs.mkdirSync(path.dirname(logPath), { recursive: true });
92
+ fs.writeFileSync(logPath, "");
93
+ }
94
+ const watcher = fs.watch(logPath, () => {
95
+ try {
96
+ const stat = fs.statSync(logPath);
97
+ const prevPos = positions.get(app.name) || 0;
98
+ if (stat.size > prevPos) {
99
+ // Read new content
100
+ const fd = fs.openSync(logPath, "r");
101
+ const buf = Buffer.alloc(stat.size - prevPos);
102
+ fs.readSync(fd, buf, 0, buf.length, prevPos);
103
+ fs.closeSync(fd);
104
+ const newContent = buf.toString("utf-8");
105
+ const newLines = newContent.split("\n");
106
+ for (const line of newLines) {
107
+ if (line.trim()) {
108
+ console.log(`${color}${label}${RESET} ${DIM}│${RESET} ${line}`);
109
+ }
110
+ }
111
+ positions.set(app.name, stat.size);
112
+ }
113
+ else if (stat.size < prevPos) {
114
+ // File was truncated (e.g. after clean)
115
+ positions.set(app.name, 0);
116
+ }
117
+ }
118
+ catch {
119
+ // File might have been deleted
120
+ }
121
+ });
122
+ watchers.push(watcher);
123
+ }
124
+ catch {
125
+ // Can't watch this file
126
+ }
127
+ }
128
+ return {
129
+ stop: () => {
130
+ for (const w of watchers) {
131
+ w.close();
132
+ }
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=tail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/lib/tail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export interface BootConfig {
2
+ /** Project name */
3
+ name: string;
4
+ /** Package manager override (auto-detected if omitted) */
5
+ packageManager?: "pnpm" | "npm" | "yarn";
6
+ /** Environment file validation */
7
+ env?: EnvConfig;
8
+ /** One-time setup commands (run via `boot setup`) */
9
+ setup?: string[];
10
+ /** Docker services (compose-based or raw containers) */
11
+ docker?: DockerConfig;
12
+ /** Application processes managed by boot */
13
+ apps?: AppConfig[];
14
+ }
15
+ export interface EnvConfig {
16
+ /** Path to .env file (default: .env) */
17
+ file?: string;
18
+ /** Required environment variables — boot up will fail if these are missing */
19
+ required?: string[];
20
+ /** Values that should be rejected (e.g. example/default secrets) */
21
+ reject?: Record<string, string[]>;
22
+ }
23
+ export interface DockerConfig {
24
+ /** Path to compose file (default: docker-compose.yml) */
25
+ composeFile?: string;
26
+ /** Services managed via docker compose (requires composeFile) */
27
+ services?: DockerService[];
28
+ /** Standalone containers managed via docker run/start (no compose needed) */
29
+ containers?: ContainerConfig[];
30
+ }
31
+ export interface DockerService {
32
+ /** Service name (used for display) */
33
+ name: string;
34
+ /** Container name (for docker exec; defaults to name) */
35
+ container?: string;
36
+ /** Command to run inside container to check readiness */
37
+ readyCheck?: string;
38
+ /** Seconds to wait for readiness (default: 30) */
39
+ timeout?: number;
40
+ }
41
+ export interface ContainerConfig {
42
+ /** Container name */
43
+ name: string;
44
+ /** Docker image */
45
+ image: string;
46
+ /** Port mappings (e.g. "5433:5432") */
47
+ ports?: string[];
48
+ /** Environment variables for the container */
49
+ env?: Record<string, string>;
50
+ /** Volume mounts */
51
+ volumes?: string[];
52
+ /** Command to run inside container to check readiness */
53
+ readyCheck?: string;
54
+ /** Seconds to wait for readiness (default: 30) */
55
+ timeout?: number;
56
+ }
57
+ export interface AppConfig {
58
+ /** App name (used for display, PID files, log files) */
59
+ name: string;
60
+ /** Working directory relative to project root */
61
+ path?: string;
62
+ /** Command to start the app */
63
+ command: string;
64
+ /** Port the app listens on */
65
+ port?: number;
66
+ /** URL to poll for health check */
67
+ health?: string;
68
+ /** Extra environment variables */
69
+ env?: Record<string, string>;
70
+ }
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAEzC,kCAAkC;IAClC,GAAG,CAAC,EAAE,SAAS,CAAC;IAEhB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAE3B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IAEb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "openboot",
3
+ "version": "0.1.0",
4
+ "description": "Dev stack lifecycle manager. One command to setup, start, stop, and reboot your projects.",
5
+ "author": "Treadie, Inc.",
6
+ "license": "FSL-1.1-MIT",
7
+ "bin": {
8
+ "boot": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "dependencies": {
19
+ "commander": "^13.1.0",
20
+ "yaml": "^2.7.0"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^22.13.0",
24
+ "typescript": "^5.7.0"
25
+ },
26
+ "engines": {
27
+ "node": ">=18.0.0"
28
+ }
29
+ }