@gachlab/devup 0.3.0 → 0.4.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.
@@ -0,0 +1,20 @@
1
+ import type { DevStackConfig } from '../config/types.js';
2
+ /** Returns the subcommand name if the first arg is one we recognise, else null. */
3
+ export declare function detectSubcommand(argv: string[]): string | null;
4
+ interface SubOpts {
5
+ config: DevStackConfig;
6
+ baseCwd: string;
7
+ env: Record<string, string>;
8
+ logDir?: string;
9
+ out?: (line: string) => void;
10
+ }
11
+ export declare function runLogs(argv: string[], opts: SubOpts): Promise<number>;
12
+ export declare function runInstall(opts: SubOpts & {
13
+ concurrency?: number;
14
+ }): Promise<number>;
15
+ export declare function runStatus(opts: SubOpts): Promise<number>;
16
+ export declare function runHelp(argv: string[], opts?: {
17
+ out?: (l: string) => void;
18
+ }): number;
19
+ export {};
20
+ //# sourceMappingURL=subcommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../../src/orchestrator/subcommands.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,UAAU,OAAO;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAaD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB5E;AAoCD,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B1F;AAiBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAe9D;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAAG,MAAM,CA4BxF"}
@@ -3,6 +3,9 @@ import type { ServiceConfig } from '../config/types.js';
3
3
  import type { ProcessState, ProcessManagerEvents } from './types.js';
4
4
  /** Accepts both '/foo/' (vim-style) and bare 'foo'. Case-insensitive by default. */
5
5
  export declare function compileReadyPattern(pattern: string | undefined): RegExp | null;
6
+ /** Extracts the value tokens of `--watch` / `--watch-path` / `--watch=X` / `--watch-path=X`
7
+ * from a command's args list. Accepts both `--flag value` and `--flag=value` forms. */
8
+ export declare function extractWatchPaths(args: string[]): string[];
6
9
  export declare class ProcessManager {
7
10
  readonly state: Map<string, ProcessState>;
8
11
  private readonly procs;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQrE,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS9E;AAoBD,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,4BAAmC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,IAAI,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,oBAAoB,CAAC;KAC9B;IAOK,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhE,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiGnF,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,eAAe;IAgBvB,sGAAsG;IACtG,OAAO,CAAC,kBAAkB;IAc1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,OAAO,CAAC,aAAa;IAOf,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B,OAAO,CAAC,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCnE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,GAAG;CAGZ"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQrE,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED;wFACwF;AACxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB1D;AAoBD,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,4BAAmC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,IAAI,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,oBAAoB,CAAC;KAC9B;IAOK,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhE,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6GnF,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,eAAe;IAgBvB,sGAAsG;IACtG,OAAO,CAAC,kBAAkB;IAc1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,OAAO,CAAC,aAAa;IAOf,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B,OAAO,CAAC,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCnE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,GAAG;CAGZ"}
package/dist/tui/App.d.ts CHANGED
@@ -3,6 +3,10 @@ import type { DevStackConfig, ServiceConfig } from '../config/types.js';
3
3
  import type { CliArgs } from '../config/cli.js';
4
4
  import type { ProxyConfigProvider, ProxyOpts } from '../proxy-config/types.js';
5
5
  import type { LogSink } from '../process/log-sink.js';
6
+ /** Builds the URL to open in the browser when the user picks a service.
7
+ * Honors the proxy + TLS settings: if --proxy is active and the service has
8
+ * a route, opens https://<sub>.<domain>; otherwise falls back to http://localhost:<port>. */
9
+ export declare function buildServiceUrl(name: string, port: number, proxyActive: boolean, proxyOpts: ProxyOpts | null): string;
6
10
  interface Props {
7
11
  config: DevStackConfig;
8
12
  services: ServiceConfig[];
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAgBtD,UAAU,KAAK;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,2CAuMlH"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAkBtD;;8FAE8F;AAC9F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,MAAM,CAUR;AAED,UAAU,KAAK;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,2CAgOlH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceList.d.ts","sourceRoot":"","sources":["../../src/tui/ServiceList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,2CAsBpF"}
1
+ {"version":3,"file":"ServiceList.d.ts","sourceRoot":"","sources":["../../src/tui/ServiceList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,2CAmDpF"}
@@ -10,6 +10,9 @@ interface Props {
10
10
  scrollOffset: number;
11
11
  resetScroll: () => void;
12
12
  }
13
+ /** Matches the constant in ProcessManager — kept in sync manually. */
14
+ export declare const MAX_RESTARTS = 3;
15
+ export declare function isCrashLooped(st: ProcessState): boolean;
13
16
  export declare function StatsPanel({ states, stats, sortMode, maxNameLen, height, focused, scrollOffset, resetScroll }: Props): import("react/jsx-runtime").JSX.Element;
14
17
  export {};
15
18
  //# sourceMappingURL=StatsPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,UAAU,KAAK;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAuBD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,2CAuFpH"}
1
+ {"version":3,"file":"StatsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,UAAU,KAAK;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAOD,sEAAsE;AACtE,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAEvD;AAsBD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,2CAyFpH"}
@@ -0,0 +1,17 @@
1
+ /** Contextual tips for new users. Pure function — easy to test, easy to extend. */
2
+ export interface TipState {
3
+ totalLogs: number;
4
+ hasSearch: boolean;
5
+ hasFilter: boolean;
6
+ crashLoopedCount: number;
7
+ /** IDs of tips already shown this session — they don't repeat. */
8
+ shown: Set<string>;
9
+ }
10
+ export interface Tip {
11
+ id: string;
12
+ message: string;
13
+ }
14
+ /** Picks the highest-priority unseen tip whose conditions are met,
15
+ * or null if no tip applies right now. */
16
+ export declare function pickTip(state: TipState): Tip | null;
17
+ //# sourceMappingURL=tips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tui/tips.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;2CAC2C;AAC3C,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAYnD"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@gachlab/devup",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Dev stack runner with TUI, lazy proxy, and reverse proxy support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "devup": "./dist/index.js"
9
+ "devup": "dist/index.js"
10
10
  },
11
11
  "exports": {
12
12
  ".": {
@@ -36,7 +36,7 @@
36
36
  "license": "MIT",
37
37
  "repository": {
38
38
  "type": "git",
39
- "url": "https://github.com/gachlab/devup.git"
39
+ "url": "git+https://github.com/gachlab/devup.git"
40
40
  },
41
41
  "homepage": "https://github.com/gachlab/devup#readme",
42
42
  "bugs": {
@@ -45,6 +45,7 @@
45
45
  "scripts": {
46
46
  "build": "tsup && tsc --emitDeclarationOnly",
47
47
  "dev": "tsup --watch",
48
+ "prepack": "npm pkg fix",
48
49
  "prepublishOnly": "npm run build",
49
50
  "test": "node --import tsx --test \"tests/**/*.test.ts\" \"tests/**/*.test.tsx\"",
50
51
  "test:unit": "node --import tsx --test --experimental-test-coverage \"tests/unit/**/*.test.ts\" \"tests/unit/**/*.test.tsx\"",
@@ -75,4 +76,4 @@
75
76
  "access": "public",
76
77
  "registry": "https://registry.npmjs.org/"
77
78
  }
78
- }
79
+ }