aliasmate 1.6.2 → 2.3.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/CHANGELOG.md +61 -3
- package/README.md +84 -884
- package/dist/cli/completion.d.ts +5 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +144 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/manage.d.ts +19 -0
- package/dist/cli/manage.d.ts.map +1 -0
- package/dist/cli/manage.js +231 -0
- package/dist/cli/manage.js.map +1 -0
- package/dist/cli/run.d.ts +6 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +48 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/save.d.ts +8 -0
- package/dist/cli/save.d.ts.map +1 -0
- package/dist/cli/save.js +90 -0
- package/dist/cli/save.js.map +1 -0
- package/dist/cli/transfer.d.ts +6 -0
- package/dist/cli/transfer.d.ts.map +1 -0
- package/dist/cli/transfer.js +99 -0
- package/dist/cli/transfer.js.map +1 -0
- package/dist/core/commands.d.ts +29 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +232 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/env.d.ts +9 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +45 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/executor.d.ts +7 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/{utils → core}/executor.js +10 -46
- package/dist/core/executor.js.map +1 -0
- package/dist/core/history.d.ts +11 -0
- package/dist/core/history.d.ts.map +1 -0
- package/dist/core/history.js +117 -0
- package/dist/core/history.js.map +1 -0
- package/dist/core/recent.d.ts +14 -0
- package/dist/core/recent.d.ts.map +1 -0
- package/dist/core/recent.js +54 -0
- package/dist/core/recent.js.map +1 -0
- package/dist/core/runner.d.ts +13 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +83 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/store.d.ts +29 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +131 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/transfer.d.ts +20 -0
- package/dist/core/transfer.d.ts.map +1 -0
- package/dist/core/transfer.js +110 -0
- package/dist/core/transfer.js.map +1 -0
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +6 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +139 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +172 -0
- package/dist/index.js.map +1 -0
- package/dist/ui/format.d.ts +19 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +155 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/interactive.d.ts +62 -0
- package/dist/ui/interactive.d.ts.map +1 -0
- package/dist/ui/interactive.js +657 -0
- package/dist/ui/interactive.js.map +1 -0
- package/dist/ui/onboarding.d.ts +3 -0
- package/dist/ui/onboarding.d.ts.map +1 -0
- package/dist/ui/onboarding.js +82 -0
- package/dist/ui/onboarding.js.map +1 -0
- package/dist/ui/prompts.d.ts +3 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +50 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/table.d.ts +18 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +54 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/theme.d.ts +30 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +58 -0
- package/dist/ui/theme.js.map +1 -0
- package/package.json +10 -11
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -253
- package/dist/cli.js.map +0 -1
- package/dist/commands/alias.d.ts +0 -30
- package/dist/commands/alias.d.ts.map +0 -1
- package/dist/commands/alias.js +0 -213
- package/dist/commands/alias.js.map +0 -1
- package/dist/commands/changelog.d.ts +0 -9
- package/dist/commands/changelog.d.ts.map +0 -1
- package/dist/commands/changelog.js +0 -72
- package/dist/commands/changelog.js.map +0 -1
- package/dist/commands/completion.d.ts +0 -31
- package/dist/commands/completion.d.ts.map +0 -1
- package/dist/commands/completion.js +0 -522
- package/dist/commands/completion.js.map +0 -1
- package/dist/commands/delete.d.ts +0 -14
- package/dist/commands/delete.d.ts.map +0 -1
- package/dist/commands/delete.js +0 -54
- package/dist/commands/delete.js.map +0 -1
- package/dist/commands/edit.d.ts +0 -16
- package/dist/commands/edit.d.ts.map +0 -1
- package/dist/commands/edit.js +0 -231
- package/dist/commands/edit.js.map +0 -1
- package/dist/commands/export.d.ts +0 -23
- package/dist/commands/export.d.ts.map +0 -1
- package/dist/commands/export.js +0 -122
- package/dist/commands/export.js.map +0 -1
- package/dist/commands/import.d.ts +0 -23
- package/dist/commands/import.d.ts.map +0 -1
- package/dist/commands/import.js +0 -235
- package/dist/commands/import.js.map +0 -1
- package/dist/commands/list.d.ts +0 -25
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js +0 -58
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/prev.d.ts +0 -15
- package/dist/commands/prev.d.ts.map +0 -1
- package/dist/commands/prev.js +0 -138
- package/dist/commands/prev.js.map +0 -1
- package/dist/commands/recent.d.ts +0 -24
- package/dist/commands/recent.d.ts.map +0 -1
- package/dist/commands/recent.js +0 -132
- package/dist/commands/recent.js.map +0 -1
- package/dist/commands/run.d.ts +0 -22
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -217
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/save.d.ts +0 -17
- package/dist/commands/save.d.ts.map +0 -1
- package/dist/commands/save.js +0 -232
- package/dist/commands/save.js.map +0 -1
- package/dist/commands/search.d.ts +0 -19
- package/dist/commands/search.d.ts.map +0 -1
- package/dist/commands/search.js +0 -113
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -10
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -162
- package/dist/commands/validate.js.map +0 -1
- package/dist/storage/index.d.ts +0 -117
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -262
- package/dist/storage/index.js.map +0 -1
- package/dist/utils/changelog.d.ts +0 -41
- package/dist/utils/changelog.d.ts.map +0 -1
- package/dist/utils/changelog.js +0 -192
- package/dist/utils/changelog.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -48
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js +0 -51
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/env.d.ts +0 -64
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -199
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -30
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -62
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/executor.d.ts +0 -33
- package/dist/utils/executor.d.ts.map +0 -1
- package/dist/utils/executor.js.map +0 -1
- package/dist/utils/formatters.d.ts +0 -30
- package/dist/utils/formatters.d.ts.map +0 -1
- package/dist/utils/formatters.js +0 -188
- package/dist/utils/formatters.js.map +0 -1
- package/dist/utils/history.d.ts +0 -37
- package/dist/utils/history.d.ts.map +0 -1
- package/dist/utils/history.js +0 -179
- package/dist/utils/history.js.map +0 -1
- package/dist/utils/llm-generator.d.ts +0 -21
- package/dist/utils/llm-generator.d.ts.map +0 -1
- package/dist/utils/llm-generator.js +0 -915
- package/dist/utils/llm-generator.js.map +0 -1
- package/dist/utils/onboarding.d.ts +0 -10
- package/dist/utils/onboarding.d.ts.map +0 -1
- package/dist/utils/onboarding.js +0 -316
- package/dist/utils/onboarding.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -44
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -115
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/prompts.d.ts +0 -66
- package/dist/utils/prompts.d.ts.map +0 -1
- package/dist/utils/prompts.js +0 -51
- package/dist/utils/prompts.js.map +0 -1
- package/dist/utils/recent.d.ts +0 -55
- package/dist/utils/recent.d.ts.map +0 -1
- package/dist/utils/recent.js +0 -102
- package/dist/utils/recent.js.map +0 -1
- package/dist/utils/validator.d.ts +0 -56
- package/dist/utils/validator.d.ts.map +0 -1
- package/dist/utils/validator.js +0 -413
- package/dist/utils/validator.js.map +0 -1
- package/dist/utils/version-checker.d.ts +0 -29
- package/dist/utils/version-checker.d.ts.map +0 -1
- package/dist/utils/version-checker.js +0 -191
- package/dist/utils/version-checker.js.map +0 -1
- package/whats-new.json +0 -217
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEtD,iDAAiD;AACjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SavedCommand, ValidationIssue } from './types';
|
|
2
|
+
/** Static checks on a saved command; errors block execution, warnings do not. */
|
|
3
|
+
export declare function validateSavedCommand(cmd: SavedCommand): ValidationIssue[];
|
|
4
|
+
/** Human-readable warnings when a command looks destructive. */
|
|
5
|
+
export declare function getDangerWarnings(command: string): string[];
|
|
6
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwDxD,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,EAAE,CAkCzE;AAUD,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D"}
|
|
@@ -0,0 +1,139 @@
|
|
|
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.validateSavedCommand = validateSavedCommand;
|
|
37
|
+
exports.getDangerWarnings = getDangerWarnings;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const SHELL_BUILTINS = new Set([
|
|
42
|
+
'cd',
|
|
43
|
+
'echo',
|
|
44
|
+
'export',
|
|
45
|
+
'source',
|
|
46
|
+
'alias',
|
|
47
|
+
'set',
|
|
48
|
+
'unset',
|
|
49
|
+
'read',
|
|
50
|
+
'eval',
|
|
51
|
+
'exec',
|
|
52
|
+
'exit',
|
|
53
|
+
'true',
|
|
54
|
+
'false',
|
|
55
|
+
'test',
|
|
56
|
+
'pwd',
|
|
57
|
+
'type',
|
|
58
|
+
'command',
|
|
59
|
+
'wait',
|
|
60
|
+
]);
|
|
61
|
+
function executableExistsInPath(name) {
|
|
62
|
+
const pathVar = process.env.PATH ?? '';
|
|
63
|
+
const exts = os.platform() === 'win32' ? (process.env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];
|
|
64
|
+
for (const dir of pathVar.split(path.delimiter)) {
|
|
65
|
+
if (!dir)
|
|
66
|
+
continue;
|
|
67
|
+
for (const ext of exts) {
|
|
68
|
+
try {
|
|
69
|
+
const candidate = path.join(dir, name + ext.toLowerCase());
|
|
70
|
+
if (fs.existsSync(candidate) || fs.existsSync(path.join(dir, name + ext)))
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Unreadable PATH entry; skip.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
function hasBalancedQuotes(command) {
|
|
81
|
+
let single = false;
|
|
82
|
+
let double = false;
|
|
83
|
+
for (let i = 0; i < command.length; i++) {
|
|
84
|
+
const ch = command[i];
|
|
85
|
+
if (ch === '\\' && !single) {
|
|
86
|
+
i++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === "'" && !double)
|
|
90
|
+
single = !single;
|
|
91
|
+
if (ch === '"' && !single)
|
|
92
|
+
double = !double;
|
|
93
|
+
}
|
|
94
|
+
return !single && !double;
|
|
95
|
+
}
|
|
96
|
+
/** Static checks on a saved command; errors block execution, warnings do not. */
|
|
97
|
+
function validateSavedCommand(cmd) {
|
|
98
|
+
const issues = [];
|
|
99
|
+
const executable = cmd.command.trim().split(/\s+/)[0] ?? '';
|
|
100
|
+
const looksLikePath = executable.includes('/') || executable.includes('\\');
|
|
101
|
+
const isEnvAssignment = /^[A-Za-z_][A-Za-z0-9_]*=/.test(executable);
|
|
102
|
+
if (executable && !looksLikePath && !isEnvAssignment) {
|
|
103
|
+
if (!SHELL_BUILTINS.has(executable) && !executableExistsInPath(executable)) {
|
|
104
|
+
issues.push({ level: 'warning', message: `Command "${executable}" not found in PATH` });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (looksLikePath) {
|
|
108
|
+
const resolved = path.isAbsolute(executable)
|
|
109
|
+
? executable
|
|
110
|
+
: path.join(cmd.directory, executable);
|
|
111
|
+
if (!fs.existsSync(resolved)) {
|
|
112
|
+
issues.push({ level: 'warning', message: `File "${executable}" does not exist` });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (!hasBalancedQuotes(cmd.command)) {
|
|
116
|
+
issues.push({ level: 'error', message: 'Unbalanced quotes in command' });
|
|
117
|
+
}
|
|
118
|
+
if ((cmd.pathMode ?? 'saved') === 'saved' && !fs.existsSync(cmd.directory)) {
|
|
119
|
+
issues.push({ level: 'error', message: `Directory does not exist: ${cmd.directory}` });
|
|
120
|
+
}
|
|
121
|
+
for (const key of Object.keys(cmd.env ?? {})) {
|
|
122
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
123
|
+
issues.push({ level: 'warning', message: `Invalid environment variable name: ${key}` });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return issues;
|
|
127
|
+
}
|
|
128
|
+
const DANGEROUS_PATTERNS = [
|
|
129
|
+
{ pattern: /rm\s+(-[a-z]*[rf][a-z]*\s+)+/i, label: 'recursive/forced delete (rm -rf)' },
|
|
130
|
+
{ pattern: /\bdd\s+.*of=/i, label: 'raw disk write (dd)' },
|
|
131
|
+
{ pattern: /\bmkfs(\.\w+)?\b/i, label: 'filesystem format (mkfs)' },
|
|
132
|
+
{ pattern: />\s*\/dev\/sd[a-z]/i, label: 'write to block device' },
|
|
133
|
+
{ pattern: /:\(\)\s*\{.*\};\s*:/, label: 'fork bomb' },
|
|
134
|
+
];
|
|
135
|
+
/** Human-readable warnings when a command looks destructive. */
|
|
136
|
+
function getDangerWarnings(command) {
|
|
137
|
+
return DANGEROUS_PATTERNS.filter(({ pattern }) => pattern.test(command)).map(({ label }) => label);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
// Version comes from package.json so releases can't drift out of sync.
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
40
|
+
const APP_VERSION = require('../package.json').version;
|
|
41
|
+
/**
|
|
42
|
+
* Command handlers are required lazily inside actions: `aliasmate run x`
|
|
43
|
+
* never pays to load inquirer, and the interactive menu never loads execa
|
|
44
|
+
* until a command actually runs.
|
|
45
|
+
*/
|
|
46
|
+
function wrap(fn) {
|
|
47
|
+
Promise.resolve()
|
|
48
|
+
.then(fn)
|
|
49
|
+
.catch((error) => {
|
|
50
|
+
// Ctrl+C inside inquirer surfaces as a benign abort.
|
|
51
|
+
if (error?.message?.includes('User force closed'))
|
|
52
|
+
process.exit(0);
|
|
53
|
+
console.error(`\x1b[31m✗ ${error.message}\x1b[0m`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const program = new commander_1.Command();
|
|
58
|
+
program
|
|
59
|
+
.name('aliasmate')
|
|
60
|
+
.description('Save shell commands with their working directories and re-run them from anywhere')
|
|
61
|
+
.version(APP_VERSION);
|
|
62
|
+
program
|
|
63
|
+
.command('run <name> [path]')
|
|
64
|
+
.description('Run a saved command (name, alias, or @N recent reference)')
|
|
65
|
+
.option('--dry-run', 'Preview what would execute without running it')
|
|
66
|
+
.option('--verbose', 'Show full details in dry-run output')
|
|
67
|
+
.action((name, pathOverride, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/run')))).runHandler(name, pathOverride, options)));
|
|
68
|
+
program
|
|
69
|
+
.command('save')
|
|
70
|
+
.description('Open the TUI with a blank new-command form')
|
|
71
|
+
.action(() => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).saveHandler()));
|
|
72
|
+
program
|
|
73
|
+
.command('prev [name]')
|
|
74
|
+
.description('Capture your previous shell command and open the TUI form prefilled')
|
|
75
|
+
.action((name) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).prevHandler(name)));
|
|
76
|
+
program
|
|
77
|
+
.command('list')
|
|
78
|
+
.alias('ls')
|
|
79
|
+
.description('List all saved commands')
|
|
80
|
+
.option('--format <type>', 'Output format: table, json, yaml, compact', 'table')
|
|
81
|
+
.action((options) => wrap(async () => {
|
|
82
|
+
const valid = ['table', 'json', 'yaml', 'compact'];
|
|
83
|
+
if (!valid.includes(options.format))
|
|
84
|
+
throw new Error(`Invalid format "${options.format}" (${valid.join(', ')})`);
|
|
85
|
+
(await Promise.resolve().then(() => __importStar(require('./cli/manage')))).listHandler(options.format);
|
|
86
|
+
}));
|
|
87
|
+
program
|
|
88
|
+
.command('search <query>')
|
|
89
|
+
.alias('find')
|
|
90
|
+
.description('Search commands by name, text, or directory')
|
|
91
|
+
.action((query) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).searchHandler(query)));
|
|
92
|
+
program
|
|
93
|
+
.command('edit <name>')
|
|
94
|
+
.description('Edit a saved command in the TUI')
|
|
95
|
+
.action((name) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).editHandler(name)));
|
|
96
|
+
program
|
|
97
|
+
.command('rename <old> <new>')
|
|
98
|
+
.alias('mv')
|
|
99
|
+
.description('Rename a saved command (aliases and history follow)')
|
|
100
|
+
.action((oldName, newName) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).renameHandler(oldName, newName)));
|
|
101
|
+
program
|
|
102
|
+
.command('delete <name>')
|
|
103
|
+
.alias('rm')
|
|
104
|
+
.description('Delete a saved command')
|
|
105
|
+
.option('-f, --force', 'Delete without confirmation')
|
|
106
|
+
.action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).deleteHandler(name, options)));
|
|
107
|
+
program
|
|
108
|
+
.command('alias [short] [command]')
|
|
109
|
+
.description('Create, list, or remove shortcut aliases')
|
|
110
|
+
.option('--list', 'List all aliases')
|
|
111
|
+
.option('--remove <alias>', 'Remove an alias')
|
|
112
|
+
.action((short, command, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).aliasHandler(short, command, options)));
|
|
113
|
+
program
|
|
114
|
+
.command('recent')
|
|
115
|
+
.description('Show recently run commands (@N references)')
|
|
116
|
+
.option('--limit <n>', 'Maximum entries to show', (v) => parseInt(v, 10))
|
|
117
|
+
.option('--clear', 'Clear execution history')
|
|
118
|
+
.action((options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).recentHandler(options)));
|
|
119
|
+
program
|
|
120
|
+
.command('stats')
|
|
121
|
+
.description('Show usage statistics for your commands')
|
|
122
|
+
.action(() => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).statsHandler()));
|
|
123
|
+
program
|
|
124
|
+
.command('validate [name]')
|
|
125
|
+
.description('Validate one command, or all commands')
|
|
126
|
+
.option('--all', 'Validate all saved commands')
|
|
127
|
+
.action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).validateHandler(options.all ? undefined : name)));
|
|
128
|
+
program
|
|
129
|
+
.command('export <file>')
|
|
130
|
+
.description('Export commands to a JSON or YAML file (secrets masked unless --full)')
|
|
131
|
+
.option('--format <type>', 'json or yaml')
|
|
132
|
+
.option('--full', 'Include real secret env values (restorable backup)')
|
|
133
|
+
.action((file, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).exportHandler(file, options)));
|
|
134
|
+
program
|
|
135
|
+
.command('import <file>')
|
|
136
|
+
.description('Import commands from a JSON file (auto-backup first)')
|
|
137
|
+
.action((file) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).importHandler(file)));
|
|
138
|
+
program
|
|
139
|
+
.command('completion [shell]')
|
|
140
|
+
.description('Generate or install shell completion (bash, zsh, fish)')
|
|
141
|
+
.option('--install', 'Install completion for your current shell')
|
|
142
|
+
.option('--names', 'Print saved command names (used by completion scripts)')
|
|
143
|
+
.action((shell, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/completion')))).completionHandler(shell, options)));
|
|
144
|
+
program
|
|
145
|
+
.command('config')
|
|
146
|
+
.description('Show where your commands are stored')
|
|
147
|
+
.action(() => wrap(async () => {
|
|
148
|
+
const { getConfigDir, getConfigPath } = await Promise.resolve().then(() => __importStar(require('./core/store')));
|
|
149
|
+
const { listCommands } = await Promise.resolve().then(() => __importStar(require('./core/commands')));
|
|
150
|
+
console.log(`Config directory: ${getConfigDir()}`);
|
|
151
|
+
console.log(`Config file: ${getConfigPath()}`);
|
|
152
|
+
console.log(`Saved commands: ${Object.keys(listCommands()).length}`);
|
|
153
|
+
}));
|
|
154
|
+
program.showSuggestionAfterError(true);
|
|
155
|
+
const args = process.argv.slice(2);
|
|
156
|
+
if (args.length === 0) {
|
|
157
|
+
// Zero-args: interactive home screen (with first-run welcome).
|
|
158
|
+
wrap(async () => {
|
|
159
|
+
const { maybeShowOnboarding } = await Promise.resolve().then(() => __importStar(require('./ui/onboarding')));
|
|
160
|
+
maybeShowOnboarding(APP_VERSION);
|
|
161
|
+
if (process.stdout.isTTY && process.stdin.isTTY) {
|
|
162
|
+
await (await Promise.resolve().then(() => __importStar(require('./ui/interactive')))).interactiveHome();
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
program.outputHelp();
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
program.parse(process.argv);
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CommandMap, ListFormat, SavedCommand } from '../core/types';
|
|
2
|
+
/** "2 minutes ago" style relative time. */
|
|
3
|
+
export declare function timeAgo(iso: string, now?: Date): string;
|
|
4
|
+
export declare function truncate(text: string, max: number): string;
|
|
5
|
+
export declare function toJson(commands: CommandMap, mask?: boolean): string;
|
|
6
|
+
export declare function toYaml(commands: CommandMap, mask?: boolean): string;
|
|
7
|
+
export declare function toCompact(commands: CommandMap): string;
|
|
8
|
+
export interface TableOptions {
|
|
9
|
+
runCounts?: Map<string, number>;
|
|
10
|
+
lastRuns?: Map<string, string>;
|
|
11
|
+
}
|
|
12
|
+
/** Shorten a path for display: home becomes ~. */
|
|
13
|
+
export declare function prettyPath(dir: string): string;
|
|
14
|
+
/** Boxed, width-aware table sorted by usage. */
|
|
15
|
+
export declare function toTable(commands: CommandMap, options?: TableOptions): string;
|
|
16
|
+
export declare function render(commands: CommandMap, format: ListFormat, options?: TableOptions): string;
|
|
17
|
+
/** One-line summary of a command used in confirmation output. */
|
|
18
|
+
export declare function summarize(name: string, cmd: SavedCommand): string;
|
|
19
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKrE,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAcnE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAUD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,UAAO,GAAG,MAAM,CAEhE;AAMD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,UAAO,GAAG,MAAM,CAgBhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAItD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAiChF;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAWR;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,155 @@
|
|
|
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.timeAgo = timeAgo;
|
|
37
|
+
exports.truncate = truncate;
|
|
38
|
+
exports.toJson = toJson;
|
|
39
|
+
exports.toYaml = toYaml;
|
|
40
|
+
exports.toCompact = toCompact;
|
|
41
|
+
exports.prettyPath = prettyPath;
|
|
42
|
+
exports.toTable = toTable;
|
|
43
|
+
exports.render = render;
|
|
44
|
+
exports.summarize = summarize;
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const env_1 = require("../core/env");
|
|
47
|
+
const table_1 = require("./table");
|
|
48
|
+
const theme_1 = require("./theme");
|
|
49
|
+
/** "2 minutes ago" style relative time. */
|
|
50
|
+
function timeAgo(iso, now = new Date()) {
|
|
51
|
+
const seconds = Math.max(0, Math.floor((now.getTime() - new Date(iso).getTime()) / 1000));
|
|
52
|
+
const units = [
|
|
53
|
+
[31536000, 'year'],
|
|
54
|
+
[2592000, 'month'],
|
|
55
|
+
[86400, 'day'],
|
|
56
|
+
[3600, 'hour'],
|
|
57
|
+
[60, 'minute'],
|
|
58
|
+
];
|
|
59
|
+
for (const [size, label] of units) {
|
|
60
|
+
const count = Math.floor(seconds / size);
|
|
61
|
+
if (count >= 1)
|
|
62
|
+
return `${count} ${label}${count > 1 ? 's' : ''} ago`;
|
|
63
|
+
}
|
|
64
|
+
return 'just now';
|
|
65
|
+
}
|
|
66
|
+
function truncate(text, max) {
|
|
67
|
+
return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
|
|
68
|
+
}
|
|
69
|
+
function maskedCopy(commands) {
|
|
70
|
+
const out = {};
|
|
71
|
+
for (const [name, cmd] of Object.entries(commands)) {
|
|
72
|
+
out[name] = cmd.env ? { ...cmd, env: (0, env_1.maskSensitive)(cmd.env) } : cmd;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
function toJson(commands, mask = true) {
|
|
77
|
+
return JSON.stringify(mask ? maskedCopy(commands) : commands, null, 2);
|
|
78
|
+
}
|
|
79
|
+
function yamlQuote(value) {
|
|
80
|
+
return /^[\w./-]+$/.test(value) ? value : JSON.stringify(value);
|
|
81
|
+
}
|
|
82
|
+
function toYaml(commands, mask = true) {
|
|
83
|
+
const data = mask ? maskedCopy(commands) : commands;
|
|
84
|
+
const lines = [];
|
|
85
|
+
for (const [name, cmd] of Object.entries(data)) {
|
|
86
|
+
lines.push(`${yamlQuote(name)}:`);
|
|
87
|
+
lines.push(` command: ${yamlQuote(cmd.command)}`);
|
|
88
|
+
lines.push(` directory: ${yamlQuote(cmd.directory)}`);
|
|
89
|
+
lines.push(` pathMode: ${cmd.pathMode ?? 'saved'}`);
|
|
90
|
+
if (cmd.env && Object.keys(cmd.env).length > 0) {
|
|
91
|
+
lines.push(' env:');
|
|
92
|
+
for (const [k, v] of Object.entries(cmd.env))
|
|
93
|
+
lines.push(` ${k}: ${yamlQuote(v)}`);
|
|
94
|
+
}
|
|
95
|
+
lines.push(` createdAt: ${yamlQuote(cmd.createdAt)}`);
|
|
96
|
+
lines.push(` updatedAt: ${yamlQuote(cmd.updatedAt)}`);
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n') + '\n';
|
|
99
|
+
}
|
|
100
|
+
function toCompact(commands) {
|
|
101
|
+
return Object.entries(commands)
|
|
102
|
+
.map(([name, cmd]) => `${name}: ${cmd.command} (${cmd.directory})`)
|
|
103
|
+
.join('\n');
|
|
104
|
+
}
|
|
105
|
+
/** Shorten a path for display: home becomes ~. */
|
|
106
|
+
function prettyPath(dir) {
|
|
107
|
+
const home = os.homedir();
|
|
108
|
+
return dir.startsWith(home) ? `~${dir.slice(home.length)}` : dir;
|
|
109
|
+
}
|
|
110
|
+
/** Boxed, width-aware table sorted by usage. */
|
|
111
|
+
function toTable(commands, options = {}) {
|
|
112
|
+
const names = Object.keys(commands).sort((a, b) => {
|
|
113
|
+
const runsA = options.runCounts?.get(a) ?? 0;
|
|
114
|
+
const runsB = options.runCounts?.get(b) ?? 0;
|
|
115
|
+
return runsB - runsA || a.localeCompare(b);
|
|
116
|
+
});
|
|
117
|
+
const rows = names.map((name) => {
|
|
118
|
+
const cmd = commands[name];
|
|
119
|
+
const runs = options.runCounts?.get(name) ?? 0;
|
|
120
|
+
const lastRun = options.lastRuns?.get(name);
|
|
121
|
+
const envCount = cmd.env ? Object.keys(cmd.env).length : 0;
|
|
122
|
+
const where = (cmd.pathMode ?? 'saved') === 'current' ? '(current dir)' : prettyPath(cmd.directory);
|
|
123
|
+
return [
|
|
124
|
+
name + (envCount > 0 ? ` ⁺${envCount}` : ''),
|
|
125
|
+
cmd.command,
|
|
126
|
+
where,
|
|
127
|
+
runs > 0 ? String(runs) : '·',
|
|
128
|
+
lastRun ? timeAgo(lastRun) : '—',
|
|
129
|
+
];
|
|
130
|
+
});
|
|
131
|
+
return (0, table_1.renderTable)([
|
|
132
|
+
{ header: 'Name', min: 12, flex: 1, style: (t) => theme_1.theme.name(t) },
|
|
133
|
+
{ header: 'Command', min: 24, flex: 4 },
|
|
134
|
+
{ header: 'Where', min: 14, flex: 2, style: (t) => theme_1.theme.dim(t) },
|
|
135
|
+
{ header: 'Runs', min: 4, flex: 0, align: 'right', style: (t) => theme_1.theme.accent(t) },
|
|
136
|
+
{ header: 'Last run', min: 14, flex: 0, style: (t) => theme_1.theme.dim(t) },
|
|
137
|
+
], rows);
|
|
138
|
+
}
|
|
139
|
+
function render(commands, format, options = {}) {
|
|
140
|
+
switch (format) {
|
|
141
|
+
case 'json':
|
|
142
|
+
return toJson(commands);
|
|
143
|
+
case 'yaml':
|
|
144
|
+
return toYaml(commands);
|
|
145
|
+
case 'compact':
|
|
146
|
+
return toCompact(commands);
|
|
147
|
+
case 'table':
|
|
148
|
+
return toTable(commands, options);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** One-line summary of a command used in confirmation output. */
|
|
152
|
+
function summarize(name, cmd) {
|
|
153
|
+
return `${theme_1.theme.name(name)} ${theme_1.theme.dim('→')} ${cmd.command} ${theme_1.theme.dim(`(${cmd.directory})`)}`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as readline from 'readline';
|
|
2
|
+
import { PathMode } from '../core/types';
|
|
3
|
+
/** Simple subsequence fuzzy match: every query char appears in order. */
|
|
4
|
+
export declare function fuzzyMatch(query: string, text: string): boolean;
|
|
5
|
+
export interface FormSeed {
|
|
6
|
+
name?: string;
|
|
7
|
+
command?: string;
|
|
8
|
+
directory?: string;
|
|
9
|
+
pathMode?: PathMode;
|
|
10
|
+
/** When editing, the original name (kept fixed) and its saved env. */
|
|
11
|
+
editing?: string;
|
|
12
|
+
env?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export type TuiAction = {
|
|
15
|
+
kind: 'run';
|
|
16
|
+
name: string;
|
|
17
|
+
} | null;
|
|
18
|
+
export declare class Tui {
|
|
19
|
+
private readonly out;
|
|
20
|
+
private mode;
|
|
21
|
+
private filter;
|
|
22
|
+
private selected;
|
|
23
|
+
private rows;
|
|
24
|
+
private form;
|
|
25
|
+
private input;
|
|
26
|
+
private message;
|
|
27
|
+
private resolve;
|
|
28
|
+
constructor(out?: (text: string) => void);
|
|
29
|
+
private get width();
|
|
30
|
+
private get height();
|
|
31
|
+
private visibleRows;
|
|
32
|
+
refresh(): void;
|
|
33
|
+
openForm(seed?: FormSeed): void;
|
|
34
|
+
private header;
|
|
35
|
+
private listPane;
|
|
36
|
+
private detailPane;
|
|
37
|
+
private statsPane;
|
|
38
|
+
private formPane;
|
|
39
|
+
private inputPane;
|
|
40
|
+
private footer;
|
|
41
|
+
render(): void;
|
|
42
|
+
/** Clear the filter but keep the same row highlighted. */
|
|
43
|
+
private clearFilter;
|
|
44
|
+
private move;
|
|
45
|
+
private openInput;
|
|
46
|
+
private handleInputKey;
|
|
47
|
+
private submitInput;
|
|
48
|
+
private submitForm;
|
|
49
|
+
private handleFormKey;
|
|
50
|
+
handleKey(str: string | undefined, key: readline.Key): void;
|
|
51
|
+
private selectRun;
|
|
52
|
+
private finish;
|
|
53
|
+
/** Show the TUI until the user runs a command or quits (null). */
|
|
54
|
+
waitForAction(): Promise<TuiAction>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The full-screen home: everything (browse, create, edit, delete, stats)
|
|
58
|
+
* happens in the TUI. Only running a command hands the terminal back so
|
|
59
|
+
* output lands in normal scrollback.
|
|
60
|
+
*/
|
|
61
|
+
export declare function interactiveHome(seed?: FormSeed): Promise<void>;
|
|
62
|
+
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/ui/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAYrC,OAAO,EAAE,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAIvD,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAS/D;AAKD,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAmED,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAqB7D,qBAAa,GAAG;IAUF,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAA8C;gBAEhC,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAqC;IAEzF,OAAO,KAAK,KAAK,GAEhB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,WAAW;IAUnB,OAAO,IAAI,IAAI;IAKf,QAAQ,CAAC,IAAI,GAAE,QAAa,GAAG,IAAI;IAqBnC,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,QAAQ;IA6ChB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,MAAM;IAgCd,MAAM,IAAI,IAAI;IAoCd,0DAA0D;IAC1D,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,aAAa;IA6CrB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI;IAoF3D,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,MAAM;IAMd,kEAAkE;IAClE,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;CAMpC;AAgBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpE"}
|