@gachlab/devup 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/LICENSE +21 -0
- package/README.md +332 -0
- package/dist/chunk-LG7UD5ZR.js +54 -0
- package/dist/chunk-LG7UD5ZR.js.map +1 -0
- package/dist/config/cli.d.ts +17 -0
- package/dist/config/cli.d.ts.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/types.d.ts +37 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/validator.d.ts +8 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/darwin-3KJ3IEXN.js +17 -0
- package/dist/darwin-3KJ3IEXN.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1336 -0
- package/dist/index.js.map +1 -0
- package/dist/lazy/classifier.d.ts +14 -0
- package/dist/lazy/classifier.d.ts.map +1 -0
- package/dist/lazy/proxy.d.ts +17 -0
- package/dist/lazy/proxy.d.ts.map +1 -0
- package/dist/linux-OQ3Q4Z2Z.js +8 -0
- package/dist/linux-OQ3Q4Z2Z.js.map +1 -0
- package/dist/platform/darwin.d.ts +6 -0
- package/dist/platform/darwin.d.ts.map +1 -0
- package/dist/platform/detect.d.ts +3 -0
- package/dist/platform/detect.d.ts.map +1 -0
- package/dist/platform/linux.d.ts +8 -0
- package/dist/platform/linux.d.ts.map +1 -0
- package/dist/platform/types.d.ts +11 -0
- package/dist/platform/types.d.ts.map +1 -0
- package/dist/platform/win32.d.ts +8 -0
- package/dist/platform/win32.d.ts.map +1 -0
- package/dist/process/health.d.ts +8 -0
- package/dist/process/health.d.ts.map +1 -0
- package/dist/process/installer.d.ts +12 -0
- package/dist/process/installer.d.ts.map +1 -0
- package/dist/process/manager.d.ts +26 -0
- package/dist/process/manager.d.ts.map +1 -0
- package/dist/process/types.d.ts +21 -0
- package/dist/process/types.d.ts.map +1 -0
- package/dist/proxy-config/detect.d.ts +3 -0
- package/dist/proxy-config/detect.d.ts.map +1 -0
- package/dist/proxy-config/traefik.d.ts +8 -0
- package/dist/proxy-config/traefik.d.ts.map +1 -0
- package/dist/proxy-config/types.d.ts +21 -0
- package/dist/proxy-config/types.d.ts.map +1 -0
- package/dist/tui/App.d.ts +17 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/LogsPanel.d.ts +14 -0
- package/dist/tui/LogsPanel.d.ts.map +1 -0
- package/dist/tui/SearchInput.d.ts +7 -0
- package/dist/tui/SearchInput.d.ts.map +1 -0
- package/dist/tui/ServiceList.d.ts +11 -0
- package/dist/tui/ServiceList.d.ts.map +1 -0
- package/dist/tui/StatsPanel.d.ts +13 -0
- package/dist/tui/StatsPanel.d.ts.map +1 -0
- package/dist/tui/StatusBar.d.ts +2 -0
- package/dist/tui/StatusBar.d.ts.map +1 -0
- package/dist/tui/hooks/useKeyBindings.d.ts +31 -0
- package/dist/tui/hooks/useKeyBindings.d.ts.map +1 -0
- package/dist/tui/hooks/useProcessManager.d.ts +26 -0
- package/dist/tui/hooks/useProcessManager.d.ts.map +1 -0
- package/dist/tui/hooks/useProxySync.d.ts +4 -0
- package/dist/tui/hooks/useProxySync.d.ts.map +1 -0
- package/dist/utils.d.ts +22 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/win32-3X2OLSI6.js +49 -0
- package/dist/win32-3X2OLSI6.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type Modal = 'none' | 'filter' | 'restart' | 'open' | 'search';
|
|
2
|
+
export type Panel = 'logs' | 'stats';
|
|
3
|
+
export interface KeyState {
|
|
4
|
+
panel: Panel;
|
|
5
|
+
modal: Modal;
|
|
6
|
+
logFilter: string | null;
|
|
7
|
+
searchTerm: string | null;
|
|
8
|
+
logsPaused: boolean;
|
|
9
|
+
showTimestamps: boolean;
|
|
10
|
+
sortIdx: number;
|
|
11
|
+
proxyEnabled: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function useKeyBindings(opts: {
|
|
14
|
+
onQuit: () => void;
|
|
15
|
+
onClearLogs: () => void;
|
|
16
|
+
onToggleProxy: () => void;
|
|
17
|
+
}): {
|
|
18
|
+
setModal: (modal: Modal) => void;
|
|
19
|
+
setFilter: (f: string | null) => void;
|
|
20
|
+
setSearch: (t: string | null) => void;
|
|
21
|
+
sortMode: "name" | "mem" | "errors";
|
|
22
|
+
panel: Panel;
|
|
23
|
+
modal: Modal;
|
|
24
|
+
logFilter: string | null;
|
|
25
|
+
searchTerm: string | null;
|
|
26
|
+
logsPaused: boolean;
|
|
27
|
+
showTimestamps: boolean;
|
|
28
|
+
sortIdx: number;
|
|
29
|
+
proxyEnabled: boolean;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=useKeyBindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyBindings.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyBindings.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACtE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAErC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;sBAMsC,KAAK;mBACR,MAAM,GAAG,IAAI;mBACb,MAAM,GAAG,IAAI;;WAxBxC,KAAK;WACL,KAAK;eACD,MAAM,GAAG,IAAI;gBACZ,MAAM,GAAG,IAAI;gBACb,OAAO;oBACH,OAAO;aACd,MAAM;kBACD,OAAO;EAuCtB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ProcessManager } from '../../process/manager.js';
|
|
2
|
+
import type { ProcessState } from '../../process/types.js';
|
|
3
|
+
import type { Platform } from '../../platform/types.js';
|
|
4
|
+
import type { ServiceConfig } from '../../config/types.js';
|
|
5
|
+
export interface LogEntry {
|
|
6
|
+
svcName: string;
|
|
7
|
+
text: string;
|
|
8
|
+
colorIdx: number;
|
|
9
|
+
ts: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ServiceStats {
|
|
12
|
+
cpu: string;
|
|
13
|
+
mem: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function useProcessManager(platform: Platform, baseCwd: string, env: Record<string, string>): {
|
|
16
|
+
states: Map<string, ProcessState>;
|
|
17
|
+
logs: LogEntry[];
|
|
18
|
+
stats: Map<string, ServiceStats>;
|
|
19
|
+
start: (svc: ServiceConfig, colorIdx: number) => Promise<void> | undefined;
|
|
20
|
+
stop: (name: string) => void | undefined;
|
|
21
|
+
restart: (name: string) => Promise<void> | undefined;
|
|
22
|
+
install: (svc: ServiceConfig) => Promise<boolean> | undefined;
|
|
23
|
+
cleanup: () => void | undefined;
|
|
24
|
+
manager: ProcessManager | null;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=useProcessManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProcessManager.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useProcessManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;iBA2DrE,aAAa,YAAY,MAAM;iBAC/B,MAAM;oBACH,MAAM;mBACP,aAAa;;;EAI3C"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProxyConfigProvider, ProxyOpts } from '../../proxy-config/types.js';
|
|
2
|
+
import type { ProcessState } from '../../process/types.js';
|
|
3
|
+
export declare function useProxySync(provider: ProxyConfigProvider | null, opts: ProxyOpts | null, states: Map<string, ProcessState>, enabled: boolean): void;
|
|
4
|
+
//# sourceMappingURL=useProxySync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProxySync.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useProxySync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAgB,MAAM,6BAA6B,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,GAAG,IAAI,EACpC,IAAI,EAAE,SAAS,GAAG,IAAI,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,QAuBjB"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ServiceConfig } from './config/types.js';
|
|
2
|
+
export declare function parseEnvFile(filePath: string, baseEnv?: Record<string, string>): Record<string, string>;
|
|
3
|
+
export declare function fmtUptime(ms: number): string;
|
|
4
|
+
export declare function highlightSearch(text: string, term: string | null, escapeFn?: (s: string) => string): string;
|
|
5
|
+
export declare function findSearchMatch(lines: string[], term: string, currentScroll: number, direction: 'next' | 'prev', stripTagsFn?: (s: string) => string): number;
|
|
6
|
+
export declare function formatLogLine(svcName: string, line: string, colorTag: string, maxNameLen: number, showTimestamps: boolean, searchTerm: string | null, escapeFn?: (s: string) => string): string;
|
|
7
|
+
export declare function shouldLogLine(svcName: string, filter: string | null): boolean;
|
|
8
|
+
export declare function buildLogsLabel(filter: string | null, searchTerm: string | null, paused: boolean): string;
|
|
9
|
+
export declare function needsInstall(fullCwd: string): boolean;
|
|
10
|
+
export declare function writeInstallStamp(fullCwd: string): void;
|
|
11
|
+
export declare function sortServiceNames(names: string[], sortMode: string, statsMap: Record<string, {
|
|
12
|
+
cpu?: string;
|
|
13
|
+
mem?: string;
|
|
14
|
+
}>, procState: Record<string, {
|
|
15
|
+
errors?: number;
|
|
16
|
+
}>): string[];
|
|
17
|
+
export declare function groupByPhase(services: ServiceConfig[]): Record<number, ServiceConfig[]>;
|
|
18
|
+
export declare function buildProcessArgs(svc: ServiceConfig): string[];
|
|
19
|
+
export declare function buildProcessEnv(svc: ServiceConfig, baseEnv: Record<string, string>): Record<string, string>;
|
|
20
|
+
export declare function calcCpuPercent(totalCpuSec: number, prevCpu: number, prevTime: number): number;
|
|
21
|
+
export declare const tagColors: string[];
|
|
22
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB3G;AAID,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAM3G;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EACpD,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAC9D,MAAM,CAWR;AAID,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EACnE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GACnF,MAAM,CAKR;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE7E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAMxG;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKvD;AAID,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,MAAM,EAAE,CAQV;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAMvF;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,EAAE,CAK7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3G;AAID,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7F;AAID,eAAO,MAAM,SAAS,UAIrB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/platform/win32.ts
|
|
4
|
+
import { exec, spawn } from "child_process";
|
|
5
|
+
var Win32Platform = class {
|
|
6
|
+
defaultTraefikHost = "host.docker.internal";
|
|
7
|
+
getProcessStats(pids) {
|
|
8
|
+
if (!pids.length) return Promise.resolve(/* @__PURE__ */ new Map());
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const filter = pids.map((p) => `ProcessId=${p}`).join(" OR ");
|
|
11
|
+
exec(
|
|
12
|
+
`wmic process where "${filter}" get ProcessId,WorkingSetSize,KernelModeTime,UserModeTime /format:csv 2>nul`,
|
|
13
|
+
{ encoding: "utf8", timeout: 5e3 },
|
|
14
|
+
(err, stdout) => {
|
|
15
|
+
const map = /* @__PURE__ */ new Map();
|
|
16
|
+
if (err || !stdout) return resolve(map);
|
|
17
|
+
for (const line of stdout.trim().split("\n").slice(1)) {
|
|
18
|
+
const cols = line.trim().split(",");
|
|
19
|
+
if (cols.length < 5) continue;
|
|
20
|
+
const pid = parseInt(cols[2], 10);
|
|
21
|
+
const kernelTime = parseInt(cols[1], 10) || 0;
|
|
22
|
+
const userTime = parseInt(cols[3], 10) || 0;
|
|
23
|
+
const workingSet = parseInt(cols[4], 10) || 0;
|
|
24
|
+
map.set(pid, {
|
|
25
|
+
rss: Math.round(workingSet / 1024),
|
|
26
|
+
// bytes → KB
|
|
27
|
+
cpuSeconds: (kernelTime + userTime) / 1e7
|
|
28
|
+
// 100ns → seconds
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
resolve(map);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
killTree(pid) {
|
|
37
|
+
try {
|
|
38
|
+
exec(`taskkill /PID ${pid} /T /F`, { timeout: 5e3 });
|
|
39
|
+
} catch {
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
openBrowser(url) {
|
|
43
|
+
spawn("cmd", ["/c", "start", "", url], { detached: true, stdio: "ignore" }).unref();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export {
|
|
47
|
+
Win32Platform
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=win32-3X2OLSI6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/win32.ts"],"sourcesContent":["import { exec, spawn } from 'node:child_process';\nimport type { Platform, ProcessStats } from './types.js';\n\nexport class Win32Platform implements Platform {\n readonly defaultTraefikHost = 'host.docker.internal';\n\n getProcessStats(pids: number[]): Promise<Map<number, ProcessStats>> {\n if (!pids.length) return Promise.resolve(new Map());\n\n return new Promise(resolve => {\n const filter = pids.map(p => `ProcessId=${p}`).join(' OR ');\n exec(\n `wmic process where \"${filter}\" get ProcessId,WorkingSetSize,KernelModeTime,UserModeTime /format:csv 2>nul`,\n { encoding: 'utf8', timeout: 5000 },\n (err, stdout) => {\n const map = new Map<number, ProcessStats>();\n if (err || !stdout) return resolve(map);\n\n // CSV: Node,KernelModeTime,ProcessId,UserModeTime,WorkingSetSize\n for (const line of stdout.trim().split('\\n').slice(1)) {\n const cols = line.trim().split(',');\n if (cols.length < 5) continue;\n const pid = parseInt(cols[2]!, 10);\n const kernelTime = parseInt(cols[1]!, 10) || 0; // 100-nanosecond units\n const userTime = parseInt(cols[3]!, 10) || 0;\n const workingSet = parseInt(cols[4]!, 10) || 0;\n map.set(pid, {\n rss: Math.round(workingSet / 1024), // bytes → KB\n cpuSeconds: (kernelTime + userTime) / 10_000_000, // 100ns → seconds\n });\n }\n resolve(map);\n },\n );\n });\n }\n\n killTree(pid: number): void {\n try {\n exec(`taskkill /PID ${pid} /T /F`, { timeout: 5000 });\n } catch { /* already dead */ }\n }\n\n openBrowser(url: string): void {\n spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore' }).unref();\n }\n}\n"],"mappings":";;;AAAA,SAAS,MAAM,aAAa;AAGrB,IAAM,gBAAN,MAAwC;AAAA,EACpC,qBAAqB;AAAA,EAE9B,gBAAgB,MAAoD;AAClE,QAAI,CAAC,KAAK,OAAQ,QAAO,QAAQ,QAAQ,oBAAI,IAAI,CAAC;AAElD,WAAO,IAAI,QAAQ,aAAW;AAC5B,YAAM,SAAS,KAAK,IAAI,OAAK,aAAa,CAAC,EAAE,EAAE,KAAK,MAAM;AAC1D;AAAA,QACE,uBAAuB,MAAM;AAAA,QAC7B,EAAE,UAAU,QAAQ,SAAS,IAAK;AAAA,QAClC,CAAC,KAAK,WAAW;AACf,gBAAM,MAAM,oBAAI,IAA0B;AAC1C,cAAI,OAAO,CAAC,OAAQ,QAAO,QAAQ,GAAG;AAGtC,qBAAW,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE,MAAM,CAAC,GAAG;AACrD,kBAAM,OAAO,KAAK,KAAK,EAAE,MAAM,GAAG;AAClC,gBAAI,KAAK,SAAS,EAAG;AACrB,kBAAM,MAAM,SAAS,KAAK,CAAC,GAAI,EAAE;AACjC,kBAAM,aAAa,SAAS,KAAK,CAAC,GAAI,EAAE,KAAK;AAC7C,kBAAM,WAAW,SAAS,KAAK,CAAC,GAAI,EAAE,KAAK;AAC3C,kBAAM,aAAa,SAAS,KAAK,CAAC,GAAI,EAAE,KAAK;AAC7C,gBAAI,IAAI,KAAK;AAAA,cACX,KAAK,KAAK,MAAM,aAAa,IAAI;AAAA;AAAA,cACjC,aAAa,aAAa,YAAY;AAAA;AAAA,YACxC,CAAC;AAAA,UACH;AACA,kBAAQ,GAAG;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,KAAmB;AAC1B,QAAI;AACF,WAAK,iBAAiB,GAAG,UAAU,EAAE,SAAS,IAAK,CAAC;AAAA,IACtD,QAAQ;AAAA,IAAqB;AAAA,EAC/B;AAAA,EAEA,YAAY,KAAmB;AAC7B,UAAM,OAAO,CAAC,MAAM,SAAS,IAAI,GAAG,GAAG,EAAE,UAAU,MAAM,OAAO,SAAS,CAAC,EAAE,MAAM;AAAA,EACpF;AACF;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gachlab/devup",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Dev stack runner with TUI, lazy proxy, and reverse proxy support",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"devup": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"dev",
|
|
23
|
+
"monorepo",
|
|
24
|
+
"microservices",
|
|
25
|
+
"tui",
|
|
26
|
+
"terminal",
|
|
27
|
+
"process-manager",
|
|
28
|
+
"lazy-proxy",
|
|
29
|
+
"traefik",
|
|
30
|
+
"ink",
|
|
31
|
+
"devtools"
|
|
32
|
+
],
|
|
33
|
+
"author": "gachlab",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/gachlab/devup.git"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/gachlab/devup#readme",
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/gachlab/devup/issues"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsup && tsc --emitDeclarationOnly",
|
|
45
|
+
"dev": "tsup --watch",
|
|
46
|
+
"prepublishOnly": "npm run build",
|
|
47
|
+
"test": "node --import tsx --test \"tests/**/*.test.ts\"",
|
|
48
|
+
"test:unit": "node --import tsx --test \"tests/unit/**/*.test.ts\"",
|
|
49
|
+
"test:integration": "node --import tsx --test \"tests/integration/**/*.test.ts\"",
|
|
50
|
+
"test:watch": "node --import tsx --test --watch \"tests/**/*.test.ts\"",
|
|
51
|
+
"test:coverage": "node --import tsx --test --experimental-test-coverage \"tests/**/*.test.ts\""
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"ink": "7.0.1",
|
|
55
|
+
"react": "19.2.5"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "22.15.3",
|
|
59
|
+
"@types/react": "19.2.14",
|
|
60
|
+
"tsup": "8.5.1",
|
|
61
|
+
"tsx": "4.19.4",
|
|
62
|
+
"typescript": "6.0.3"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=22"
|
|
66
|
+
}
|
|
67
|
+
}
|