aliasmate 2.0.0 → 2.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.
- package/CHANGELOG.md +53 -3
- package/README.md +98 -10
- package/dist/cli/completion.js +4 -4
- package/dist/cli/completion.js.map +1 -1
- package/dist/cli/extras.d.ts +5 -0
- package/dist/cli/extras.d.ts.map +1 -0
- package/dist/cli/extras.js +73 -0
- package/dist/cli/extras.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +140 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/manage.d.ts +2 -3
- package/dist/cli/manage.d.ts.map +1 -1
- package/dist/cli/manage.js +47 -27
- package/dist/cli/manage.js.map +1 -1
- package/dist/cli/project.d.ts +2 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +105 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +90 -16
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/save.d.ts +7 -8
- package/dist/cli/save.d.ts.map +1 -1
- package/dist/cli/save.js +71 -33
- package/dist/cli/save.js.map +1 -1
- package/dist/cli/sync.d.ts +2 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +122 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/transfer.d.ts +1 -0
- package/dist/cli/transfer.d.ts.map +1 -1
- package/dist/cli/transfer.js +40 -59
- package/dist/cli/transfer.js.map +1 -1
- package/dist/core/clipboard.d.ts +3 -0
- package/dist/core/clipboard.d.ts.map +1 -0
- package/dist/core/clipboard.js +57 -0
- package/dist/core/clipboard.js.map +1 -0
- package/dist/core/commands.d.ts +8 -1
- package/dist/core/commands.d.ts.map +1 -1
- package/dist/core/commands.js +59 -4
- package/dist/core/commands.js.map +1 -1
- package/dist/core/project.d.ts +21 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +130 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/recent.d.ts +6 -1
- package/dist/core/recent.d.ts.map +1 -1
- package/dist/core/recent.js +11 -2
- package/dist/core/recent.js.map +1 -1
- package/dist/core/runner.d.ts +22 -4
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +72 -8
- package/dist/core/runner.js.map +1 -1
- package/dist/core/suggest.d.ts +12 -0
- package/dist/core/suggest.d.ts.map +1 -0
- package/dist/core/suggest.js +109 -0
- package/dist/core/suggest.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 +115 -0
- package/dist/core/transfer.js.map +1 -0
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/undo.d.ts +7 -0
- package/dist/core/undo.d.ts.map +1 -0
- package/dist/core/undo.js +34 -0
- package/dist/core/undo.js.map +1 -0
- package/dist/index.js +53 -15
- package/dist/index.js.map +1 -1
- package/dist/ui/format.d.ts +6 -1
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +64 -18
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/interactive.d.ts +63 -3
- package/dist/ui/interactive.d.ts.map +1 -1
- package/dist/ui/interactive.js +701 -95
- package/dist/ui/interactive.js.map +1 -1
- package/dist/ui/onboarding.d.ts.map +1 -1
- package/dist/ui/onboarding.js +27 -7
- package/dist/ui/onboarding.js.map +1 -1
- package/dist/ui/prompts.d.ts +1 -12
- package/dist/ui/prompts.d.ts.map +1 -1
- package/dist/ui/prompts.js +45 -91
- package/dist/ui/prompts.js.map +1 -1
- 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 +8 -6
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +33 -18
- package/dist/ui/theme.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,130 @@
|
|
|
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.PROJECT_FILE = void 0;
|
|
37
|
+
exports.findProjectFile = findProjectFile;
|
|
38
|
+
exports.loadProjectCommands = loadProjectCommands;
|
|
39
|
+
exports.listEffectiveCommands = listEffectiveCommands;
|
|
40
|
+
exports.saveProjectCommand = saveProjectCommand;
|
|
41
|
+
exports.removeProjectCommand = removeProjectCommand;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const commands_1 = require("./commands");
|
|
45
|
+
exports.PROJECT_FILE = '.aliasmate.json';
|
|
46
|
+
/** Walk up from cwd looking for a .aliasmate.json. */
|
|
47
|
+
function findProjectFile(from = process.cwd()) {
|
|
48
|
+
let dir = path.resolve(from);
|
|
49
|
+
for (;;) {
|
|
50
|
+
const candidate = path.join(dir, exports.PROJECT_FILE);
|
|
51
|
+
if (fs.existsSync(candidate))
|
|
52
|
+
return candidate;
|
|
53
|
+
const parent = path.dirname(dir);
|
|
54
|
+
if (parent === dir)
|
|
55
|
+
return null;
|
|
56
|
+
dir = parent;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Commands defined by the current project. Relative directories resolve
|
|
61
|
+
* against the project root so the file is portable across machines.
|
|
62
|
+
*/
|
|
63
|
+
function loadProjectCommands(from = process.cwd()) {
|
|
64
|
+
const file = findProjectFile(from);
|
|
65
|
+
if (!file)
|
|
66
|
+
return {};
|
|
67
|
+
const root = path.dirname(file);
|
|
68
|
+
try {
|
|
69
|
+
const raw = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
70
|
+
const result = {};
|
|
71
|
+
for (const [name, entry] of Object.entries(raw)) {
|
|
72
|
+
if (typeof entry?.command !== 'string')
|
|
73
|
+
continue;
|
|
74
|
+
const directory = entry.directory
|
|
75
|
+
? path.isAbsolute(entry.directory)
|
|
76
|
+
? entry.directory
|
|
77
|
+
: path.join(root, entry.directory)
|
|
78
|
+
: root;
|
|
79
|
+
result[name] = {
|
|
80
|
+
pathMode: 'saved',
|
|
81
|
+
...entry,
|
|
82
|
+
createdAt: entry.createdAt ?? '',
|
|
83
|
+
updatedAt: entry.updatedAt ?? '',
|
|
84
|
+
directory,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return {};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Global commands overlaid with the current project's commands. */
|
|
94
|
+
function listEffectiveCommands(from = process.cwd()) {
|
|
95
|
+
const projectFile = findProjectFile(from);
|
|
96
|
+
const project = projectFile ? loadProjectCommands(from) : {};
|
|
97
|
+
return {
|
|
98
|
+
commands: { ...(0, commands_1.listCommands)(), ...project },
|
|
99
|
+
projectNames: new Set(Object.keys(project)),
|
|
100
|
+
projectFile,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Write a command into the project file (created on demand). */
|
|
104
|
+
function saveProjectCommand(name, entry, root = process.cwd()) {
|
|
105
|
+
const file = findProjectFile(root) ?? path.join(path.resolve(root), exports.PROJECT_FILE);
|
|
106
|
+
const existing = fs.existsSync(file)
|
|
107
|
+
? JSON.parse(fs.readFileSync(file, 'utf8'))
|
|
108
|
+
: {};
|
|
109
|
+
const projectRoot = path.dirname(file);
|
|
110
|
+
const relative = path.relative(projectRoot, entry.directory);
|
|
111
|
+
existing[name] = {
|
|
112
|
+
...entry,
|
|
113
|
+
// Store project-relative paths so teammates can use the same file.
|
|
114
|
+
directory: relative === '' ? '.' : relative.startsWith('..') ? entry.directory : relative,
|
|
115
|
+
};
|
|
116
|
+
fs.writeFileSync(file, JSON.stringify(existing, null, 2) + '\n', 'utf8');
|
|
117
|
+
return file;
|
|
118
|
+
}
|
|
119
|
+
function removeProjectCommand(name, root = process.cwd()) {
|
|
120
|
+
const file = findProjectFile(root);
|
|
121
|
+
if (!file)
|
|
122
|
+
return false;
|
|
123
|
+
const existing = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
124
|
+
if (!(name in existing))
|
|
125
|
+
return false;
|
|
126
|
+
delete existing[name];
|
|
127
|
+
fs.writeFileSync(file, JSON.stringify(existing, null, 2) + '\n', 'utf8');
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"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"}
|
package/dist/core/recent.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ExecutionEntry } from './types';
|
|
2
2
|
export declare function getExecutionHistory(): ExecutionEntry[];
|
|
3
|
-
export declare function recordExecution(commandName: string
|
|
3
|
+
export declare function recordExecution(commandName: string, outcome?: {
|
|
4
|
+
exitCode: number;
|
|
5
|
+
durationMs: number;
|
|
6
|
+
}): void;
|
|
7
|
+
/** Most recent execution entry for a command, if any. */
|
|
8
|
+
export declare function getLastExecution(commandName: string): ExecutionEntry | undefined;
|
|
4
9
|
export declare function clearExecutionHistory(): void;
|
|
5
10
|
/** Unique command names, most recently run first. Powers @N references. */
|
|
6
11
|
export declare function getRecentNames(limit?: number): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recent.d.ts","sourceRoot":"","sources":["../../src/core/recent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"recent.d.ts","sourceRoot":"","sources":["../../src/core/recent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjD,IAAI,CAQN;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEhF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAUvD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gDAAgD;AAChD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAe9C"}
|
package/dist/core/recent.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getExecutionHistory = getExecutionHistory;
|
|
4
4
|
exports.recordExecution = recordExecution;
|
|
5
|
+
exports.getLastExecution = getLastExecution;
|
|
5
6
|
exports.clearExecutionHistory = clearExecutionHistory;
|
|
6
7
|
exports.getRecentNames = getRecentNames;
|
|
7
8
|
exports.getUsageStats = getUsageStats;
|
|
@@ -11,11 +12,19 @@ const MAX_ENTRIES = 200;
|
|
|
11
12
|
function getExecutionHistory() {
|
|
12
13
|
return (0, store_1.getMetadata)(HISTORY_KEY) ?? [];
|
|
13
14
|
}
|
|
14
|
-
function recordExecution(commandName) {
|
|
15
|
+
function recordExecution(commandName, outcome) {
|
|
15
16
|
const history = getExecutionHistory();
|
|
16
|
-
history.unshift({
|
|
17
|
+
history.unshift({
|
|
18
|
+
commandName,
|
|
19
|
+
executedAt: new Date().toISOString(),
|
|
20
|
+
...(outcome ? { exitCode: outcome.exitCode, durationMs: outcome.durationMs } : {}),
|
|
21
|
+
});
|
|
17
22
|
(0, store_1.setMetadata)(HISTORY_KEY, history.slice(0, MAX_ENTRIES));
|
|
18
23
|
}
|
|
24
|
+
/** Most recent execution entry for a command, if any. */
|
|
25
|
+
function getLastExecution(commandName) {
|
|
26
|
+
return getExecutionHistory().find((e) => e.commandName === commandName);
|
|
27
|
+
}
|
|
19
28
|
function clearExecutionHistory() {
|
|
20
29
|
(0, store_1.setMetadata)(HISTORY_KEY, []);
|
|
21
30
|
}
|
package/dist/core/recent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recent.js","sourceRoot":"","sources":["../../src/core/recent.ts"],"names":[],"mappings":";;AAMA,kDAEC;AAED,
|
|
1
|
+
{"version":3,"file":"recent.js","sourceRoot":"","sources":["../../src/core/recent.ts"],"names":[],"mappings":";;AAMA,kDAEC;AAED,0CAWC;AAGD,4CAEC;AAED,sDAEC;AAGD,wCAUC;AASD,sCAeC;AAnED,mCAAmD;AAGnD,MAAM,WAAW,GAAG,mBAAmB,CAAC;AACxC,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,SAAgB,mBAAmB;IACjC,OAAO,IAAA,mBAAW,EAAmB,WAAW,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,SAAgB,eAAe,CAC7B,WAAmB,EACnB,OAAkD;IAElD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,OAAO,CAAC,OAAO,CAAC;QACd,WAAW;QACX,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;IACH,IAAA,mBAAW,EAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,yDAAyD;AACzD,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,qBAAqB;IACnC,IAAA,mBAAW,EAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,2EAA2E;AAC3E,SAAgB,cAAc,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD,gDAAgD;AAChD,SAAgB,aAAa;IAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC3B,IAAI,EAAE,KAAK,CAAC,WAAW;gBACvB,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,KAAK,CAAC,UAAU;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC"}
|
package/dist/core/runner.d.ts
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
|
-
import { SavedCommand } from './types';
|
|
1
|
+
import { ExecutionResult, SavedCommand } from './types';
|
|
2
2
|
export interface RunPlan {
|
|
3
3
|
name: string;
|
|
4
4
|
saved: SavedCommand;
|
|
5
5
|
cwd: string;
|
|
6
6
|
cwdSource: 'saved' | 'current' | 'override';
|
|
7
7
|
dangers: string[];
|
|
8
|
+
/** Extra CLI args (after --) appended to the command line. */
|
|
9
|
+
extraArgs: string[];
|
|
10
|
+
/** Distinct {{placeholder}} names found in the command text. */
|
|
11
|
+
placeholders: string[];
|
|
8
12
|
}
|
|
13
|
+
export declare function findPlaceholders(command: string): string[];
|
|
14
|
+
export declare function fillPlaceholders(command: string, values: Record<string, string>): string;
|
|
9
15
|
/** Resolve a name (or alias or @N) into a concrete execution plan. */
|
|
10
|
-
export declare function planRun(nameInput: string, pathOverride?: string): RunPlan;
|
|
11
|
-
/**
|
|
12
|
-
export declare function
|
|
16
|
+
export declare function planRun(nameInput: string, pathOverride?: string, extraArgs?: string[]): RunPlan;
|
|
17
|
+
/** Compose the final command line from plan + placeholder values + extra args. */
|
|
18
|
+
export declare function finalCommand(plan: RunPlan, values?: Record<string, string>): string;
|
|
19
|
+
export interface StepOutcome {
|
|
20
|
+
step: string;
|
|
21
|
+
result: ExecutionResult;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Execute a plan, recording it in the usage history.
|
|
25
|
+
* Chains (saved.steps) run each referenced command sequentially in its own
|
|
26
|
+
* directory/env, stopping at the first failure.
|
|
27
|
+
*/
|
|
28
|
+
export declare function executePlan(plan: RunPlan, values?: Record<string, string>, onStep?: (step: string, index: number, total: number) => void): Promise<ExecutionResult & {
|
|
29
|
+
steps?: StepOutcome[];
|
|
30
|
+
}>;
|
|
13
31
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gEAAgE;IAChE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAExF;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAmCT;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAOvF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAC5D,OAAO,CAAC,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CA4BtD"}
|
package/dist/core/runner.js
CHANGED
|
@@ -33,22 +33,37 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.findPlaceholders = findPlaceholders;
|
|
37
|
+
exports.fillPlaceholders = fillPlaceholders;
|
|
36
38
|
exports.planRun = planRun;
|
|
39
|
+
exports.finalCommand = finalCommand;
|
|
37
40
|
exports.executePlan = executePlan;
|
|
38
41
|
const path = __importStar(require("path"));
|
|
39
42
|
const commands_1 = require("./commands");
|
|
43
|
+
const project_1 = require("./project");
|
|
40
44
|
const recent_1 = require("./recent");
|
|
41
45
|
const executor_1 = require("./executor");
|
|
42
46
|
const validate_1 = require("./validate");
|
|
47
|
+
const PLACEHOLDER = /\{\{\s*([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}/g;
|
|
48
|
+
function findPlaceholders(command) {
|
|
49
|
+
const names = new Set();
|
|
50
|
+
for (const match of command.matchAll(PLACEHOLDER))
|
|
51
|
+
names.add(match[1]);
|
|
52
|
+
return [...names];
|
|
53
|
+
}
|
|
54
|
+
function fillPlaceholders(command, values) {
|
|
55
|
+
return command.replace(PLACEHOLDER, (_, name) => values[name] ?? '');
|
|
56
|
+
}
|
|
43
57
|
/** Resolve a name (or alias or @N) into a concrete execution plan. */
|
|
44
|
-
function planRun(nameInput, pathOverride) {
|
|
45
|
-
const
|
|
58
|
+
function planRun(nameInput, pathOverride, extraArgs = []) {
|
|
59
|
+
const effective = (0, project_1.listEffectiveCommands)();
|
|
60
|
+
const name = effective.commands[nameInput] ? nameInput : (0, commands_1.resolveName)(nameInput, (0, recent_1.getRecentNames)());
|
|
46
61
|
if (!name) {
|
|
47
62
|
throw new Error(nameInput.startsWith('@')
|
|
48
63
|
? `No recent command at ${nameInput}. Run "aliasmate recent" to see history.`
|
|
49
64
|
: `Command "${nameInput}" not found. Run "aliasmate list" to see saved commands.`);
|
|
50
65
|
}
|
|
51
|
-
const saved =
|
|
66
|
+
const saved = effective.commands[name];
|
|
52
67
|
if (!saved)
|
|
53
68
|
throw new Error(`Command "${name}" not found`);
|
|
54
69
|
let cwd;
|
|
@@ -65,19 +80,68 @@ function planRun(nameInput, pathOverride) {
|
|
|
65
80
|
cwd = saved.directory;
|
|
66
81
|
cwdSource = 'saved';
|
|
67
82
|
}
|
|
68
|
-
return {
|
|
83
|
+
return {
|
|
84
|
+
name,
|
|
85
|
+
saved,
|
|
86
|
+
cwd,
|
|
87
|
+
cwdSource,
|
|
88
|
+
dangers: (0, validate_1.getDangerWarnings)(saved.command),
|
|
89
|
+
extraArgs,
|
|
90
|
+
placeholders: saved.steps?.length ? [] : findPlaceholders(saved.command),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/** Compose the final command line from plan + placeholder values + extra args. */
|
|
94
|
+
function finalCommand(plan, values = {}) {
|
|
95
|
+
let cmd = plan.placeholders.length > 0
|
|
96
|
+
? fillPlaceholders(plan.saved.command, values)
|
|
97
|
+
: plan.saved.command;
|
|
98
|
+
if (plan.extraArgs.length > 0)
|
|
99
|
+
cmd = `${cmd} ${plan.extraArgs.join(' ')}`;
|
|
100
|
+
return cmd;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Execute a plan, recording it in the usage history.
|
|
104
|
+
* Chains (saved.steps) run each referenced command sequentially in its own
|
|
105
|
+
* directory/env, stopping at the first failure.
|
|
106
|
+
*/
|
|
107
|
+
async function executePlan(plan, values = {}, onStep) {
|
|
108
|
+
if (plan.saved.steps?.length) {
|
|
109
|
+
const outcomes = [];
|
|
110
|
+
const started = Date.now();
|
|
111
|
+
for (let i = 0; i < plan.saved.steps.length; i++) {
|
|
112
|
+
const stepName = plan.saved.steps[i];
|
|
113
|
+
const stepPlan = planRun(stepName);
|
|
114
|
+
onStep?.(stepName, i, plan.saved.steps.length);
|
|
115
|
+
const result = await runSingle(stepPlan, stepPlan.saved.command);
|
|
116
|
+
outcomes.push({ step: stepName, result });
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
const total = {
|
|
119
|
+
success: false,
|
|
120
|
+
exitCode: result.exitCode,
|
|
121
|
+
durationMs: Date.now() - started,
|
|
122
|
+
};
|
|
123
|
+
(0, recent_1.recordExecution)(plan.name, total);
|
|
124
|
+
return { ...total, steps: outcomes };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const total = { success: true, exitCode: 0, durationMs: Date.now() - started };
|
|
128
|
+
(0, recent_1.recordExecution)(plan.name, total);
|
|
129
|
+
return { ...total, steps: outcomes };
|
|
130
|
+
}
|
|
131
|
+
const result = await runSingle(plan, finalCommand(plan, values));
|
|
132
|
+
(0, recent_1.recordExecution)(plan.name, { exitCode: result.exitCode, durationMs: result.durationMs });
|
|
133
|
+
return result;
|
|
69
134
|
}
|
|
70
|
-
|
|
71
|
-
async function executePlan(plan) {
|
|
135
|
+
async function runSingle(plan, command) {
|
|
72
136
|
const errors = (0, validate_1.validateSavedCommand)({
|
|
73
137
|
...plan.saved,
|
|
138
|
+
command,
|
|
74
139
|
directory: plan.cwd,
|
|
75
140
|
pathMode: 'saved',
|
|
76
141
|
}).filter((issue) => issue.level === 'error');
|
|
77
142
|
if (errors.length > 0) {
|
|
78
143
|
throw new Error(errors.map((e) => e.message).join('; '));
|
|
79
144
|
}
|
|
80
|
-
(0,
|
|
81
|
-
return (0, executor_1.executeCommand)(plan.saved.command, plan.cwd, plan.saved.env);
|
|
145
|
+
return (0, executor_1.executeCommand)(command, plan.cwd, plan.saved.env);
|
|
82
146
|
}
|
|
83
147
|
//# sourceMappingURL=runner.js.map
|
package/dist/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface Suggestion {
|
|
2
|
+
command: string;
|
|
3
|
+
count: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Find the command the user keeps typing but hasn't saved.
|
|
7
|
+
* Reads the raw log written by the shell hook (aliasmate init).
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSuggestion(): Suggestion | null;
|
|
10
|
+
/** Drop a command from future suggestions (called after it gets saved). */
|
|
11
|
+
export declare function clearFromRawLog(command: string): void;
|
|
12
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/core/suggest.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAgBD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAkCjD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CASrD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
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.getSuggestion = getSuggestion;
|
|
37
|
+
exports.clearFromRawLog = clearFromRawLog;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const store_1 = require("./store");
|
|
41
|
+
const commands_1 = require("./commands");
|
|
42
|
+
const RAW_LOG = 'raw.log';
|
|
43
|
+
const SCAN_WINDOW = 300;
|
|
44
|
+
const ROTATE_AT = 2000;
|
|
45
|
+
const MIN_REPEATS = 3;
|
|
46
|
+
function rawLogPath() {
|
|
47
|
+
return path.join((0, store_1.getConfigDir)(), RAW_LOG);
|
|
48
|
+
}
|
|
49
|
+
function isSuggestible(cmd) {
|
|
50
|
+
return (cmd.length > 4 &&
|
|
51
|
+
cmd.length < 200 &&
|
|
52
|
+
!cmd.startsWith('aliasmate') &&
|
|
53
|
+
!cmd.startsWith('am ') &&
|
|
54
|
+
!/^(cd|ls|ll|la|pwd|clear|exit|history|man|which|cat|echo|top|htop)(\s|$)/.test(cmd));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Find the command the user keeps typing but hasn't saved.
|
|
58
|
+
* Reads the raw log written by the shell hook (aliasmate init).
|
|
59
|
+
*/
|
|
60
|
+
function getSuggestion() {
|
|
61
|
+
const file = rawLogPath();
|
|
62
|
+
if (!fs.existsSync(file))
|
|
63
|
+
return null;
|
|
64
|
+
let lines;
|
|
65
|
+
try {
|
|
66
|
+
lines = fs.readFileSync(file, 'utf8').split('\n');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// Keep the log from growing forever.
|
|
72
|
+
if (lines.length > ROTATE_AT) {
|
|
73
|
+
lines = lines.slice(-SCAN_WINDOW);
|
|
74
|
+
try {
|
|
75
|
+
fs.writeFileSync(file, lines.join('\n'), 'utf8');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Best effort.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const savedCommands = new Set(Object.values((0, commands_1.listCommands)()).map((c) => c.command));
|
|
82
|
+
const counts = new Map();
|
|
83
|
+
for (const raw of lines.slice(-SCAN_WINDOW)) {
|
|
84
|
+
const cmd = raw.trim();
|
|
85
|
+
if (!isSuggestible(cmd) || savedCommands.has(cmd))
|
|
86
|
+
continue;
|
|
87
|
+
counts.set(cmd, (counts.get(cmd) ?? 0) + 1);
|
|
88
|
+
}
|
|
89
|
+
let best = null;
|
|
90
|
+
for (const [command, count] of counts) {
|
|
91
|
+
if (count >= MIN_REPEATS && (!best || count > best.count))
|
|
92
|
+
best = { command, count };
|
|
93
|
+
}
|
|
94
|
+
return best;
|
|
95
|
+
}
|
|
96
|
+
/** Drop a command from future suggestions (called after it gets saved). */
|
|
97
|
+
function clearFromRawLog(command) {
|
|
98
|
+
const file = rawLogPath();
|
|
99
|
+
if (!fs.existsSync(file))
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
const lines = fs.readFileSync(file, 'utf8').split('\n');
|
|
103
|
+
fs.writeFileSync(file, lines.filter((l) => l.trim() !== command).join('\n'), 'utf8');
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Best effort.
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/core/suggest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,sCAkCC;AAGD,0CASC;AA/ED,uCAAyB;AACzB,2CAA6B;AAC7B,mCAAuC;AACvC,yCAA0C;AAE1C,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,WAAW,GAAG,CAAC,CAAC;AAOtB,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,oBAAY,GAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,CACL,GAAG,CAAC,MAAM,GAAG,CAAC;QACd,GAAG,CAAC,MAAM,GAAG,GAAG;QAChB,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;QAC5B,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QACtB,CAAC,yEAAyE,CAAC,IAAI,CAAC,GAAG,CAAC,CACrF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC7B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAA,uBAAY,GAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,GAAsB,IAAI,CAAC;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,SAAgB,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Expand a leading ~ and resolve to an absolute path. */
|
|
2
|
+
export declare function expandPath(file: string): string;
|
|
3
|
+
/** Write all commands to a JSON file. Returns how many were exported. */
|
|
4
|
+
export declare function exportToFile(file: string, options?: {
|
|
5
|
+
full?: boolean;
|
|
6
|
+
}): number;
|
|
7
|
+
export interface ImportResult {
|
|
8
|
+
imported: number;
|
|
9
|
+
skipped: string[];
|
|
10
|
+
invalid: string[];
|
|
11
|
+
backup?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Import commands from a JSON file, backing up the current config first.
|
|
15
|
+
* Existing names are skipped unless `overwrite` names them.
|
|
16
|
+
*/
|
|
17
|
+
export declare function importFromFile(file: string, options?: {
|
|
18
|
+
overwrite?: (name: string) => boolean;
|
|
19
|
+
}): ImportResult;
|
|
20
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/core/transfer.ts"],"names":[],"mappings":"AASA,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAUnF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAWD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAAO,GACtD,YAAY,CA6Cd"}
|
|
@@ -0,0 +1,115 @@
|
|
|
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.expandPath = expandPath;
|
|
37
|
+
exports.exportToFile = exportToFile;
|
|
38
|
+
exports.importFromFile = importFromFile;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const commands_1 = require("./commands");
|
|
43
|
+
const env_1 = require("./env");
|
|
44
|
+
const store_1 = require("./store");
|
|
45
|
+
const undo_1 = require("./undo");
|
|
46
|
+
/** Expand a leading ~ and resolve to an absolute path. */
|
|
47
|
+
function expandPath(file) {
|
|
48
|
+
const expanded = file.startsWith('~') ? path.join(os.homedir(), file.slice(1)) : file;
|
|
49
|
+
return path.resolve(expanded);
|
|
50
|
+
}
|
|
51
|
+
/** Write all commands to a JSON file. Returns how many were exported. */
|
|
52
|
+
function exportToFile(file, options = {}) {
|
|
53
|
+
const commands = (0, commands_1.listCommands)();
|
|
54
|
+
const names = Object.keys(commands);
|
|
55
|
+
if (names.length === 0)
|
|
56
|
+
throw new Error('No commands to export');
|
|
57
|
+
const data = {};
|
|
58
|
+
for (const [name, cmd] of Object.entries(commands)) {
|
|
59
|
+
data[name] = !options.full && cmd.env ? { ...cmd, env: (0, env_1.maskSensitive)(cmd.env) } : cmd;
|
|
60
|
+
}
|
|
61
|
+
fs.writeFileSync(expandPath(file), JSON.stringify(data, null, 2), 'utf8');
|
|
62
|
+
return names.length;
|
|
63
|
+
}
|
|
64
|
+
function isValidEntry(value) {
|
|
65
|
+
return (typeof value === 'object' &&
|
|
66
|
+
value !== null &&
|
|
67
|
+
typeof value.command === 'string' &&
|
|
68
|
+
typeof value.directory === 'string');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Import commands from a JSON file, backing up the current config first.
|
|
72
|
+
* Existing names are skipped unless `overwrite` names them.
|
|
73
|
+
*/
|
|
74
|
+
function importFromFile(file, options = {}) {
|
|
75
|
+
const resolved = expandPath(file);
|
|
76
|
+
if (!fs.existsSync(resolved))
|
|
77
|
+
throw new Error(`File not found: ${file}`);
|
|
78
|
+
let incoming;
|
|
79
|
+
try {
|
|
80
|
+
incoming = JSON.parse(fs.readFileSync(resolved, 'utf8'));
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
throw new Error('Could not parse the import file (JSON expected)');
|
|
84
|
+
}
|
|
85
|
+
const result = { imported: 0, skipped: [], invalid: [] };
|
|
86
|
+
(0, undo_1.pushUndo)(`import ${path.basename(resolved)}`);
|
|
87
|
+
const existing = (0, commands_1.listCommands)();
|
|
88
|
+
if (Object.keys(existing).length > 0) {
|
|
89
|
+
result.backup = path.join((0, store_1.getConfigDir)(), `backup-${Date.now()}.json`);
|
|
90
|
+
fs.writeFileSync(result.backup, JSON.stringify(existing, null, 2), 'utf8');
|
|
91
|
+
}
|
|
92
|
+
for (const [name, entry] of Object.entries(incoming)) {
|
|
93
|
+
if (!isValidEntry(entry)) {
|
|
94
|
+
result.invalid.push(name);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if ((0, commands_1.commandExists)(name) && !(options.overwrite?.(name) ?? false)) {
|
|
98
|
+
result.skipped.push(name);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
(0, commands_1.saveCommand)({
|
|
102
|
+
name,
|
|
103
|
+
command: entry.command,
|
|
104
|
+
directory: entry.directory,
|
|
105
|
+
pathMode: entry.pathMode,
|
|
106
|
+
env: entry.env,
|
|
107
|
+
description: entry.description,
|
|
108
|
+
tags: entry.tags,
|
|
109
|
+
steps: entry.steps,
|
|
110
|
+
}, { undo: false });
|
|
111
|
+
result.imported++;
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=transfer.js.map
|