caselyjs 1.0.4 → 1.1.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/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  <h1>Caselyjs - CLI</h1>
7
7
  </div>
8
8
 
9
- Tired of Codebases with Mismatched File Casing?šŸ› ļø Meet `CaselyJS (v1.0.1)`
9
+ Tired of Codebases with Mismatched File Casing?šŸ› ļø Meet `caselyjs`
10
10
 
11
11
  <div>
12
12
  <b>caselyjs</> is a high-performance TypeScript-powered CLI and programmatic utility designed to <b>rename files and directories</b> across your entire codebase using consistent naming conventions.</b>
@@ -15,7 +15,7 @@ Tired of Codebases with Mismatched File Casing?šŸ› ļø Meet `CaselyJS (v1.0.1)`
15
15
  > <i>Say goodbye to manually renaming 100+ files in your project!</i>
16
16
  </div>
17
17
 
18
- ## ✨ New in v1.0
18
+ ## ✨ New in `v1` and above
19
19
 
20
20
  - **Native TypeScript Support**: Full type definitions included.
21
21
  - **Powerful CLI**: Run transformations directly from your terminal.
@@ -39,6 +39,7 @@ npx caselyjs ./my-project --dry
39
39
  ```
40
40
 
41
41
  > [!IMPORTANT]
42
+ >
42
43
  > ```bash
43
44
  > # safe command before executing
44
45
  > npx caselyjs --dry
@@ -54,12 +55,35 @@ npx caselyjs ./my-project --dry
54
55
 
55
56
  ## āš™ļø CLI Options
56
57
 
57
- | Flag | Shorthand | Description | Default |
58
- | :------- | :-------- | :------------------------------------------ | :-------------- |
59
- | `--case` | -c | "Target case: camel, kebab, or pascal" | kebab |
60
- | `--ext` | -e | Comma-separated list of file extensions | "js,jsx,ts,tsx" |
61
- | `--full` | -f | Rename directories in addition to files | false |
62
- | `--dry` | | Show intended changes without applying them | false |
58
+ | Flag | Shorthand | Description | Default |
59
+ | :-------------- | :-------- | :------------------------------------------ | :-------------- |
60
+ | `--case` | -c | "Target case: camel, kebab, or pascal" | kebab |
61
+ | `--ext` | -e | Comma-separated list of file extensions | "js,jsx,ts,tsx" |
62
+ | `--full` | -f | Rename directories in addition to files | false |
63
+ | `--dry` | | Show intended changes without applying them | false |
64
+ | `--no-rewrite` | | Skip updating import/require/export paths | false |
65
+
66
+ ## šŸ”— Safe Refactoring
67
+
68
+ CaselyJS automatically updates `import`, `require()`, `export ... from`, and dynamic `import()` paths when renaming files — so your project keeps working after a casing transformation.
69
+
70
+ ```bash
71
+ # Rename files AND update all import paths
72
+ npx caselyjs ./src --case kebab --full
73
+
74
+ # Rename files but DON'T touch import paths
75
+ npx caselyjs ./src --case kebab --no-rewrite
76
+ ```
77
+
78
+ Programmatic usage:
79
+
80
+ ```ts
81
+ casely.config({
82
+ path: "./src",
83
+ case: "kebab",
84
+ rewriteImports: true, // default — set false to skip
85
+ });
86
+ ```
63
87
 
64
88
  ## šŸ’» Programmatic Usage
65
89
 
@@ -97,6 +121,7 @@ await casely.execute();
97
121
  - **Chalk** - Beautifully colored terminal output.
98
122
 
99
123
  ### 🌐 Links
124
+
100
125
  - [dev.to](https://dev.to/thatonevikash/tired-of-codebases-with-mismatched-file-casing-meet-caselyjs-v101-479n)
101
126
 
102
127
  ### šŸ‘Øā€šŸ’» Author
package/dist/bin.js CHANGED
@@ -17,6 +17,7 @@ program
17
17
  .option("-e, --ext <extensions>", "Comma separated extensions", "js,jsx,ts,tsx")
18
18
  .option("-f, --full", "Rename directories as well", false)
19
19
  .option("--dry", "Dry run (show changes without applying)", false)
20
+ .option("--no-rewrite", "Skip updating import/require paths", false)
20
21
  .action(async (path, options) => {
21
22
  console.log(chalk_1.default.blue.bold(`\nšŸš€ CaselyJS starting in ${path}...`));
22
23
  index_1.casely.config({
@@ -25,7 +26,9 @@ program
25
26
  file: options.ext.split(","),
26
27
  operate: options.full ? "full" : "partial",
27
28
  dryRun: options.dry,
29
+ rewriteImports: !options.noRewrite,
28
30
  });
31
+ console.log(`\n[CONFIG] { path: '${path}', case: '${options.case}', operate: '${options.full ? "full" : "partial"}' }\n`);
29
32
  await index_1.casely.execute();
30
33
  console.log(chalk_1.default.green.bold("\n✨ Casing transformation complete!"));
31
34
  });
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,mCAAiC;AACjC,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,OAAO,CAAC;KACzE,MAAM,CACL,wBAAwB,EACxB,4BAA4B,EAC5B,eAAe,CAChB;KACA,MAAM,CAAC,YAAY,EAAE,4BAA4B,EAAE,KAAK,CAAC;KACzD,MAAM,CAAC,OAAO,EAAE,yCAAyC,EAAE,KAAK,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAC,CAAC;IAErE,cAAM,CAAC,MAAM,CAAC;QACZ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC1C,MAAM,EAAE,OAAO,CAAC,GAAG;KACpB,CAAC,CAAC;IAEH,MAAM,cAAM,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,mCAAiC;AACjC,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,OAAO,CAAC;KACzE,MAAM,CACL,wBAAwB,EACxB,4BAA4B,EAC5B,eAAe,CAChB;KACA,MAAM,CAAC,YAAY,EAAE,4BAA4B,EAAE,KAAK,CAAC;KACzD,MAAM,CAAC,OAAO,EAAE,yCAAyC,EAAE,KAAK,CAAC;KACjE,MAAM,CAAC,cAAc,EAAE,oCAAoC,EAAE,KAAK,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAC,CAAC;IAErE,cAAM,CAAC,MAAM,CAAC;QACZ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC1C,MAAM,EAAE,OAAO,CAAC,GAAG;QACnB,cAAc,EAAE,CAAC,OAAO,CAAC,SAAS;KACnC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,uBAAuB,IAAI,cAAc,OAAO,CAAC,IAAI,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,OAAO,CAC9G,CAAC;IAEF,MAAM,cAAM,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/casely.d.ts CHANGED
@@ -1,7 +1,14 @@
1
+ import { RenameEntry } from "./tools/import-rewriter";
1
2
  import { CaselyConfig, CaseType } from "./types";
2
3
  export declare const casely: {
3
4
  config(options: Partial<CaselyConfig>): void;
4
5
  execute(): Promise<void>;
6
+ buildRenameMap(fullPath: string): {
7
+ fileRenames: RenameEntry[];
8
+ folderRenames: RenameEntry[];
9
+ folderFileRenames: RenameEntry[];
10
+ };
11
+ applyRename(oldPath: string, newPath: string, dryRun: boolean): void;
5
12
  rename(fullPath: string, name: string, ext: string, currentCase: CaseType): void;
6
13
  transform(str: string, target: CaseType): string;
7
14
  };
package/dist/casely.js CHANGED
@@ -8,6 +8,7 @@ const path_1 = __importDefault(require("path"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const resolver_1 = require("./tools/resolver");
10
10
  const case_identifier_1 = require("./tools/case-identifier");
11
+ const import_rewriter_1 = require("./tools/import-rewriter");
11
12
  const chalk_1 = __importDefault(require("chalk"));
12
13
  let defaultConfig = {
13
14
  path: process.cwd(),
@@ -15,24 +16,51 @@ let defaultConfig = {
15
16
  case: "kebab",
16
17
  operate: "partial",
17
18
  dryRun: false,
19
+ rewriteImports: true,
18
20
  };
19
21
  exports.casely = {
20
22
  config(options) {
21
23
  defaultConfig = { ...defaultConfig, ...options };
22
24
  },
23
25
  async execute() {
24
- const { files, folders } = (0, resolver_1.pathResolver)(defaultConfig.path, {
25
- recursive: true,
26
- });
26
+ const fullPath = path_1.default.resolve(defaultConfig.path);
27
+ if (!fs_1.default.existsSync(fullPath)) {
28
+ console.log(chalk_1.default.red(`\n Path "${fullPath}" does not exist.\n`));
29
+ return;
30
+ }
31
+ const renameMap = this.buildRenameMap(fullPath);
32
+ if (renameMap.fileRenames.length === 0 && renameMap.folderRenames.length === 0) {
33
+ console.log(chalk_1.default.green("\n āœ” All names already match the target case.\n"));
34
+ return;
35
+ }
36
+ if (defaultConfig.rewriteImports !== false) {
37
+ const allRenames = [...renameMap.fileRenames, ...renameMap.folderFileRenames];
38
+ (0, import_rewriter_1.rewriteImports)(fullPath, allRenames, defaultConfig.file, defaultConfig.dryRun ?? false);
39
+ }
40
+ for (const entry of renameMap.fileRenames) {
41
+ this.applyRename(entry.oldPath, entry.newPath, defaultConfig.dryRun ?? false);
42
+ }
43
+ for (const entry of renameMap.folderRenames) {
44
+ this.applyRename(entry.oldPath, entry.newPath, defaultConfig.dryRun ?? false);
45
+ }
46
+ const totalChanges = renameMap.fileRenames.length + renameMap.folderRenames.length;
47
+ console.log(chalk_1.default.cyan(`\n āœ” ${totalChanges} item(s) ${defaultConfig.dryRun ? "would be" : ""} renamed.\n`));
48
+ },
49
+ buildRenameMap(fullPath) {
50
+ const { files, folders } = (0, resolver_1.pathResolver)(fullPath, { recursive: true });
51
+ const fileRenames = [];
52
+ const folderRenames = [];
27
53
  for (const filePath of files) {
28
54
  const ext = path_1.default.extname(filePath).slice(1);
29
55
  if (!defaultConfig.file.includes(ext))
30
56
  continue;
31
- const dirname = path_1.default.dirname(filePath);
32
57
  const basename = path_1.default.basename(filePath, `.${ext}`);
33
58
  const currentCase = (0, case_identifier_1.caseIdentifier)(basename);
34
59
  if (currentCase !== defaultConfig.case) {
35
- this.rename(filePath, basename, ext, currentCase);
60
+ const newName = this.transform(basename, defaultConfig.case);
61
+ const finalName = `${newName}.${ext}`;
62
+ const newPath = path_1.default.join(path_1.default.dirname(filePath), finalName);
63
+ fileRenames.push({ oldPath: filePath, newPath });
36
64
  }
37
65
  }
38
66
  if (defaultConfig.operate === "full") {
@@ -41,10 +69,60 @@ exports.casely = {
41
69
  const basename = path_1.default.basename(folderPath);
42
70
  const currentCase = (0, case_identifier_1.caseIdentifier)(basename);
43
71
  if (currentCase !== defaultConfig.case) {
44
- this.rename(folderPath, basename, "", currentCase);
72
+ const newName = this.transform(basename, defaultConfig.case);
73
+ const newPath = path_1.default.join(path_1.default.dirname(folderPath), newName);
74
+ folderRenames.push({ oldPath: folderPath, newPath: newPath });
75
+ }
76
+ }
77
+ }
78
+ const folderFileRenames = [];
79
+ if (folderRenames.length > 0) {
80
+ for (const filePath of files) {
81
+ const normalized = filePath.replace(/\\/g, "/");
82
+ let newFilePath = normalized;
83
+ let changed = false;
84
+ for (const fr of folderRenames) {
85
+ const oldDir = fr.oldPath.replace(/\\/g, "/");
86
+ const newDir = fr.newPath.replace(/\\/g, "/");
87
+ if (newFilePath.startsWith(oldDir + "/")) {
88
+ newFilePath = newDir + newFilePath.slice(oldDir.length);
89
+ changed = true;
90
+ }
91
+ }
92
+ if (changed) {
93
+ const existingRename = fileRenames.find((r) => r.oldPath.replace(/\\/g, "/") === normalized);
94
+ if (existingRename) {
95
+ let updatedNew = existingRename.newPath.replace(/\\/g, "/");
96
+ for (const fr of folderRenames) {
97
+ const oldDir = fr.oldPath.replace(/\\/g, "/");
98
+ const newDir = fr.newPath.replace(/\\/g, "/");
99
+ if (updatedNew.startsWith(oldDir + "/")) {
100
+ updatedNew = newDir + updatedNew.slice(oldDir.length);
101
+ }
102
+ }
103
+ existingRename.newPath = updatedNew;
104
+ }
105
+ else {
106
+ folderFileRenames.push({
107
+ oldPath: normalized,
108
+ newPath: newFilePath,
109
+ });
110
+ }
45
111
  }
46
112
  }
47
113
  }
114
+ return { fileRenames, folderRenames, folderFileRenames };
115
+ },
116
+ applyRename(oldPath, newPath, dryRun) {
117
+ const oldName = path_1.default.basename(oldPath);
118
+ const newName = path_1.default.basename(newPath);
119
+ if (dryRun) {
120
+ console.log(chalk_1.default.yellow(` [DRY RUN] ${oldName} āž ${newName}`));
121
+ }
122
+ else {
123
+ fs_1.default.renameSync(oldPath, newPath);
124
+ console.log(chalk_1.default.cyan(` āœ” Renamed: ${oldName} āž ${newName}`));
125
+ }
48
126
  },
49
127
  rename(fullPath, name, ext, currentCase) {
50
128
  const newName = this.transform(name, defaultConfig.case);
@@ -1 +1 @@
1
- {"version":3,"file":"casely.js","sourceRoot":"","sources":["../src/casely.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"casely.js","sourceRoot":"","sources":["../src/casely.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface RenameEntry {
2
+ oldPath: string;
3
+ newPath: string;
4
+ }
5
+ export declare function rewriteImports(targetDir: string, renameMap: RenameEntry[], extensions: string[], dryRun: boolean): void;
@@ -0,0 +1,179 @@
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.rewriteImports = rewriteImports;
7
+ const ts_morph_1 = require("ts-morph");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ function normalize(p) {
12
+ return p.replace(/\\/g, "/");
13
+ }
14
+ function resolveSpecifier(specifier, fromFile, extensions) {
15
+ const dir = path_1.default.dirname(fromFile);
16
+ const resolved = path_1.default.resolve(dir, specifier);
17
+ const normalizedResolved = normalize(resolved);
18
+ if (fs_1.default.existsSync(resolved) && fs_1.default.statSync(resolved).isFile()) {
19
+ return normalizedResolved;
20
+ }
21
+ for (const ext of extensions) {
22
+ const withExt = `${resolved}.${ext}`;
23
+ if (fs_1.default.existsSync(withExt) && fs_1.default.statSync(withExt).isFile()) {
24
+ return normalize(withExt);
25
+ }
26
+ }
27
+ for (const ext of extensions) {
28
+ const indexFile = path_1.default.join(resolved, `index.${ext}`);
29
+ if (fs_1.default.existsSync(indexFile) && fs_1.default.statSync(indexFile).isFile()) {
30
+ return normalize(indexFile);
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ function computeNewSpecifier(fromFilePath, toFilePath, originalHadExtension) {
36
+ const fromDir = path_1.default.dirname(fromFilePath);
37
+ let relative = path_1.default.relative(fromDir, toFilePath).replace(/\\/g, "/");
38
+ if (!relative.startsWith(".")) {
39
+ relative = "./" + relative;
40
+ }
41
+ if (!originalHadExtension) {
42
+ const ext = path_1.default.extname(relative);
43
+ if (ext) {
44
+ relative = relative.slice(0, -ext.length);
45
+ }
46
+ }
47
+ return relative;
48
+ }
49
+ function specifierHasExtension(specifier) {
50
+ const basename = path_1.default.basename(specifier);
51
+ return basename.includes(".") && !basename.startsWith(".");
52
+ }
53
+ function rewriteImports(targetDir, renameMap, extensions, dryRun) {
54
+ if (renameMap.length === 0)
55
+ return;
56
+ const lookup = new Map();
57
+ for (const entry of renameMap) {
58
+ lookup.set(normalize(entry.oldPath), normalize(entry.newPath));
59
+ }
60
+ const importerNewPathLookup = new Map();
61
+ for (const entry of renameMap) {
62
+ importerNewPathLookup.set(normalize(entry.oldPath), normalize(entry.newPath));
63
+ }
64
+ const project = new ts_morph_1.Project({
65
+ compilerOptions: {
66
+ allowJs: true,
67
+ jsx: 1,
68
+ noEmit: true,
69
+ },
70
+ skipAddingFilesFromTsConfig: true,
71
+ skipFileDependencyResolution: true,
72
+ });
73
+ const globPatterns = extensions.map((ext) => `${normalize(path_1.default.resolve(targetDir))}/**/*.${ext}`);
74
+ project.addSourceFilesAtPaths(globPatterns);
75
+ const sourceFiles = project.getSourceFiles();
76
+ let totalRewrites = 0;
77
+ for (const sourceFile of sourceFiles) {
78
+ const filePath = normalize(sourceFile.getFilePath());
79
+ const fileNewPath = importerNewPathLookup.get(filePath) ?? filePath;
80
+ let fileRewrites = 0;
81
+ for (const importDecl of sourceFile.getImportDeclarations()) {
82
+ const specifier = importDecl.getModuleSpecifierValue();
83
+ if (!isRelativeSpecifier(specifier))
84
+ continue;
85
+ const newSpec = tryRewriteSpecifier(specifier, filePath, fileNewPath, extensions, lookup);
86
+ if (newSpec) {
87
+ if (dryRun) {
88
+ logRewrite(filePath, specifier, newSpec);
89
+ }
90
+ else {
91
+ importDecl.setModuleSpecifier(newSpec);
92
+ }
93
+ fileRewrites++;
94
+ }
95
+ }
96
+ for (const exportDecl of sourceFile.getExportDeclarations()) {
97
+ const specifier = exportDecl.getModuleSpecifierValue();
98
+ if (!specifier || !isRelativeSpecifier(specifier))
99
+ continue;
100
+ const newSpec = tryRewriteSpecifier(specifier, filePath, fileNewPath, extensions, lookup);
101
+ if (newSpec) {
102
+ if (dryRun) {
103
+ logRewrite(filePath, specifier, newSpec);
104
+ }
105
+ else {
106
+ exportDecl.setModuleSpecifier(newSpec);
107
+ }
108
+ fileRewrites++;
109
+ }
110
+ }
111
+ sourceFile.forEachDescendant((node) => {
112
+ if (node.getKind() !== ts_morph_1.SyntaxKind.CallExpression)
113
+ return;
114
+ const callExpr = node.asKind(ts_morph_1.SyntaxKind.CallExpression);
115
+ if (!callExpr)
116
+ return;
117
+ const exprText = callExpr.getExpression().getText();
118
+ if (exprText !== "require" && exprText !== "import")
119
+ return;
120
+ const args = callExpr.getArguments();
121
+ if (args.length === 0)
122
+ return;
123
+ const firstArg = args[0];
124
+ if (firstArg.getKind() !== ts_morph_1.SyntaxKind.StringLiteral)
125
+ return;
126
+ const stringLiteral = firstArg.asKind(ts_morph_1.SyntaxKind.StringLiteral);
127
+ if (!stringLiteral)
128
+ return;
129
+ const specifier = stringLiteral.getLiteralValue();
130
+ if (!isRelativeSpecifier(specifier))
131
+ return;
132
+ const newSpec = tryRewriteSpecifier(specifier, filePath, fileNewPath, extensions, lookup);
133
+ if (newSpec) {
134
+ if (dryRun) {
135
+ logRewrite(filePath, specifier, newSpec);
136
+ }
137
+ else {
138
+ stringLiteral.setLiteralValue(newSpec);
139
+ }
140
+ fileRewrites++;
141
+ }
142
+ });
143
+ if (fileRewrites > 0) {
144
+ totalRewrites += fileRewrites;
145
+ if (!dryRun) {
146
+ sourceFile.saveSync();
147
+ }
148
+ }
149
+ }
150
+ if (totalRewrites > 0) {
151
+ const verb = dryRun ? "would be" : "";
152
+ console.log(chalk_1.default.magenta(`\n šŸ”— ${totalRewrites} import path(s) ${verb} rewritten.\n`));
153
+ }
154
+ }
155
+ function isRelativeSpecifier(specifier) {
156
+ return specifier.startsWith("./") || specifier.startsWith("../");
157
+ }
158
+ function tryRewriteSpecifier(specifier, importerOldPath, importerNewPath, extensions, lookup) {
159
+ const resolvedOld = resolveSpecifier(specifier, importerOldPath, extensions);
160
+ if (!resolvedOld)
161
+ return null;
162
+ const targetNewPath = lookup.get(resolvedOld);
163
+ const effectiveTargetPath = targetNewPath ?? resolvedOld;
164
+ const hadExtension = specifierHasExtension(specifier);
165
+ const newSpec = computeNewSpecifier(importerNewPath, effectiveTargetPath, hadExtension);
166
+ if (newSpec !== specifier) {
167
+ return newSpec;
168
+ }
169
+ return null;
170
+ }
171
+ function logRewrite(filePath, oldSpecifier, newSpecifier) {
172
+ const basename = path_1.default.basename(filePath);
173
+ console.log(chalk_1.default.yellow(` [dry] `) +
174
+ chalk_1.default.gray(`${basename}: `) +
175
+ chalk_1.default.white(`"${oldSpecifier}"`) +
176
+ chalk_1.default.gray(` āž `) +
177
+ chalk_1.default.green(`"${newSpecifier}"`));
178
+ }
179
+ //# sourceMappingURL=import-rewriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-rewriter.js","sourceRoot":"","sources":["../../src/tools/import-rewriter.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,4 +6,5 @@ export interface CaselyConfig {
6
6
  case: CaseType;
7
7
  operate: OperationMode;
8
8
  dryRun?: boolean;
9
+ rewriteImports?: boolean;
9
10
  }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "caselyjs",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "author": "thatonevikash",
5
- "description": "Rename codebase files and directories with ease",
5
+ "description": "Powerful CLI to bulk rename files and directories across your codebase with kebab, camel, or Pascal case. Fast, simple, and easy to use.",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/thatonevikash/caselyjs.git"
9
9
  },
10
10
  "keywords": [
11
+ "codebase renamer",
11
12
  "naming convention tool",
12
13
  "file / folder renamer",
13
14
  "case changer",
@@ -39,8 +40,9 @@
39
40
  "prepublishOnly": "npm run build"
40
41
  },
41
42
  "dependencies": {
42
- "chalk": "^5.3.0",
43
- "commander": "^11.0.0"
43
+ "chalk": "^6.0.0",
44
+ "commander": "^15.0.0",
45
+ "ts-morph": "^28.0.0"
44
46
  },
45
47
  "devDependencies": {
46
48
  "@types/node": "^20.19.39",