caselyjs 1.0.6 → 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
@@ -55,12 +55,35 @@ npx caselyjs ./my-project --dry
55
55
 
56
56
  ## ⚙️ CLI Options
57
57
 
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 |
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
+ ```
64
87
 
65
88
  ## 💻 Programmatic Usage
66
89
 
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,6 +26,7 @@ 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
  });
29
31
  console.log(`\n[CONFIG] { path: '${path}', case: '${options.case}', operate: '${options.full ? "full" : "partial"}' }\n`);
30
32
  await index_1.casely.execute();
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,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"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "caselyjs",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "author": "thatonevikash",
5
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": {
@@ -41,7 +41,8 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "chalk": "^6.0.0",
44
- "commander": "^15.0.0"
44
+ "commander": "^15.0.0",
45
+ "ts-morph": "^28.0.0"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@types/node": "^20.19.39",