aliasmate 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +126 -2
  3. package/dist/cli.js +52 -15
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/delete.d.ts +12 -0
  6. package/dist/commands/delete.d.ts.map +1 -1
  7. package/dist/commands/delete.js +29 -8
  8. package/dist/commands/delete.js.map +1 -1
  9. package/dist/commands/edit.d.ts +13 -0
  10. package/dist/commands/edit.d.ts.map +1 -1
  11. package/dist/commands/edit.js +50 -23
  12. package/dist/commands/edit.js.map +1 -1
  13. package/dist/commands/export.d.ts +17 -0
  14. package/dist/commands/export.d.ts.map +1 -1
  15. package/dist/commands/export.js +42 -7
  16. package/dist/commands/export.js.map +1 -1
  17. package/dist/commands/import.d.ts +21 -0
  18. package/dist/commands/import.d.ts.map +1 -1
  19. package/dist/commands/import.js +93 -48
  20. package/dist/commands/import.js.map +1 -1
  21. package/dist/commands/list.d.ts +20 -0
  22. package/dist/commands/list.d.ts.map +1 -1
  23. package/dist/commands/list.js +66 -5
  24. package/dist/commands/list.js.map +1 -1
  25. package/dist/commands/prev.d.ts +14 -1
  26. package/dist/commands/prev.d.ts.map +1 -1
  27. package/dist/commands/prev.js +41 -13
  28. package/dist/commands/prev.js.map +1 -1
  29. package/dist/commands/run.d.ts +16 -1
  30. package/dist/commands/run.d.ts.map +1 -1
  31. package/dist/commands/run.js +30 -10
  32. package/dist/commands/run.js.map +1 -1
  33. package/dist/commands/save.d.ts +15 -1
  34. package/dist/commands/save.d.ts.map +1 -1
  35. package/dist/commands/save.js +64 -33
  36. package/dist/commands/save.js.map +1 -1
  37. package/dist/commands/search.d.ts +19 -0
  38. package/dist/commands/search.d.ts.map +1 -0
  39. package/dist/commands/search.js +113 -0
  40. package/dist/commands/search.js.map +1 -0
  41. package/dist/storage/index.d.ts +34 -7
  42. package/dist/storage/index.d.ts.map +1 -1
  43. package/dist/storage/index.js +55 -11
  44. package/dist/storage/index.js.map +1 -1
  45. package/dist/utils/constants.d.ts +48 -0
  46. package/dist/utils/constants.d.ts.map +1 -0
  47. package/dist/utils/constants.js +51 -0
  48. package/dist/utils/constants.js.map +1 -0
  49. package/dist/utils/errors.d.ts +30 -0
  50. package/dist/utils/errors.d.ts.map +1 -0
  51. package/dist/utils/errors.js +62 -0
  52. package/dist/utils/errors.js.map +1 -0
  53. package/dist/utils/executor.d.ts +22 -1
  54. package/dist/utils/executor.d.ts.map +1 -1
  55. package/dist/utils/executor.js +36 -11
  56. package/dist/utils/executor.js.map +1 -1
  57. package/dist/utils/history.d.ts +21 -3
  58. package/dist/utils/history.d.ts.map +1 -1
  59. package/dist/utils/history.js +28 -14
  60. package/dist/utils/history.js.map +1 -1
  61. package/dist/utils/llm-generator.d.ts +21 -0
  62. package/dist/utils/llm-generator.d.ts.map +1 -0
  63. package/dist/utils/llm-generator.js +337 -0
  64. package/dist/utils/llm-generator.js.map +1 -0
  65. package/dist/utils/onboarding.d.ts +10 -0
  66. package/dist/utils/onboarding.d.ts.map +1 -0
  67. package/dist/utils/onboarding.js +201 -0
  68. package/dist/utils/onboarding.js.map +1 -0
  69. package/dist/utils/paths.d.ts +39 -1
  70. package/dist/utils/paths.d.ts.map +1 -1
  71. package/dist/utils/paths.js +56 -1
  72. package/dist/utils/paths.js.map +1 -1
  73. package/dist/utils/prompts.d.ts +56 -0
  74. package/dist/utils/prompts.d.ts.map +1 -0
  75. package/dist/utils/prompts.js +51 -0
  76. package/dist/utils/prompts.js.map +1 -0
  77. package/package.json +22 -6
@@ -34,10 +34,25 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.resolvePath = resolvePath;
37
+ exports.isValidDirectory = isValidDirectory;
38
+ exports.sanitizeCommandName = sanitizeCommandName;
37
39
  const path = __importStar(require("path"));
40
+ const fs = __importStar(require("fs"));
38
41
  /**
39
42
  * Resolve a path, handling relative paths, absolute paths, and special cases
40
- * Cross-platform path resolution
43
+ * Works cross-platform (Windows, macOS, Linux)
44
+ *
45
+ * @param inputPath - The path to resolve
46
+ * @param basePath - The base path to resolve relative paths against (defaults to cwd)
47
+ * @returns The resolved absolute path
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * resolvePath('.', '/home/user') // => '/home/user'
52
+ * resolvePath('..', '/home/user') // => '/home'
53
+ * resolvePath('/absolute/path') // => '/absolute/path'
54
+ * resolvePath('relative/path', '/base') // => '/base/relative/path'
55
+ * ```
41
56
  */
42
57
  function resolvePath(inputPath, basePath = process.cwd()) {
43
58
  if (!inputPath) {
@@ -57,4 +72,44 @@ function resolvePath(inputPath, basePath = process.cwd()) {
57
72
  // Resolve relative to base path
58
73
  return path.resolve(basePath, inputPath);
59
74
  }
75
+ /**
76
+ * Validate that a directory exists and is accessible
77
+ *
78
+ * @param dirPath - The directory path to validate
79
+ * @returns true if directory exists and is accessible, false otherwise
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * if (isValidDirectory('/home/user/project')) {
84
+ * console.log('Directory is valid');
85
+ * }
86
+ * ```
87
+ */
88
+ function isValidDirectory(dirPath) {
89
+ try {
90
+ const stats = fs.statSync(dirPath);
91
+ return stats.isDirectory();
92
+ }
93
+ catch (error) {
94
+ return false;
95
+ }
96
+ }
97
+ /**
98
+ * Sanitize a command name by removing invalid characters
99
+ *
100
+ * @param name - The command name to sanitize
101
+ * @returns Sanitized command name
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * sanitizeCommandName('my command!') // => 'my-command'
106
+ * ```
107
+ */
108
+ function sanitizeCommandName(name) {
109
+ return name
110
+ .trim()
111
+ .replace(/[\s]+/g, '-') // Replace spaces with hyphens
112
+ .replace(/[^a-zA-Z0-9_-]/g, '') // Remove invalid characters
113
+ .toLowerCase();
114
+ }
60
115
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,kCAqBC;AA3BD,2CAA6B;AAE7B;;;GAGG;AACH,SAAgB,WAAW,CAAC,SAAiB,EAAE,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,gCAAgC;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,kCAqBC;AAeD,4CAOC;AAaD,kDAMC;AAjFD,2CAA6B;AAC7B,uCAAyB;AAEzB;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,WAAW,CAAC,SAAiB,EAAE,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,gCAAgC;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,IAAI,EAAE;SACN,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,8BAA8B;SACrD,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,4BAA4B;SAC3D,WAAW,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Type-safe prompt utilities to eliminate 'any' types
3
+ */
4
+ export interface TextInputPrompt {
5
+ type: 'input';
6
+ name: string;
7
+ message: string;
8
+ default?: string;
9
+ validate?: (input: string) => boolean | string;
10
+ }
11
+ export interface ConfirmPrompt {
12
+ type: 'confirm';
13
+ name: string;
14
+ message: string;
15
+ default?: boolean;
16
+ }
17
+ export interface ListPrompt {
18
+ type: 'list';
19
+ name: string;
20
+ message: string;
21
+ choices: Array<{
22
+ name: string;
23
+ value: string;
24
+ }>;
25
+ }
26
+ type PromptType = TextInputPrompt | ConfirmPrompt | ListPrompt;
27
+ /**
28
+ * Type-safe wrapper for inquirer text input prompt
29
+ *
30
+ * @param prompt - The prompt configuration
31
+ * @returns Promise resolving to the user's input string
32
+ */
33
+ export declare function promptText(prompt: TextInputPrompt): Promise<string>;
34
+ /**
35
+ * Type-safe wrapper for inquirer confirm prompt
36
+ *
37
+ * @param prompt - The prompt configuration
38
+ * @returns Promise resolving to the user's boolean choice
39
+ */
40
+ export declare function promptConfirm(prompt: ConfirmPrompt): Promise<boolean>;
41
+ /**
42
+ * Type-safe wrapper for inquirer list prompt
43
+ *
44
+ * @param prompt - The prompt configuration
45
+ * @returns Promise resolving to the selected value
46
+ */
47
+ export declare function promptList(prompt: ListPrompt): Promise<string>;
48
+ /**
49
+ * Type-safe wrapper for multiple prompts
50
+ *
51
+ * @param prompts - Array of prompt configurations
52
+ * @returns Promise resolving to an object with all answers
53
+ */
54
+ export declare function promptMultiple<T extends Record<string, unknown>>(prompts: PromptType[]): Promise<T>;
55
+ export {};
56
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,KAAK,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,UAAU,CAAC;AAE/D;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3E;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,CAAC,CAAC,CAGZ"}
@@ -0,0 +1,51 @@
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.promptText = promptText;
7
+ exports.promptConfirm = promptConfirm;
8
+ exports.promptList = promptList;
9
+ exports.promptMultiple = promptMultiple;
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ /**
12
+ * Type-safe wrapper for inquirer text input prompt
13
+ *
14
+ * @param prompt - The prompt configuration
15
+ * @returns Promise resolving to the user's input string
16
+ */
17
+ async function promptText(prompt) {
18
+ const result = await inquirer_1.default.prompt([prompt]);
19
+ return result[prompt.name];
20
+ }
21
+ /**
22
+ * Type-safe wrapper for inquirer confirm prompt
23
+ *
24
+ * @param prompt - The prompt configuration
25
+ * @returns Promise resolving to the user's boolean choice
26
+ */
27
+ async function promptConfirm(prompt) {
28
+ const result = await inquirer_1.default.prompt([prompt]);
29
+ return result[prompt.name];
30
+ }
31
+ /**
32
+ * Type-safe wrapper for inquirer list prompt
33
+ *
34
+ * @param prompt - The prompt configuration
35
+ * @returns Promise resolving to the selected value
36
+ */
37
+ async function promptList(prompt) {
38
+ const result = await inquirer_1.default.prompt([prompt]);
39
+ return result[prompt.name];
40
+ }
41
+ /**
42
+ * Type-safe wrapper for multiple prompts
43
+ *
44
+ * @param prompts - Array of prompt configurations
45
+ * @returns Promise resolving to an object with all answers
46
+ */
47
+ async function promptMultiple(prompts) {
48
+ const result = await inquirer_1.default.prompt(prompts);
49
+ return result;
50
+ }
51
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":";;;;;AAoCA,gCAGC;AAQD,sCAGC;AAQD,gCAGC;AAQD,wCAKC;AA1ED,wDAAgC;AA8BhC;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAAC,MAAuB;IACtD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CAAC,MAAqB;IACvD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAA0B,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAAC,MAAkB;IACjD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAClC,OAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAI,OAAyC,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aliasmate",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "A CLI utility to save, manage, and re-run shell commands with their working directories",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
@@ -10,7 +10,15 @@
10
10
  "build": "tsc",
11
11
  "dev": "tsc --watch",
12
12
  "prepublishOnly": "npm run build",
13
- "test": "echo \"Error: no test specified\" && exit 1"
13
+ "lint": "eslint src/**/*.ts",
14
+ "lint:fix": "eslint src/**/*.ts --fix",
15
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
16
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
17
+ "typecheck": "tsc --noEmit",
18
+ "test": "jest",
19
+ "test:watch": "jest --watch",
20
+ "test:coverage": "jest --coverage",
21
+ "test:ci": "jest --ci --coverage --maxWorkers=2"
14
22
  },
15
23
  "keywords": [
16
24
  "cli",
@@ -24,7 +32,7 @@
24
32
  "automation",
25
33
  "workflow"
26
34
  ],
27
- "author": "",
35
+ "author": "akhshyganesh",
28
36
  "license": "MIT",
29
37
  "engines": {
30
38
  "node": ">=14.0.0"
@@ -38,14 +46,22 @@
38
46
  },
39
47
  "homepage": "https://github.com/aliasmate/aliasmate#readme",
40
48
  "dependencies": {
49
+ "chalk": "^4.1.2",
41
50
  "commander": "^11.1.0",
42
- "inquirer": "^8.2.6",
43
51
  "execa": "^5.1.1",
44
- "chalk": "^4.1.2"
52
+ "inquirer": "^8.2.6"
45
53
  },
46
54
  "devDependencies": {
47
- "@types/node": "^20.10.0",
55
+ "@jest/globals": "^30.2.0",
48
56
  "@types/inquirer": "^8.2.10",
57
+ "@types/jest": "^30.0.0",
58
+ "@types/node": "^20.10.0",
59
+ "@typescript-eslint/eslint-plugin": "^6.13.0",
60
+ "@typescript-eslint/parser": "^6.13.0",
61
+ "eslint": "^8.55.0",
62
+ "jest": "^30.2.0",
63
+ "prettier": "^3.1.0",
64
+ "ts-jest": "^29.4.6",
49
65
  "typescript": "^5.3.3"
50
66
  },
51
67
  "files": [