vde-layout 0.0.1
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 +194 -0
- package/bin/vde-layout +2 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +138 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/loader.d.ts +14 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +117 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/validator.d.ts +3 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +168 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/executor/dry-run-executor.d.ts +16 -0
- package/dist/executor/dry-run-executor.d.ts.map +1 -0
- package/dist/executor/dry-run-executor.js +45 -0
- package/dist/executor/dry-run-executor.js.map +1 -0
- package/dist/executor/index.d.ts +6 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +10 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/mock-executor.d.ts +21 -0
- package/dist/executor/mock-executor.d.ts.map +1 -0
- package/dist/executor/mock-executor.js +73 -0
- package/dist/executor/mock-executor.js.map +1 -0
- package/dist/executor/real-executor.d.ts +16 -0
- package/dist/executor/real-executor.d.ts.map +1 -0
- package/dist/executor/real-executor.js +58 -0
- package/dist/executor/real-executor.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/command-executor.d.ts +7 -0
- package/dist/interfaces/command-executor.d.ts.map +1 -0
- package/dist/interfaces/command-executor.js +3 -0
- package/dist/interfaces/command-executor.js.map +1 -0
- package/dist/interfaces/index.d.ts +31 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +3 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/layout/engine.d.ts +18 -0
- package/dist/layout/engine.d.ts.map +1 -0
- package/dist/layout/engine.js +174 -0
- package/dist/layout/engine.js.map +1 -0
- package/dist/layout/preset.d.ts +13 -0
- package/dist/layout/preset.d.ts.map +1 -0
- package/dist/layout/preset.js +55 -0
- package/dist/layout/preset.js.map +1 -0
- package/dist/models/schema.d.ts +144 -0
- package/dist/models/schema.d.ts.map +1 -0
- package/dist/models/schema.js +95 -0
- package/dist/models/schema.js.map +1 -0
- package/dist/models/types.d.ts +34 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +16 -0
- package/dist/models/types.js.map +1 -0
- package/dist/tmux/commands.d.ts +14 -0
- package/dist/tmux/commands.d.ts.map +1 -0
- package/dist/tmux/commands.js +59 -0
- package/dist/tmux/commands.js.map +1 -0
- package/dist/tmux/executor.d.ts +20 -0
- package/dist/tmux/executor.d.ts.map +1 -0
- package/dist/tmux/executor.js +64 -0
- package/dist/tmux/executor.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +131 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +67 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/ratio.d.ts +3 -0
- package/dist/utils/ratio.d.ts.map +1 -0
- package/dist/utils/ratio.js +44 -0
- package/dist/utils/ratio.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tmux/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ITmuxExecutor } from "../interfaces";
|
|
2
|
+
import type { ICommandExecutor } from "../interfaces/command-executor";
|
|
3
|
+
export interface TmuxExecutorOptions {
|
|
4
|
+
verbose?: boolean;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
executor?: ICommandExecutor;
|
|
7
|
+
}
|
|
8
|
+
export declare class TmuxExecutor implements ITmuxExecutor {
|
|
9
|
+
private readonly executor;
|
|
10
|
+
constructor(options?: TmuxExecutorOptions);
|
|
11
|
+
private isTestEnvironment;
|
|
12
|
+
isInTmuxSession(): boolean;
|
|
13
|
+
verifyTmuxEnvironment(): Promise<void>;
|
|
14
|
+
execute(commandOrArgs: string | string[]): Promise<string>;
|
|
15
|
+
executeMany(commandsList: string[][]): Promise<void>;
|
|
16
|
+
getCommandString(args: string[]): string;
|
|
17
|
+
getCurrentSessionName(): Promise<string>;
|
|
18
|
+
getExecutor(): ICommandExecutor;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/tmux/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAGtE,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC5B;AAMD,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,OAAO,GAAE,mBAAwB;IAa7C,OAAO,CAAC,iBAAiB;IAQzB,eAAe,IAAI,OAAO;IAQpB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BtC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAQlC,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9C,WAAW,IAAI,gBAAgB;CAGhC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TmuxExecutor = void 0;
|
|
4
|
+
const execa_1 = require("execa");
|
|
5
|
+
const errors_1 = require("../utils/errors");
|
|
6
|
+
const executor_1 = require("../executor");
|
|
7
|
+
class TmuxExecutor {
|
|
8
|
+
executor;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
if (options.executor) {
|
|
11
|
+
this.executor = options.executor;
|
|
12
|
+
}
|
|
13
|
+
else if (options.dryRun === true) {
|
|
14
|
+
this.executor = new executor_1.DryRunExecutor({ verbose: options.verbose });
|
|
15
|
+
}
|
|
16
|
+
else if (this.isTestEnvironment()) {
|
|
17
|
+
this.executor = new executor_1.MockExecutor();
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.executor = new executor_1.RealExecutor({ verbose: options.verbose });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
isTestEnvironment() {
|
|
24
|
+
return process.env.VDE_TEST_MODE === "true" || process.env.NODE_ENV === "test" || process.env.VITEST === "true";
|
|
25
|
+
}
|
|
26
|
+
isInTmuxSession() {
|
|
27
|
+
return Boolean(process.env.TMUX);
|
|
28
|
+
}
|
|
29
|
+
async verifyTmuxEnvironment() {
|
|
30
|
+
if (!this.isInTmuxSession()) {
|
|
31
|
+
throw new errors_1.EnvironmentError("Must be run inside a tmux session", errors_1.ErrorCodes.NOT_IN_TMUX, {
|
|
32
|
+
hint: "Please start a tmux session and try again",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (this.executor.isDryRun()) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
await (0, execa_1.execa)("tmux", ["-V"]);
|
|
40
|
+
}
|
|
41
|
+
catch (_error) {
|
|
42
|
+
throw new errors_1.EnvironmentError("tmux is not installed", errors_1.ErrorCodes.TMUX_NOT_FOUND, {
|
|
43
|
+
hint: "Please install tmux",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async execute(commandOrArgs) {
|
|
48
|
+
return this.executor.execute(commandOrArgs);
|
|
49
|
+
}
|
|
50
|
+
async executeMany(commandsList) {
|
|
51
|
+
return this.executor.executeMany(commandsList);
|
|
52
|
+
}
|
|
53
|
+
getCommandString(args) {
|
|
54
|
+
return ["tmux", ...args].join(" ");
|
|
55
|
+
}
|
|
56
|
+
async getCurrentSessionName() {
|
|
57
|
+
return this.execute(["display-message", "-p", "#{session_name}"]);
|
|
58
|
+
}
|
|
59
|
+
getExecutor() {
|
|
60
|
+
return this.executor;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.TmuxExecutor = TmuxExecutor;
|
|
64
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/tmux/executor.ts"],"names":[],"mappings":";;;AAAA,iCAA6B;AAC7B,4CAA8D;AAG9D,0CAAwE;AAYxE,MAAa,YAAY;IACN,QAAQ,CAAkB;IAE3C,YAAY,UAA+B,EAAE;QAC3C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAClC,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAClE,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAEpC,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAY,EAAE,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAA;IACjH,CAAC;IAMD,eAAe;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAMD,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,yBAAgB,CAAC,mCAAmC,EAAE,mBAAU,CAAC,WAAW,EAAE;gBACtF,IAAI,EAAE,2CAA2C;aAClD,CAAC,CAAA;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QAGD,IAAI,CAAC;YACH,MAAM,IAAA,aAAK,EAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,yBAAgB,CAAC,uBAAuB,EAAE,mBAAU,CAAC,cAAc,EAAE;gBAC7E,IAAI,EAAE,qBAAqB;aAC5B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAQD,KAAK,CAAC,OAAO,CAAC,aAAgC;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7C,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,YAAwB;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAChD,CAAC;IAOD,gBAAgB,CAAC,IAAc;QAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;IAMD,KAAK,CAAC,qBAAqB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAA;IACnE,CAAC;IAKD,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;CACF;AA/FD,oCA+FC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare class VDELayoutError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly details: Record<string, unknown>;
|
|
4
|
+
constructor(message: string, code: string, details?: Record<string, unknown>);
|
|
5
|
+
}
|
|
6
|
+
export declare class ConfigError extends VDELayoutError {
|
|
7
|
+
constructor(message: string, code: string, details?: Record<string, unknown>);
|
|
8
|
+
}
|
|
9
|
+
export declare class ValidationError extends VDELayoutError {
|
|
10
|
+
constructor(message: string, code: string, details?: Record<string, unknown>);
|
|
11
|
+
}
|
|
12
|
+
export declare class TmuxError extends VDELayoutError {
|
|
13
|
+
constructor(message: string, code: string, details?: Record<string, unknown>);
|
|
14
|
+
}
|
|
15
|
+
export declare class EnvironmentError extends VDELayoutError {
|
|
16
|
+
constructor(message: string, code: string, details?: Record<string, unknown>);
|
|
17
|
+
}
|
|
18
|
+
export declare const ErrorCodes: {
|
|
19
|
+
readonly CONFIG_NOT_FOUND: "CONFIG_NOT_FOUND";
|
|
20
|
+
readonly CONFIG_PARSE_ERROR: "CONFIG_PARSE_ERROR";
|
|
21
|
+
readonly CONFIG_PERMISSION_ERROR: "CONFIG_PERMISSION_ERROR";
|
|
22
|
+
readonly INVALID_PRESET: "INVALID_PRESET";
|
|
23
|
+
readonly PRESET_NOT_FOUND: "PRESET_NOT_FOUND";
|
|
24
|
+
readonly INVALID_LAYOUT: "INVALID_LAYOUT";
|
|
25
|
+
readonly INVALID_PANE: "INVALID_PANE";
|
|
26
|
+
readonly TMUX_NOT_RUNNING: "TMUX_NOT_RUNNING";
|
|
27
|
+
readonly TMUX_COMMAND_FAILED: "TMUX_COMMAND_FAILED";
|
|
28
|
+
readonly NOT_IN_TMUX_SESSION: "NOT_IN_TMUX_SESSION";
|
|
29
|
+
readonly NOT_IN_TMUX: "NOT_IN_TMUX";
|
|
30
|
+
readonly TMUX_NOT_FOUND: "TMUX_NOT_FOUND";
|
|
31
|
+
readonly TMUX_NOT_INSTALLED: "TMUX_NOT_INSTALLED";
|
|
32
|
+
readonly UNSUPPORTED_TMUX_VERSION: "UNSUPPORTED_TMUX_VERSION";
|
|
33
|
+
};
|
|
34
|
+
export declare function isVDELayoutError(error: unknown): error is VDELayoutError;
|
|
35
|
+
export declare function formatError(error: Error): string;
|
|
36
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAEpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CASjF;AAKD,qBAAa,WAAY,SAAQ,cAAc;gBACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKjF;AAKD,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKjF;AAKD,qBAAa,SAAU,SAAQ,cAAc;gBAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKjF;AAKD,qBAAa,gBAAiB,SAAQ,cAAc;gBACtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKjF;AAKD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;CAsBb,CAAA;AAKV,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAsChD"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorCodes = exports.EnvironmentError = exports.TmuxError = exports.ValidationError = exports.ConfigError = exports.VDELayoutError = void 0;
|
|
4
|
+
exports.isVDELayoutError = isVDELayoutError;
|
|
5
|
+
exports.formatError = formatError;
|
|
6
|
+
class VDELayoutError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
details;
|
|
9
|
+
constructor(message, code, details = {}) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "VDELayoutError";
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.details = details;
|
|
14
|
+
Object.setPrototypeOf(this, VDELayoutError.prototype);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.VDELayoutError = VDELayoutError;
|
|
18
|
+
class ConfigError extends VDELayoutError {
|
|
19
|
+
constructor(message, code, details = {}) {
|
|
20
|
+
super(message, code, details);
|
|
21
|
+
this.name = "ConfigError";
|
|
22
|
+
Object.setPrototypeOf(this, ConfigError.prototype);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ConfigError = ConfigError;
|
|
26
|
+
class ValidationError extends VDELayoutError {
|
|
27
|
+
constructor(message, code, details = {}) {
|
|
28
|
+
super(message, code, details);
|
|
29
|
+
this.name = "ValidationError";
|
|
30
|
+
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ValidationError = ValidationError;
|
|
34
|
+
class TmuxError extends VDELayoutError {
|
|
35
|
+
constructor(message, code, details = {}) {
|
|
36
|
+
super(message, code, details);
|
|
37
|
+
this.name = "TmuxError";
|
|
38
|
+
Object.setPrototypeOf(this, TmuxError.prototype);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.TmuxError = TmuxError;
|
|
42
|
+
class EnvironmentError extends VDELayoutError {
|
|
43
|
+
constructor(message, code, details = {}) {
|
|
44
|
+
super(message, code, details);
|
|
45
|
+
this.name = "EnvironmentError";
|
|
46
|
+
Object.setPrototypeOf(this, EnvironmentError.prototype);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.EnvironmentError = EnvironmentError;
|
|
50
|
+
exports.ErrorCodes = {
|
|
51
|
+
CONFIG_NOT_FOUND: "CONFIG_NOT_FOUND",
|
|
52
|
+
CONFIG_PARSE_ERROR: "CONFIG_PARSE_ERROR",
|
|
53
|
+
CONFIG_PERMISSION_ERROR: "CONFIG_PERMISSION_ERROR",
|
|
54
|
+
INVALID_PRESET: "INVALID_PRESET",
|
|
55
|
+
PRESET_NOT_FOUND: "PRESET_NOT_FOUND",
|
|
56
|
+
INVALID_LAYOUT: "INVALID_LAYOUT",
|
|
57
|
+
INVALID_PANE: "INVALID_PANE",
|
|
58
|
+
TMUX_NOT_RUNNING: "TMUX_NOT_RUNNING",
|
|
59
|
+
TMUX_COMMAND_FAILED: "TMUX_COMMAND_FAILED",
|
|
60
|
+
NOT_IN_TMUX_SESSION: "NOT_IN_TMUX_SESSION",
|
|
61
|
+
NOT_IN_TMUX: "NOT_IN_TMUX",
|
|
62
|
+
TMUX_NOT_FOUND: "TMUX_NOT_FOUND",
|
|
63
|
+
TMUX_NOT_INSTALLED: "TMUX_NOT_INSTALLED",
|
|
64
|
+
UNSUPPORTED_TMUX_VERSION: "UNSUPPORTED_TMUX_VERSION",
|
|
65
|
+
};
|
|
66
|
+
function isVDELayoutError(error) {
|
|
67
|
+
return error instanceof VDELayoutError;
|
|
68
|
+
}
|
|
69
|
+
function formatError(error) {
|
|
70
|
+
if (!isVDELayoutError(error)) {
|
|
71
|
+
return `${error.name}: ${error.message}`;
|
|
72
|
+
}
|
|
73
|
+
let message = `Error: ${error.message}\n`;
|
|
74
|
+
const formatter = errorFormatters[error.code];
|
|
75
|
+
if (formatter) {
|
|
76
|
+
message += formatter(error);
|
|
77
|
+
}
|
|
78
|
+
if (error.details.preset !== undefined) {
|
|
79
|
+
message += `\nPreset: ${error.details.preset}\n`;
|
|
80
|
+
}
|
|
81
|
+
if (error.details.command !== undefined) {
|
|
82
|
+
message += `\nCommand: ${error.details.command}\n`;
|
|
83
|
+
}
|
|
84
|
+
if (error.details.exitCode !== undefined) {
|
|
85
|
+
message += `Exit code: ${error.details.exitCode}\n`;
|
|
86
|
+
}
|
|
87
|
+
if (error.details.stderr !== undefined) {
|
|
88
|
+
message += `Error output: ${error.details.stderr}\n`;
|
|
89
|
+
}
|
|
90
|
+
if (error.details.errors !== undefined && Array.isArray(error.details.errors)) {
|
|
91
|
+
message += "\nValidation errors:\n";
|
|
92
|
+
error.details.errors.forEach((err) => {
|
|
93
|
+
message += ` - ${err}\n`;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return message;
|
|
97
|
+
}
|
|
98
|
+
const errorFormatters = {
|
|
99
|
+
[exports.ErrorCodes.CONFIG_NOT_FOUND]: (error) => {
|
|
100
|
+
let msg = "";
|
|
101
|
+
if (error.details.searchPaths !== undefined) {
|
|
102
|
+
msg += "\nSearched in the following locations:\n";
|
|
103
|
+
const paths = error.details.searchPaths;
|
|
104
|
+
paths.forEach((path) => {
|
|
105
|
+
msg += ` - ${path}\n`;
|
|
106
|
+
});
|
|
107
|
+
msg += "\nTo create a configuration file, run:\n";
|
|
108
|
+
msg += " mkdir -p ~/.config/vde\n";
|
|
109
|
+
msg += ' echo "presets: {}" > ~/.config/vde/layout.yml\n';
|
|
110
|
+
}
|
|
111
|
+
return msg;
|
|
112
|
+
},
|
|
113
|
+
[exports.ErrorCodes.NOT_IN_TMUX_SESSION]: () => {
|
|
114
|
+
return "\nThis command must be run inside a tmux session.\nStart tmux first with: tmux\n";
|
|
115
|
+
},
|
|
116
|
+
[exports.ErrorCodes.TMUX_NOT_INSTALLED]: () => {
|
|
117
|
+
return ("\ntmux is required but not installed.\n" +
|
|
118
|
+
"Install tmux using your package manager:\n" +
|
|
119
|
+
" - macOS: brew install tmux\n" +
|
|
120
|
+
" - Ubuntu/Debian: sudo apt-get install tmux\n" +
|
|
121
|
+
" - Fedora: sudo dnf install tmux\n");
|
|
122
|
+
},
|
|
123
|
+
[exports.ErrorCodes.UNSUPPORTED_TMUX_VERSION]: (error) => {
|
|
124
|
+
let msg = "";
|
|
125
|
+
if (error.details.requiredVersion !== undefined) {
|
|
126
|
+
msg += `\nRequired tmux version: ${error.details.requiredVersion} or higher\n`;
|
|
127
|
+
}
|
|
128
|
+
return msg;
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
ERROR = 0,
|
|
3
|
+
WARN = 1,
|
|
4
|
+
INFO = 2,
|
|
5
|
+
DEBUG = 3
|
|
6
|
+
}
|
|
7
|
+
export interface LoggerOptions {
|
|
8
|
+
level?: LogLevel;
|
|
9
|
+
prefix?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class Logger {
|
|
12
|
+
private level;
|
|
13
|
+
private prefix;
|
|
14
|
+
constructor(options?: LoggerOptions);
|
|
15
|
+
private getDefaultLogLevel;
|
|
16
|
+
private formatMessage;
|
|
17
|
+
error(message: string, error?: Error): void;
|
|
18
|
+
warn(message: string): void;
|
|
19
|
+
info(message: string): void;
|
|
20
|
+
debug(message: string): void;
|
|
21
|
+
success(message: string): void;
|
|
22
|
+
createChild(prefix: string): Logger;
|
|
23
|
+
}
|
|
24
|
+
export declare const logger: Logger;
|
|
25
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,GAAE,aAAkB;IAQvC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,aAAa;IAOrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAY3C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ9B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAIpC;AAKD,eAAO,MAAM,MAAM,QAAe,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logger = exports.Logger = exports.LogLevel = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
var LogLevel;
|
|
9
|
+
(function (LogLevel) {
|
|
10
|
+
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
|
|
11
|
+
LogLevel[LogLevel["WARN"] = 1] = "WARN";
|
|
12
|
+
LogLevel[LogLevel["INFO"] = 2] = "INFO";
|
|
13
|
+
LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
|
|
14
|
+
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
15
|
+
class Logger {
|
|
16
|
+
level;
|
|
17
|
+
prefix;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.level = options.level ?? this.getDefaultLogLevel();
|
|
20
|
+
this.prefix = options.prefix ?? "";
|
|
21
|
+
}
|
|
22
|
+
getDefaultLogLevel() {
|
|
23
|
+
if (process.env.VDE_DEBUG === "true") {
|
|
24
|
+
return LogLevel.DEBUG;
|
|
25
|
+
}
|
|
26
|
+
if (process.env.VDE_VERBOSE === "true") {
|
|
27
|
+
return LogLevel.INFO;
|
|
28
|
+
}
|
|
29
|
+
return LogLevel.WARN;
|
|
30
|
+
}
|
|
31
|
+
formatMessage(message) {
|
|
32
|
+
return this.prefix ? `${this.prefix} ${message}` : message;
|
|
33
|
+
}
|
|
34
|
+
error(message, error) {
|
|
35
|
+
if (this.level >= LogLevel.ERROR) {
|
|
36
|
+
console.error(chalk_1.default.red(this.formatMessage(`Error: ${message}`)));
|
|
37
|
+
if (error && process.env.VDE_DEBUG === "true") {
|
|
38
|
+
console.error(chalk_1.default.gray(error.stack));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
warn(message) {
|
|
43
|
+
if (this.level >= LogLevel.WARN) {
|
|
44
|
+
console.warn(chalk_1.default.yellow(this.formatMessage(message)));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
info(message) {
|
|
48
|
+
if (this.level >= LogLevel.INFO) {
|
|
49
|
+
console.log(this.formatMessage(message));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
debug(message) {
|
|
53
|
+
if (this.level >= LogLevel.DEBUG) {
|
|
54
|
+
console.log(chalk_1.default.gray(this.formatMessage(`[DEBUG] ${message}`)));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
success(message) {
|
|
58
|
+
console.log(chalk_1.default.green(this.formatMessage(message)));
|
|
59
|
+
}
|
|
60
|
+
createChild(prefix) {
|
|
61
|
+
const childPrefix = this.prefix ? `${this.prefix} ${prefix}` : prefix;
|
|
62
|
+
return new Logger({ level: this.level, prefix: childPrefix });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.Logger = Logger;
|
|
66
|
+
exports.logger = new Logger();
|
|
67
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratio.d.ts","sourceRoot":"","sources":["../../src/utils/ratio.ts"],"names":[],"mappings":"AAcA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwDxD;AAOD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeRatio = normalizeRatio;
|
|
4
|
+
exports.isValidRatio = isValidRatio;
|
|
5
|
+
function normalizeRatio(ratio) {
|
|
6
|
+
if (ratio.length === 0) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (ratio.length === 1) {
|
|
10
|
+
return [100];
|
|
11
|
+
}
|
|
12
|
+
const sum = ratio.reduce((acc, val) => acc + val, 0);
|
|
13
|
+
if (sum === 0) {
|
|
14
|
+
const equalRatio = Math.floor(100 / ratio.length);
|
|
15
|
+
const remainder = 100 % ratio.length;
|
|
16
|
+
const result = ratio.map(() => equalRatio);
|
|
17
|
+
for (let i = 0; i < remainder; i++) {
|
|
18
|
+
result[result.length - 1 - i]++;
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
const normalized = ratio.map((val) => (val / sum) * 100);
|
|
23
|
+
const rounded = normalized.map((val) => Math.round(val));
|
|
24
|
+
const roundedSum = rounded.reduce((acc, val) => acc + val, 0);
|
|
25
|
+
const diff = 100 - roundedSum;
|
|
26
|
+
if (diff !== 0) {
|
|
27
|
+
const fractionalParts = normalized.map((val, index) => ({
|
|
28
|
+
index,
|
|
29
|
+
fractional: val - rounded[index],
|
|
30
|
+
}));
|
|
31
|
+
fractionalParts.sort((a, b) => (diff > 0 ? b.fractional - a.fractional : a.fractional - b.fractional));
|
|
32
|
+
for (let i = 0; i < Math.abs(diff); i++) {
|
|
33
|
+
if (i < fractionalParts.length) {
|
|
34
|
+
const targetIndex = fractionalParts[i].index;
|
|
35
|
+
rounded[targetIndex] += diff > 0 ? 1 : -1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return rounded;
|
|
40
|
+
}
|
|
41
|
+
function isValidRatio(ratio) {
|
|
42
|
+
return ratio.length > 0 && ratio.every((val) => val > 0);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=ratio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratio.js","sourceRoot":"","sources":["../../src/utils/ratio.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vde-layout",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Terminal multiplexer layout management tool for VDE (Vibe Coding Development Environment)",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"vde-layout": "./bin/vde-layout"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"clean": "rm -rf dist",
|
|
13
|
+
"compile": "tsc",
|
|
14
|
+
"dev": "tsc --watch",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest --watch",
|
|
17
|
+
"test:coverage": "vitest run --coverage",
|
|
18
|
+
"lint": "eslint src",
|
|
19
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prepublishOnly": "bun run clean && bun run build"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"tmux",
|
|
25
|
+
"layout",
|
|
26
|
+
"terminal",
|
|
27
|
+
"multiplexer",
|
|
28
|
+
"vde",
|
|
29
|
+
"cli"
|
|
30
|
+
],
|
|
31
|
+
"author": "Yuki Yano",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/yuki-yano/vde-layout.git"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/yuki-yano/vde-layout/issues"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/yuki-yano/vde-layout#readme",
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"bin",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"chalk": "^5.4.1",
|
|
49
|
+
"commander": "^14.0.0",
|
|
50
|
+
"execa": "^9.6.0",
|
|
51
|
+
"fs-extra": "^11.2.0",
|
|
52
|
+
"yaml": "^2.3.4",
|
|
53
|
+
"zod": "^3.22.4"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@eslint/js": "^9.32.0",
|
|
57
|
+
"@types/fs-extra": "^11.0.4",
|
|
58
|
+
"@types/node": "^20.11.5",
|
|
59
|
+
"@vitest/coverage-v8": "^1.2.1",
|
|
60
|
+
"@vitest/runner": "^3.2.4",
|
|
61
|
+
"eslint": "^9.32.0",
|
|
62
|
+
"eslint-config-prettier": "^9.1.0",
|
|
63
|
+
"globals": "^16.3.0",
|
|
64
|
+
"prettier": "^3.2.4",
|
|
65
|
+
"typescript": "^5.3.3",
|
|
66
|
+
"typescript-eslint": "^8.38.0",
|
|
67
|
+
"vitest": "^1.2.1"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=22.0.0"
|
|
71
|
+
}
|
|
72
|
+
}
|