@acmekit/cli 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/cli.js +16 -0
  2. package/dist/codemods/index.d.ts +13 -0
  3. package/dist/codemods/index.d.ts.map +1 -0
  4. package/dist/codemods/index.js +30 -0
  5. package/dist/codemods/index.js.map +1 -0
  6. package/dist/codemods/replace-zod-imports.d.ts +4 -0
  7. package/dist/codemods/replace-zod-imports.d.ts.map +1 -0
  8. package/dist/codemods/replace-zod-imports.js +141 -0
  9. package/dist/codemods/replace-zod-imports.js.map +1 -0
  10. package/dist/codemods/types.d.ts +44 -0
  11. package/dist/codemods/types.d.ts.map +1 -0
  12. package/dist/codemods/types.js +3 -0
  13. package/dist/codemods/types.js.map +1 -0
  14. package/dist/commands/new.d.ts +5 -0
  15. package/dist/commands/new.d.ts.map +1 -0
  16. package/dist/commands/new.js +528 -0
  17. package/dist/commands/new.js.map +1 -0
  18. package/dist/create-cli.d.ts +3 -0
  19. package/dist/create-cli.d.ts.map +1 -0
  20. package/dist/create-cli.js +612 -0
  21. package/dist/create-cli.js.map +1 -0
  22. package/dist/did-you-mean.d.ts +2 -0
  23. package/dist/did-you-mean.d.ts.map +1 -0
  24. package/dist/did-you-mean.js +23 -0
  25. package/dist/did-you-mean.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +34 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/reporter/index.d.ts +115 -0
  31. package/dist/reporter/index.d.ts.map +1 -0
  32. package/dist/reporter/index.js +365 -0
  33. package/dist/reporter/index.js.map +1 -0
  34. package/dist/reporter/panic-handler.d.ts +16 -0
  35. package/dist/reporter/panic-handler.d.ts.map +1 -0
  36. package/dist/reporter/panic-handler.js +32 -0
  37. package/dist/reporter/panic-handler.js.map +1 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -0
  39. package/dist/util/clear-project.d.ts +2 -0
  40. package/dist/util/clear-project.d.ts.map +1 -0
  41. package/dist/util/clear-project.js +23 -0
  42. package/dist/util/clear-project.js.map +1 -0
  43. package/dist/util/package-manager.d.ts +3 -0
  44. package/dist/util/package-manager.d.ts.map +1 -0
  45. package/dist/util/package-manager.js +21 -0
  46. package/dist/util/package-manager.js.map +1 -0
  47. package/package.json +61 -0
package/cli.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+
3
+ try {
4
+ require("ts-node").register({})
5
+ require("tsconfig-paths").register({})
6
+ } catch (e) {
7
+ const isProduction = process.env.NODE_ENV === "production"
8
+ if (!isProduction) {
9
+ console.warn(
10
+ "ts-node cannot be loaded and used, if you are running in production don't forget to set your NODE_ENV to production"
11
+ )
12
+ console.warn(e)
13
+ }
14
+ }
15
+ require("dotenv").config()
16
+ require("./dist/index.js")
@@ -0,0 +1,13 @@
1
+ import type { Codemod } from "./types";
2
+ /**
3
+ * Get a codemod by name
4
+ * @param name - The name of the codemod to retrieve
5
+ * @returns The codemod if found, null otherwise
6
+ */
7
+ export declare function getCodemod(name: string): Codemod | null;
8
+ /**
9
+ * List all available codemod names
10
+ * @returns Array of codemod names
11
+ */
12
+ export declare function listCodemods(): string[];
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codemods/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAUtC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAEvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
@@ -0,0 +1,30 @@
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.getCodemod = getCodemod;
7
+ exports.listCodemods = listCodemods;
8
+ const replace_zod_imports_1 = __importDefault(require("./replace-zod-imports"));
9
+ /**
10
+ * Registry of available codemods
11
+ */
12
+ const CODEMODS = {
13
+ "replace-zod-imports": replace_zod_imports_1.default,
14
+ };
15
+ /**
16
+ * Get a codemod by name
17
+ * @param name - The name of the codemod to retrieve
18
+ * @returns The codemod if found, null otherwise
19
+ */
20
+ function getCodemod(name) {
21
+ return CODEMODS[name] || null;
22
+ }
23
+ /**
24
+ * List all available codemod names
25
+ * @returns Array of codemod names
26
+ */
27
+ function listCodemods() {
28
+ return Object.keys(CODEMODS);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codemods/index.ts"],"names":[],"mappings":";;;;;AAeA,gCAEC;AAMD,oCAEC;AAxBD,gFAAqD;AAErD;;GAEG;AACH,MAAM,QAAQ,GAA4B;IACxC,qBAAqB,EAAE,6BAAiB;CACzC,CAAA;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Codemod } from "./types";
2
+ declare const CODEMOD: Codemod;
3
+ export default CODEMOD;
4
+ //# sourceMappingURL=replace-zod-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-zod-imports.d.ts","sourceRoot":"","sources":["../../src/codemods/replace-zod-imports.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,SAAS,CAAA;AAGrE,QAAA,MAAM,OAAO,EAAE,OAId,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,141 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const index_1 = __importDefault(require("../reporter/index"));
8
+ const glob_1 = require("glob");
9
+ const CODEMOD = {
10
+ name: "replace-zod-imports",
11
+ description: "Replace all zod imports with @acmekit/framework/zod imports",
12
+ run: replaceZodImports,
13
+ };
14
+ exports.default = CODEMOD;
15
+ // Replacement patterns for zod imports
16
+ // Order matters: more specific patterns must come before general ones
17
+ const REPLACEMENTS = [
18
+ // Default import with identifier "zod": import zod from "zod" -> import { z as zod } from "@acmekit/framework/zod"
19
+ {
20
+ pattern: /import\s+zod\s+from\s+['"]zod['"]/g,
21
+ replacement: `import { z as zod } from "@acmekit/framework/zod"`,
22
+ },
23
+ // Default import with identifier "z": import z from "zod" -> import { z } from "@acmekit/framework/zod"
24
+ {
25
+ pattern: /import\s+z\s+from\s+['"]zod['"]/g,
26
+ replacement: `import { z } from "@acmekit/framework/zod"`,
27
+ },
28
+ // Namespace import with other identifier: import * as something from "zod" -> import { z as something } from "@acmekit/framework/zod"
29
+ {
30
+ pattern: /import\s+\*\s+as\s+(\w+)\s+from\s+['"]zod['"]/g,
31
+ replacement: `import { z as $1 } from "@acmekit/framework/zod"`,
32
+ },
33
+ // Named/type imports: import { z } from "zod" or import type { ZodSchema } from "zod"
34
+ {
35
+ pattern: /from\s+['"]zod['"]/g,
36
+ replacement: `from "@acmekit/framework/zod"`,
37
+ },
38
+ // CommonJS require: require("zod")
39
+ {
40
+ pattern: /require\s*\(\s*['"]zod['"]\s*\)/g,
41
+ replacement: `require("@acmekit/framework/zod")`,
42
+ },
43
+ ];
44
+ const ZOD_IMPORT_PATTERN = /from\s+['"]zod['"]|require\s*\(\s*['"]zod['"]\s*\)/;
45
+ /**
46
+ * Replace all zod imports with @acmekit/framework/zod imports
47
+ */
48
+ async function replaceZodImports(options) {
49
+ const { dryRun = false } = options;
50
+ const targetFiles = await getTargetFiles();
51
+ const numberOfFiles = Object.keys(targetFiles).length;
52
+ if (numberOfFiles === 0) {
53
+ index_1.default.info(" No files found with zod imports");
54
+ return { filesScanned: 0, filesModified: 0, errors: 0 };
55
+ }
56
+ index_1.default.info(` Found ${numberOfFiles} files to process`);
57
+ let filesModified = 0;
58
+ let errors = 0;
59
+ for (const [filePath, content] of Object.entries(targetFiles)) {
60
+ try {
61
+ if (processFile(filePath, content, dryRun)) {
62
+ filesModified++;
63
+ }
64
+ }
65
+ catch (error) {
66
+ index_1.default.error(`✗ Error processing ${filePath}: ${error.message}`);
67
+ errors++;
68
+ }
69
+ }
70
+ return { filesScanned: numberOfFiles, filesModified, errors };
71
+ }
72
+ /**
73
+ * Process a single file and replace zod imports
74
+ * @returns true if the file was modified, false otherwise
75
+ */
76
+ function processFile(filePath, content, dryRun) {
77
+ let modifiedContent = content;
78
+ for (const { pattern, replacement } of REPLACEMENTS) {
79
+ modifiedContent = modifiedContent.replace(pattern, replacement);
80
+ }
81
+ if (modifiedContent === content) {
82
+ return false;
83
+ }
84
+ if (dryRun) {
85
+ index_1.default.info(` Would update: ${filePath}`);
86
+ }
87
+ else {
88
+ fs_1.default.writeFileSync(filePath, modifiedContent);
89
+ index_1.default.info(`✓ Updated: ${filePath}`);
90
+ }
91
+ return true;
92
+ }
93
+ /**
94
+ * Find all TypeScript/JavaScript files that contain zod imports
95
+ * @returns Array of file paths with zod imports
96
+ */
97
+ async function getTargetFiles() {
98
+ try {
99
+ // Find TypeScript/JavaScript files, excluding build artifacts, dependencies, and src/admin
100
+ const files = await (0, glob_1.glob)("**/*.{ts,js,tsx,jsx}", {
101
+ ignore: [
102
+ "**/node_modules/**",
103
+ "**/.git/**",
104
+ "**/dist/**",
105
+ "**/build/**",
106
+ "**/coverage/**",
107
+ "**/.acmekit/**",
108
+ "**/src/admin/**",
109
+ ],
110
+ nodir: true,
111
+ });
112
+ index_1.default.info(` Scanning ${files.length} files for zod imports...`);
113
+ const targetFiles = {};
114
+ let processedCount = 0;
115
+ for (const file of files) {
116
+ try {
117
+ const content = fs_1.default.readFileSync(file, "utf8");
118
+ if (ZOD_IMPORT_PATTERN.test(content)) {
119
+ targetFiles[file] = content;
120
+ }
121
+ processedCount++;
122
+ if (processedCount % 100 === 0) {
123
+ process.stdout.write(`\r Processed ${processedCount}/${files.length} files...`);
124
+ }
125
+ }
126
+ catch {
127
+ // Skip files that can't be read
128
+ continue;
129
+ }
130
+ }
131
+ if (processedCount > 0) {
132
+ process.stdout.write(`\r Processed ${processedCount} files. \n`);
133
+ }
134
+ return targetFiles;
135
+ }
136
+ catch (error) {
137
+ index_1.default.error(`Error finding target files: ${error.message}`);
138
+ return {};
139
+ }
140
+ }
141
+ //# sourceMappingURL=replace-zod-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-zod-imports.js","sourceRoot":"","sources":["../../src/codemods/replace-zod-imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Options for running a codemod
3
+ */
4
+ export interface CodemodOptions {
5
+ /**
6
+ * Run the codemod without making actual file changes
7
+ */
8
+ dryRun?: boolean;
9
+ }
10
+ /**
11
+ * Result of running a codemod
12
+ */
13
+ export interface CodemodResult {
14
+ /**
15
+ * Total number of files scanned for changes
16
+ */
17
+ filesScanned: number;
18
+ /**
19
+ * Number of files that were modified
20
+ */
21
+ filesModified: number;
22
+ /**
23
+ * Number of errors encountered during execution
24
+ */
25
+ errors: number;
26
+ }
27
+ /**
28
+ * A codemod that can be executed to transform code
29
+ */
30
+ export interface Codemod {
31
+ /**
32
+ * Unique identifier for the codemod
33
+ */
34
+ name: string;
35
+ /**
36
+ * Human-readable description of what the codemod does
37
+ */
38
+ description: string;
39
+ /**
40
+ * Function that executes the codemod
41
+ */
42
+ run: (options: CodemodOptions) => Promise<CodemodResult>;
43
+ }
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/codemods/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,GAAG,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CACzD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/codemods/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Main function that clones or copies the starter.
3
+ */
4
+ export declare const newStarter: (args: any) => Promise<void>;
5
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAifA;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,SAAI,kBA0JpC,CAAA"}