recomposable 1.1.7 → 1.2.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/README.md +23 -8
- package/dist/components/App.d.ts +10 -0
- package/dist/components/App.js +149 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/BottomPanel.d.ts +9 -0
- package/dist/components/BottomPanel.js +205 -0
- package/dist/components/BottomPanel.js.map +1 -0
- package/dist/components/ExecScreen.d.ts +9 -0
- package/dist/components/ExecScreen.js +21 -0
- package/dist/components/ExecScreen.js.map +1 -0
- package/dist/components/Legend.d.ts +3 -0
- package/dist/components/Legend.js +86 -0
- package/dist/components/Legend.js.map +1 -0
- package/dist/components/ListScreen.d.ts +9 -0
- package/dist/components/ListScreen.js +85 -0
- package/dist/components/ListScreen.js.map +1 -0
- package/dist/components/LogScreen.d.ts +9 -0
- package/dist/components/LogScreen.js +130 -0
- package/dist/components/LogScreen.js.map +1 -0
- package/dist/components/Logo.d.ts +2 -0
- package/dist/components/Logo.js +8 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/Separator.d.ts +6 -0
- package/dist/components/Separator.js +8 -0
- package/dist/components/Separator.js.map +1 -0
- package/dist/components/ServiceRow.d.ts +11 -0
- package/dist/components/ServiceRow.js +159 -0
- package/dist/components/ServiceRow.js.map +1 -0
- package/dist/index.d.ts +26 -1
- package/dist/index.js +715 -293
- package/dist/index.js.map +1 -1
- package/dist/lib/docker.d.ts +12 -10
- package/dist/lib/docker.js +190 -103
- package/dist/lib/docker.js.map +1 -1
- package/dist/lib/inkTheme.d.ts +18 -0
- package/dist/lib/inkTheme.js +33 -0
- package/dist/lib/inkTheme.js.map +1 -0
- package/dist/lib/renderer.d.ts +1 -1
- package/dist/lib/renderer.js +118 -75
- package/dist/lib/renderer.js.map +1 -1
- package/dist/lib/state.d.ts +12 -1
- package/dist/lib/state.js +30 -21
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/theme.js +13 -23
- package/dist/lib/theme.js.map +1 -1
- package/dist/lib/types.d.ts +14 -0
- package/dist/lib/types.js +1 -4
- package/dist/lib/types.js.map +1 -1
- package/package.json +8 -1
package/dist/lib/state.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.statusKey = statusKey;
|
|
6
|
-
exports.buildFlatList = buildFlatList;
|
|
7
|
-
exports.moveCursor = moveCursor;
|
|
8
|
-
exports.selectedEntry = selectedEntry;
|
|
9
|
-
exports.getEffectiveFile = getEffectiveFile;
|
|
10
|
-
exports.worktreeLabel = worktreeLabel;
|
|
11
|
-
const types_1 = require("./types");
|
|
12
|
-
Object.defineProperty(exports, "MODE", { enumerable: true, get: function () { return types_1.MODE; } });
|
|
13
|
-
function createState(config) {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { MODE } from './types.js';
|
|
3
|
+
export { MODE };
|
|
4
|
+
export function createState(config) {
|
|
14
5
|
return {
|
|
15
|
-
mode:
|
|
6
|
+
mode: MODE.LIST,
|
|
16
7
|
groups: [],
|
|
17
8
|
flatList: [],
|
|
18
9
|
cursor: 0,
|
|
@@ -26,11 +17,14 @@ function createState(config) {
|
|
|
26
17
|
logChild: null,
|
|
27
18
|
scrollOffset: 0,
|
|
28
19
|
noCache: false,
|
|
29
|
-
noDeps:
|
|
20
|
+
noDeps: true,
|
|
30
21
|
showBottomLogs: true,
|
|
31
22
|
bottomLogLines: new Map(),
|
|
32
23
|
bottomLogTails: new Map(),
|
|
33
24
|
selectedLogKey: null,
|
|
25
|
+
bottomLogLoading: false,
|
|
26
|
+
animDots: 0,
|
|
27
|
+
animTimer: null,
|
|
34
28
|
logCounts: new Map(),
|
|
35
29
|
logLines: [],
|
|
36
30
|
logScrollOffset: 0,
|
|
@@ -75,13 +69,14 @@ function createState(config) {
|
|
|
75
69
|
worktreePickerEntries: [],
|
|
76
70
|
worktreePickerCursor: 0,
|
|
77
71
|
worktreePickerCurrentPath: null,
|
|
72
|
+
multiSelected: new Set(),
|
|
78
73
|
config,
|
|
79
74
|
};
|
|
80
75
|
}
|
|
81
|
-
function statusKey(file, service) {
|
|
76
|
+
export function statusKey(file, service) {
|
|
82
77
|
return `${file}::${service}`;
|
|
83
78
|
}
|
|
84
|
-
function buildFlatList(groups) {
|
|
79
|
+
export function buildFlatList(groups) {
|
|
85
80
|
const list = [];
|
|
86
81
|
for (let gi = 0; gi < groups.length; gi++) {
|
|
87
82
|
const g = groups[gi];
|
|
@@ -91,18 +86,32 @@ function buildFlatList(groups) {
|
|
|
91
86
|
}
|
|
92
87
|
return list;
|
|
93
88
|
}
|
|
94
|
-
function moveCursor(state, delta) {
|
|
89
|
+
export function moveCursor(state, delta) {
|
|
95
90
|
if (state.flatList.length === 0)
|
|
96
91
|
return;
|
|
97
92
|
state.cursor = Math.max(0, Math.min(state.flatList.length - 1, state.cursor + delta));
|
|
98
93
|
}
|
|
99
|
-
function selectedEntry(state) {
|
|
94
|
+
export function selectedEntry(state) {
|
|
100
95
|
return state.flatList[state.cursor] || null;
|
|
101
96
|
}
|
|
102
|
-
function getEffectiveFile(state, file, service) {
|
|
97
|
+
export function getEffectiveFile(state, file, service) {
|
|
103
98
|
return state.worktreeOverrides.get(statusKey(file, service)) || file;
|
|
104
99
|
}
|
|
105
|
-
|
|
100
|
+
/** Docker Compose project name derived from compose file's parent directory. */
|
|
101
|
+
export function composeProjectName(file) {
|
|
102
|
+
return path.basename(path.dirname(path.resolve(file))).toLowerCase().replace(/[^a-z0-9_-]/g, '');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns the effective compose file and, when a worktree override is active,
|
|
106
|
+
* the project name from the *original* file so that Docker Compose targets the
|
|
107
|
+
* same project regardless of which worktree is in use.
|
|
108
|
+
*/
|
|
109
|
+
export function getComposeTarget(state, file, service) {
|
|
110
|
+
const effectiveFile = getEffectiveFile(state, file, service);
|
|
111
|
+
const projectName = effectiveFile !== file ? composeProjectName(file) : undefined;
|
|
112
|
+
return { file: effectiveFile, projectName };
|
|
113
|
+
}
|
|
114
|
+
export function worktreeLabel(worktree) {
|
|
106
115
|
return worktree || '';
|
|
107
116
|
}
|
|
108
117
|
//# sourceMappingURL=state.js.map
|
package/dist/lib/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/theme.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NO_COLOR_PALETTE = exports.LIGHT_PALETTE = exports.DARK_PALETTE = void 0;
|
|
4
|
-
exports.parseOsc11Response = parseOsc11Response;
|
|
5
|
-
exports.parseColorfgbg = parseColorfgbg;
|
|
6
|
-
exports.detectViaOsc11 = detectViaOsc11;
|
|
7
|
-
exports.detectTheme = detectTheme;
|
|
8
|
-
exports.getPalette = getPalette;
|
|
9
|
-
exports.setActivePalette = setActivePalette;
|
|
10
|
-
exports.getActivePalette = getActivePalette;
|
|
11
1
|
const ESC = '\x1b[';
|
|
12
|
-
|
|
2
|
+
export const DARK_PALETTE = {
|
|
13
3
|
reset: `${ESC}0m`,
|
|
14
4
|
bold: `${ESC}1m`,
|
|
15
5
|
dim: `${ESC}38;5;250m`,
|
|
@@ -24,7 +14,7 @@ exports.DARK_PALETTE = {
|
|
|
24
14
|
logo: `${ESC}36m`,
|
|
25
15
|
highlightBg: `${ESC}48;5;238m`,
|
|
26
16
|
};
|
|
27
|
-
|
|
17
|
+
export const LIGHT_PALETTE = {
|
|
28
18
|
reset: `${ESC}0m`,
|
|
29
19
|
bold: `${ESC}1m`,
|
|
30
20
|
dim: `${ESC}38;5;242m`,
|
|
@@ -39,7 +29,7 @@ exports.LIGHT_PALETTE = {
|
|
|
39
29
|
logo: '',
|
|
40
30
|
highlightBg: `${ESC}48;5;254m`,
|
|
41
31
|
};
|
|
42
|
-
|
|
32
|
+
export const NO_COLOR_PALETTE = {
|
|
43
33
|
reset: '',
|
|
44
34
|
bold: '',
|
|
45
35
|
dim: '',
|
|
@@ -58,7 +48,7 @@ exports.NO_COLOR_PALETTE = {
|
|
|
58
48
|
* Parse an OSC 11 response like `\x1b]11;rgb:RRRR/GGGG/BBBB\x07` or `\x1b]11;rgb:RRRR/GGGG/BBBB\x1b\\`
|
|
59
49
|
* Returns 'light' if the background luminance is high, 'dark' otherwise, or null if unparseable.
|
|
60
50
|
*/
|
|
61
|
-
function parseOsc11Response(response) {
|
|
51
|
+
export function parseOsc11Response(response) {
|
|
62
52
|
const match = response.match(/rgb:([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)/);
|
|
63
53
|
if (!match)
|
|
64
54
|
return null;
|
|
@@ -78,7 +68,7 @@ function parseOsc11Response(response) {
|
|
|
78
68
|
* Parse the COLORFGBG environment variable (e.g. "15;0" or "15;default;0").
|
|
79
69
|
* The last number is the background color index.
|
|
80
70
|
*/
|
|
81
|
-
function parseColorfgbg(val) {
|
|
71
|
+
export function parseColorfgbg(val) {
|
|
82
72
|
if (!val)
|
|
83
73
|
return null;
|
|
84
74
|
const parts = val.split(';');
|
|
@@ -94,7 +84,7 @@ function parseColorfgbg(val) {
|
|
|
94
84
|
* Attempt to detect terminal theme via OSC 11 escape sequence.
|
|
95
85
|
* Writes query to stdout, reads response from stdin with a timeout.
|
|
96
86
|
*/
|
|
97
|
-
function detectViaOsc11(timeoutMs = 200) {
|
|
87
|
+
export function detectViaOsc11(timeoutMs = 200) {
|
|
98
88
|
return new Promise((resolve) => {
|
|
99
89
|
const stdin = process.stdin;
|
|
100
90
|
const wasRaw = stdin.isRaw;
|
|
@@ -149,7 +139,7 @@ function detectViaOsc11(timeoutMs = 200) {
|
|
|
149
139
|
* If setting is 'light' or 'dark', returns it directly.
|
|
150
140
|
* If 'auto', tries OSC 11, then COLORFGBG, then defaults to 'dark'.
|
|
151
141
|
*/
|
|
152
|
-
async function detectTheme(setting) {
|
|
142
|
+
export async function detectTheme(setting) {
|
|
153
143
|
if (setting === 'light' || setting === 'dark')
|
|
154
144
|
return setting;
|
|
155
145
|
// Try OSC 11 detection (only in TTY)
|
|
@@ -168,17 +158,17 @@ async function detectTheme(setting) {
|
|
|
168
158
|
* Returns the appropriate color palette for the given mode.
|
|
169
159
|
* Respects the NO_COLOR environment variable.
|
|
170
160
|
*/
|
|
171
|
-
function getPalette(mode) {
|
|
161
|
+
export function getPalette(mode) {
|
|
172
162
|
if (process.env.NO_COLOR !== undefined)
|
|
173
|
-
return
|
|
174
|
-
return mode === 'light' ?
|
|
163
|
+
return NO_COLOR_PALETTE;
|
|
164
|
+
return mode === 'light' ? LIGHT_PALETTE : DARK_PALETTE;
|
|
175
165
|
}
|
|
176
166
|
// --- Module singleton ---
|
|
177
|
-
let activePalette =
|
|
178
|
-
function setActivePalette(palette) {
|
|
167
|
+
let activePalette = DARK_PALETTE;
|
|
168
|
+
export function setActivePalette(palette) {
|
|
179
169
|
activePalette = palette;
|
|
180
170
|
}
|
|
181
|
-
function getActivePalette() {
|
|
171
|
+
export function getActivePalette() {
|
|
182
172
|
return activePalette;
|
|
183
173
|
}
|
|
184
174
|
//# sourceMappingURL=theme.js.map
|
package/dist/lib/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -7,6 +7,11 @@ export declare const MODE: {
|
|
|
7
7
|
readonly EXEC: "EXEC";
|
|
8
8
|
};
|
|
9
9
|
export type Mode = typeof MODE[keyof typeof MODE];
|
|
10
|
+
export interface CustomAction {
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
command: string;
|
|
14
|
+
}
|
|
10
15
|
export interface Config {
|
|
11
16
|
composeFiles: string[];
|
|
12
17
|
pollInterval: number;
|
|
@@ -22,6 +27,7 @@ export interface Config {
|
|
|
22
27
|
memWarnThreshold: number;
|
|
23
28
|
memDangerThreshold: number;
|
|
24
29
|
theme: 'auto' | 'light' | 'dark';
|
|
30
|
+
customActions: CustomAction[];
|
|
25
31
|
}
|
|
26
32
|
export interface PortMapping {
|
|
27
33
|
published: number;
|
|
@@ -118,6 +124,9 @@ export interface AppState {
|
|
|
118
124
|
bottomLogLines: Map<string, BottomLogInfo>;
|
|
119
125
|
bottomLogTails: Map<string, Killable>;
|
|
120
126
|
selectedLogKey: string | null;
|
|
127
|
+
bottomLogLoading: boolean;
|
|
128
|
+
animDots: number;
|
|
129
|
+
animTimer: ReturnType<typeof setInterval> | null;
|
|
121
130
|
logCounts: Map<string, Map<string, number>>;
|
|
122
131
|
logLines: string[];
|
|
123
132
|
logScrollOffset: number;
|
|
@@ -157,6 +166,7 @@ export interface AppState {
|
|
|
157
166
|
worktreePickerEntries: GitWorktree[];
|
|
158
167
|
worktreePickerCursor: number;
|
|
159
168
|
worktreePickerCurrentPath: string | null;
|
|
169
|
+
multiSelected: Set<string>;
|
|
160
170
|
config: Config;
|
|
161
171
|
pollTimer?: ReturnType<typeof setInterval>;
|
|
162
172
|
logScanTimer?: ReturnType<typeof setInterval>;
|
|
@@ -173,6 +183,10 @@ export interface LegendOptions {
|
|
|
173
183
|
execMode?: boolean;
|
|
174
184
|
execInline?: boolean;
|
|
175
185
|
worktreePickerActive?: boolean;
|
|
186
|
+
customActions?: CustomAction[];
|
|
187
|
+
buildingActive?: boolean;
|
|
188
|
+
startingActive?: boolean;
|
|
189
|
+
multiSelectActive?: boolean;
|
|
176
190
|
}
|
|
177
191
|
export interface DisplayLine {
|
|
178
192
|
type: 'header' | 'blank' | 'service';
|
package/dist/lib/types.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MODE = void 0;
|
|
4
1
|
// --- Mode ---
|
|
5
|
-
|
|
2
|
+
export const MODE = { LIST: 'LIST', LOGS: 'LOGS', EXEC: 'EXEC' };
|
|
6
3
|
//# sourceMappingURL=types.js.map
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAIA,eAAe;AAEf,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "recomposable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Docker Compose TUI manager with vim keybindings — monitor, restart, rebuild, and tail logs for your services",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"bin": {
|
|
7
8
|
"recomposable": "./dist/index.js"
|
|
@@ -42,7 +43,13 @@
|
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@types/node": "^20",
|
|
46
|
+
"@types/react": "^19.2.14",
|
|
47
|
+
"ink-testing-library": "^4.0.0",
|
|
45
48
|
"typescript": "^5.7",
|
|
46
49
|
"vitest": "^3.0"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"ink": "^5.2.1",
|
|
53
|
+
"react": "^18.3.1"
|
|
47
54
|
}
|
|
48
55
|
}
|