caselyjs 0.1.0 → 1.0.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 (59) hide show
  1. package/README.md +91 -35
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +33 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/casely.d.ts +7 -0
  6. package/dist/casely.js +75 -0
  7. package/dist/casely.js.map +1 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +18 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/tools/case-identifier.d.ts +1 -0
  12. package/dist/tools/case-identifier.js +16 -0
  13. package/dist/tools/case-identifier.js.map +1 -0
  14. package/dist/tools/mutate-case.d.ts +2 -0
  15. package/dist/tools/mutate-case.js +18 -0
  16. package/dist/tools/mutate-case.js.map +1 -0
  17. package/dist/tools/resolver.d.ts +9 -0
  18. package/dist/tools/resolver.js +34 -0
  19. package/dist/tools/resolver.js.map +1 -0
  20. package/dist/transforms/to-camel.d.ts +2 -0
  21. package/dist/transforms/to-camel.js +61 -0
  22. package/dist/transforms/to-camel.js.map +1 -0
  23. package/dist/transforms/to-kebab.d.ts +2 -0
  24. package/dist/transforms/to-kebab.js +62 -0
  25. package/dist/transforms/to-kebab.js.map +1 -0
  26. package/dist/transforms/to-pascal.d.ts +2 -0
  27. package/dist/transforms/to-pascal.js +61 -0
  28. package/dist/transforms/to-pascal.js.map +1 -0
  29. package/dist/types.d.ts +9 -0
  30. package/dist/types.js +3 -0
  31. package/dist/types.js.map +1 -0
  32. package/package.json +23 -8
  33. package/src/bin.ts +36 -0
  34. package/src/casely.ts +87 -0
  35. package/src/index.ts +1 -0
  36. package/src/tools/case-identifier.ts +12 -0
  37. package/src/tools/mutate-case.ts +24 -0
  38. package/src/tools/resolver.ts +55 -0
  39. package/src/transforms/to-camel.ts +70 -0
  40. package/src/transforms/to-kebab.ts +71 -0
  41. package/src/transforms/to-pascal.ts +68 -0
  42. package/src/types.ts +10 -0
  43. package/test/hello-world/new-world.js +0 -0
  44. package/test/hello.json +0 -0
  45. package/test/hello.py +0 -0
  46. package/test/index.md +0 -0
  47. package/test/pascal.js +0 -0
  48. package/test/why-not/why-no/why-no.ts +0 -0
  49. package/test/why-not/why-not/pascal.js +0 -0
  50. package/test/world-book.go +0 -0
  51. package/tsconfig.json +33 -0
  52. package/casely.js +0 -56
  53. package/index.js +0 -1
  54. package/tools/case-identifier.js +0 -10
  55. package/tools/mutate-case.js +0 -21
  56. package/tools/resolver.js +0 -36
  57. package/tools/transforms/to-camel.js +0 -58
  58. package/tools/transforms/to-kebab.js +0 -59
  59. package/tools/transforms/to-pascal.js +0 -58
package/README.md CHANGED
@@ -1,61 +1,117 @@
1
1
  # 🛠️ caselyjs
2
2
 
3
- **caselyjs** is a CLI and programmatic tool that helps you **rename files and folders** in bulk using a consistent naming convention like `kebab-case`, `camelCase`, or `PascalCase`.
3
+ **caselyjs** is a high-performance TypeScript-powered CLI and programmatic utility designed to **rename files and directories** across your entire codebase using consistent naming conventions.
4
4
 
5
5
  > Say goodbye to manually renaming 100+ files in your project!
6
6
 
7
7
  ---
8
8
 
9
+ ## ✨ New in v1.0
10
+
11
+ - **Native TypeScript Support**: Full type definitions included.
12
+ - **Powerful CLI**: Run transformations directly from your terminal.
13
+ - **Dry Run Mode**: Preview changes before they are applied to your filesystem.
14
+ - **Recursive Bottom-Up Renaming**: Safely renames nested directories without breaking paths.
15
+ - **Enhanced Extension Support**: Easily filter which file types to transform.
16
+
17
+ ---
18
+
9
19
  ## 📦 Installation
10
20
 
21
+ ### For CLI usage (Global)
22
+
23
+ ```bash
24
+ npm install -g caselyjs
25
+ ```
26
+
27
+ ### For Programmatic usage (Local)
28
+
11
29
  ```bash
12
30
  npm install caselyjs
13
31
  ```
14
32
 
15
- ## 🚀 Usage
33
+ ## 🚀 CLI Usage
16
34
 
17
- ### Minimum setup you need to start with `caselyjs`
35
+ You can now run `caselyjs` directly from your terminal without writing any code.
18
36
 
19
- ```js
20
- // index.js
21
- import { casely } from 'caselyjs';
37
+ ```bash
38
+ # Basic usage (defaults to kebab-case and .js, .jsx, .ts, .tsx files)
39
+ caselyjs ./src
22
40
 
23
- casely.config({
24
- path: 'src'
25
- });
41
+ # Convert to PascalCase including folders
42
+ caselyjs ./src --case pascal --full
43
+
44
+ # Custom extensions and Dry Run (see changes before they happen)
45
+ caselyjs ./src --ext "js,ts,css" --case camel --dry
46
+ ```
47
+
48
+ ## ⚡ Quick Run (No Installation Required)
49
+
50
+ ```bash
51
+ # Rename all .js/ts files in the current folder to kebab-case
52
+ npx caselyjs .
26
53
 
27
- casely.execute();
54
+ # Run a full conversion to PascalCase on a specific folder
55
+ npx caselyjs ./src/components --case pascal --full
56
+
57
+ # Preview changes in a specific directory without actually renaming anything
58
+ npx caselyjs ./my-project --dry
28
59
  ```
29
60
 
30
- ## ⚙️ Config Options
61
+ ### Why this is the "Pro" way to use CaselyJS:
62
+
63
+ - **No Clutter**: Doesn't stay on the user's machine or in their node_modules.
64
+
65
+ - **Always Fresh**: npx always pulls the latest version (v2.0.0+), so they get your newest bug fixes and case-identification logic automatically.
66
+
67
+ - **CI/CD Friendly**: Perfect for use in GitHub Actions or automation scripts where you want to enforce a naming convention during a build step without a permanent install.
68
+
69
+ ## CLI Options
31
70
 
32
- ### Default Options
71
+ | Flag | Shorthand | Description | Default |
72
+ | :------- | :-------- | :------------------------------------------ | :-------------- |
73
+ | `--case` | -c | "Target case: camel, kebab, or pascal" | kebab |
74
+ | `--ext` | -e | Comma-separated list of file extensions | "js,jsx,ts,tsx" |
75
+ | `--full` | -f | Rename directories in addition to files | false |
76
+ | `--dry` | | Show intended changes without applying them | false |
77
+
78
+ ## 💻 Programmatic Usage
79
+
80
+ If you prefer to integrate CaselyJS into your own build scripts or tools:
81
+
82
+ ```ts
83
+ import { casely } from "caselyjs";
33
84
 
34
- ```js
35
85
  casely.config({
36
- path: 'src',
37
- case: 'kebab',
38
- file: ['js', 'jsx'],
39
- operate: 'partial'
40
- })
86
+ path: "./src",
87
+ case: "camel",
88
+ file: ["ts", "tsx"],
89
+ operate: "full", // 'partial' (files only) or 'full' (files + folders)
90
+ dryRun: true, // highly recommended for testing
91
+ });
92
+
93
+ await casely.execute();
41
94
  ```
42
95
 
96
+ ## ⚙️ Advanced Configuration
97
+
43
98
  > [!NOTE]\
44
- > `path` is a required property.\
45
- > Don't need to pass any path as `'src/**/*'`, recursive is supported by default.
46
99
  >
47
- > currently, supporting three `case`s as `'kebab' | 'camel' | 'pascal'`\
48
- > default file extensions `['js', 'jsx']`, can include more extenstion in the array.\
49
- > eg.
50
- > ```js
51
- > casely.config({
52
- > // ...previous
53
- > file: ['js', 'jsx', 'ts', 'tsx']
54
- > })
55
- > ```
56
- > default operate mode is `'partial'`, which modifies only files.\
57
- > operate has two variants as `'partial' | 'full'`\
58
- > full will allow you to rename folders too.
59
-
60
- ### Author
61
- **Made with ❤️ by Ninja-Vikash**
100
+ > - **Recursive by Default**: You only need to provide the root directory. CaselyJS automatically traverses all subdirectories.
101
+ > - **Safety First**: When using operate: "full", CaselyJS uses a bottom-up renaming strategy to ensure directory paths remain valid during the process.
102
+
103
+ ### Supported Case Types
104
+
105
+ - kebab-case
106
+ - camelCase
107
+ - PascalCase
108
+
109
+ ## 🛠️ Built With
110
+
111
+ - **TypeScript** - For type-safe filesystem operations.
112
+ - **Commander.js** - Robust CLI argument parsing.
113
+ - **Chalk** - Beautifully colored terminal output.
114
+
115
+ ### 👨‍💻 Author
116
+
117
+ **Made with ❤️ by _codezaura_**
package/dist/bin.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/bin.js ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const index_1 = require("./index");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const program = new commander_1.Command();
11
+ program
12
+ .name("caselyjs")
13
+ .description("Transform codebase file and directory casing")
14
+ .version("2.0.0")
15
+ .argument("[path]", "Path to process", ".")
16
+ .option("-c, --case <type>", "Target case: camel, kebab, pascal", "kebab")
17
+ .option("-e, --ext <extensions>", "Comma separated extensions", "js,jsx,ts,tsx")
18
+ .option("-f, --full", "Rename directories as well", false)
19
+ .option("--dry", "Dry run (show changes without applying)", false)
20
+ .action(async (path, options) => {
21
+ console.log(chalk_1.default.blue.bold(`\n🚀 CaselyJS starting in ${path}...`));
22
+ index_1.casely.config({
23
+ path: path,
24
+ case: options.case,
25
+ file: options.ext.split(","),
26
+ operate: options.full ? "full" : "partial",
27
+ dryRun: options.dry,
28
+ });
29
+ await index_1.casely.execute();
30
+ console.log(chalk_1.default.green.bold("\n✨ Casing transformation complete!"));
31
+ });
32
+ program.parse();
33
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { CaselyConfig, CaseType } from "./types";
2
+ export declare const casely: {
3
+ config(options: Partial<CaselyConfig>): void;
4
+ execute(): Promise<void>;
5
+ rename(fullPath: string, name: string, ext: string, currentCase: CaseType): void;
6
+ transform(str: string, target: CaseType): string;
7
+ };
package/dist/casely.js ADDED
@@ -0,0 +1,75 @@
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.casely = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const resolver_1 = require("./tools/resolver");
10
+ const case_identifier_1 = require("./tools/case-identifier");
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ let defaultConfig = {
13
+ path: process.cwd(),
14
+ file: ["js", "jsx", "ts", "tsx"],
15
+ case: "kebab",
16
+ operate: "partial",
17
+ dryRun: false,
18
+ };
19
+ exports.casely = {
20
+ config(options) {
21
+ defaultConfig = { ...defaultConfig, ...options };
22
+ },
23
+ async execute() {
24
+ const { files, folders } = (0, resolver_1.pathResolver)(defaultConfig.path, {
25
+ recursive: true,
26
+ });
27
+ for (const filePath of files) {
28
+ const ext = path_1.default.extname(filePath).slice(1);
29
+ if (!defaultConfig.file.includes(ext))
30
+ continue;
31
+ const dirname = path_1.default.dirname(filePath);
32
+ const basename = path_1.default.basename(filePath, `.${ext}`);
33
+ const currentCase = (0, case_identifier_1.caseIdentifier)(basename);
34
+ if (currentCase !== defaultConfig.case) {
35
+ this.rename(filePath, basename, ext, currentCase);
36
+ }
37
+ }
38
+ if (defaultConfig.operate === "full") {
39
+ const sortedFolders = folders.sort((a, b) => b.length - a.length);
40
+ for (const folderPath of sortedFolders) {
41
+ const basename = path_1.default.basename(folderPath);
42
+ const currentCase = (0, case_identifier_1.caseIdentifier)(basename);
43
+ if (currentCase !== defaultConfig.case) {
44
+ this.rename(folderPath, basename, "", currentCase);
45
+ }
46
+ }
47
+ }
48
+ },
49
+ rename(fullPath, name, ext, currentCase) {
50
+ const newName = this.transform(name, defaultConfig.case);
51
+ const finalName = ext ? `${newName}.${ext}` : newName;
52
+ const newPath = path_1.default.join(path_1.default.dirname(fullPath), finalName);
53
+ if (defaultConfig.dryRun) {
54
+ console.log(chalk_1.default.yellow(`[DRY RUN] ${path_1.default.basename(fullPath)} ➝ ${finalName}`));
55
+ }
56
+ else {
57
+ fs_1.default.renameSync(fullPath, newPath);
58
+ console.log(chalk_1.default.cyan(`✔ Renamed: ${finalName}`));
59
+ }
60
+ },
61
+ transform(str, target) {
62
+ if (target === "kebab")
63
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
64
+ if (target === "camel")
65
+ return str
66
+ .replace(/[-_](.)/g, (_, g) => g.toUpperCase())
67
+ .replace(/^(.)/, (g) => g.toLowerCase());
68
+ if (target === "pascal")
69
+ return str
70
+ .replace(/[-_](.)/g, (_, g) => g.toUpperCase())
71
+ .replace(/^(.)/, (g) => g.toUpperCase());
72
+ return str;
73
+ },
74
+ };
75
+ //# sourceMappingURL=casely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casely.js","sourceRoot":"","sources":["../src/casely.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./casely";
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./casely"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -0,0 +1 @@
1
+ export declare function caseIdentifier(val: string): "kebab" | "camel" | "pascal" | "unknown";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.caseIdentifier = caseIdentifier;
4
+ function caseIdentifier(val) {
5
+ const str = val.split(".")[0];
6
+ if (/^[a-z]+$/.test(str))
7
+ return "kebab";
8
+ if (/^[a-z]+(-[a-z]+)+$/.test(str))
9
+ return "kebab";
10
+ if (/^[a-z]+(?:[A-Z][a-z]*)*$/.test(str))
11
+ return "camel";
12
+ if (/^[A-Z][a-z]+(?:[A-Z][a-z]*)*$/.test(str))
13
+ return "pascal";
14
+ return "unknown";
15
+ }
16
+ //# sourceMappingURL=case-identifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case-identifier.js","sourceRoot":"","sources":["../../src/tools/case-identifier.ts"],"names":[],"mappings":";;AAEA,wCASC;AATD,SAAgB,cAAc,CAAC,GAAW;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACzD,IAAI,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE/D,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CaseType } from "../types.js";
2
+ export declare function mutateCase(path: string, currentType: Exclude<CaseType, "unknown">, expectedType: Exclude<CaseType, "unknown">): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mutateCase = mutateCase;
4
+ const to_camel_js_1 = require("../transforms/to-camel.js");
5
+ const to_kebab_js_1 = require("../transforms/to-kebab.js");
6
+ const to_pascal_js_1 = require("../transforms/to-pascal.js");
7
+ async function mutateCase(path, currentType, expectedType) {
8
+ if (expectedType === "camel") {
9
+ (0, to_camel_js_1.toCamel)(path, currentType);
10
+ }
11
+ if (expectedType === "kebab") {
12
+ (0, to_kebab_js_1.toKebab)(path, currentType);
13
+ }
14
+ if (expectedType === "pascal") {
15
+ (0, to_pascal_js_1.toPascal)(path, currentType);
16
+ }
17
+ }
18
+ //# sourceMappingURL=mutate-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutate-case.js","sourceRoot":"","sources":["../../src/tools/mutate-case.ts"],"names":[],"mappings":";;AAOA,gCAgBC;AAvBD,2DAAoD;AACpD,2DAAoD;AACpD,6DAAsD;AAK/C,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,WAAyC,EACzC,YAA0C;IAE1C,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAA,qBAAO,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAA,qBAAO,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAA,uBAAQ,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface PathResolverOptions {
2
+ recursive?: boolean;
3
+ }
4
+ interface PathResolverResult {
5
+ files: string[];
6
+ folders: string[];
7
+ }
8
+ export declare function pathResolver(targetPath: string, options?: PathResolverOptions): PathResolverResult;
9
+ export {};
@@ -0,0 +1,34 @@
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.pathResolver = pathResolver;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function pathResolver(targetPath, options = {}) {
10
+ const { recursive = false } = options;
11
+ const result = {
12
+ files: [],
13
+ folders: [],
14
+ };
15
+ function scan(dir) {
16
+ const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
17
+ for (const entry of entries) {
18
+ const fullPath = path_1.default.join(dir, entry.name);
19
+ const normalizedPath = fullPath.replace(/\\/g, "/");
20
+ if (entry.isDirectory()) {
21
+ result.folders.push(normalizedPath);
22
+ if (recursive) {
23
+ scan(fullPath);
24
+ }
25
+ }
26
+ else if (entry.isFile()) {
27
+ result.files.push(normalizedPath);
28
+ }
29
+ }
30
+ }
31
+ scan(targetPath);
32
+ return result;
33
+ }
34
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/tools/resolver.ts"],"names":[],"mappings":";;;;;AAuBA,oCA+BC;AAtDD,4CAAoB;AACpB,gDAAwB;AAsBxB,SAAgB,YAAY,CAC1B,UAAkB,EAClB,UAA+B,EAAE;IAEjC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEtC,MAAM,MAAM,GAAuB;QACjC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,SAAS,IAAI,CAAC,GAAW;QACvB,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEpD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACpC,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type CaseType } from "../types";
2
+ export declare function toCamel(targetPath: string, currentType: Partial<CaseType>): void;
@@ -0,0 +1,61 @@
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.toCamel = toCamel;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function toCamelCase(str) {
10
+ return str
11
+ .replace(/[-_](.)/g, (_, group1) => group1.toUpperCase())
12
+ .replace(/^(.)/, (_, group1) => group1.toLowerCase());
13
+ }
14
+ function kebabToCamel(targetPath) {
15
+ const parent = path_1.default.dirname(targetPath);
16
+ const currentName = path_1.default.basename(targetPath);
17
+ const newName = toCamelCase(currentName);
18
+ const newPath = path_1.default.join(parent, newName);
19
+ if (currentName === newName) {
20
+ console.log(`✅ Already in camelCase: ${currentName}`);
21
+ return;
22
+ }
23
+ try {
24
+ fs_1.default.renameSync(targetPath, newPath);
25
+ console.log(`✨ Renamed Kebab → Camel: ${currentName} ➝ ${newName}`);
26
+ }
27
+ catch (err) {
28
+ const message = err instanceof Error ? err.message : String(err);
29
+ console.error(`❌ Rename failed: ${message}`);
30
+ }
31
+ }
32
+ function pascalToCamel(targetPath) {
33
+ const parent = path_1.default.dirname(targetPath);
34
+ const currentName = path_1.default.basename(targetPath);
35
+ const newName = currentName.charAt(0).toLowerCase() + currentName.slice(1);
36
+ const newPath = path_1.default.join(parent, newName);
37
+ if (currentName === newName) {
38
+ console.log(`✅ Already in camelCase: ${currentName}`);
39
+ return;
40
+ }
41
+ try {
42
+ fs_1.default.renameSync(targetPath, newPath);
43
+ console.log(`✨ Renamed Pascal → Camel: ${currentName} ➝ ${newName}`);
44
+ }
45
+ catch (err) {
46
+ const message = err instanceof Error ? err.message : String(err);
47
+ console.error(`❌ Rename failed: ${message}`);
48
+ }
49
+ }
50
+ function toCamel(targetPath, currentType) {
51
+ if (currentType === "kebab") {
52
+ kebabToCamel(targetPath);
53
+ }
54
+ else if (currentType === "pascal") {
55
+ pascalToCamel(targetPath);
56
+ }
57
+ else {
58
+ console.log("⚠️ Unsupported case type passed.");
59
+ }
60
+ }
61
+ //# sourceMappingURL=to-camel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-camel.js","sourceRoot":"","sources":["../../src/transforms/to-camel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type CaseType } from "../types";
2
+ export declare function toKebab(targetPath: string, currentType: Partial<CaseType>): void;
@@ -0,0 +1,62 @@
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.toKebab = toKebab;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function toKebabCase(str) {
10
+ return str
11
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
12
+ .replace(/([A-Z])([A-Z][a-z])/g, "$1-$2")
13
+ .toLowerCase();
14
+ }
15
+ function pascalToKebab(targetPath) {
16
+ const parent = path_1.default.dirname(targetPath);
17
+ const currentName = path_1.default.basename(targetPath);
18
+ const newName = toKebabCase(currentName);
19
+ const newPath = path_1.default.join(parent, newName);
20
+ if (currentName === newName) {
21
+ console.log(`✅ Already in kebab-case: ${currentName}`);
22
+ return;
23
+ }
24
+ try {
25
+ fs_1.default.renameSync(targetPath, newPath);
26
+ console.log(`✨ Renamed Pascal → Kebab: ${currentName} ➝ ${newName}`);
27
+ }
28
+ catch (err) {
29
+ const message = err instanceof Error ? err.message : String(err);
30
+ console.error(`❌ Rename failed: ${message}`);
31
+ }
32
+ }
33
+ function camelToKebab(targetPath) {
34
+ const parent = path_1.default.dirname(targetPath);
35
+ const currentName = path_1.default.basename(targetPath);
36
+ const newName = toKebabCase(currentName);
37
+ const newPath = path_1.default.join(parent, newName);
38
+ if (currentName === newName) {
39
+ console.log(`✅ Already in kebab-case: ${currentName}`);
40
+ return;
41
+ }
42
+ try {
43
+ fs_1.default.renameSync(targetPath, newPath);
44
+ console.log(`✨ Renamed Camel → Kebab: ${currentName} ➝ ${newName}`);
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : String(err);
48
+ console.error(`❌ Rename failed: ${message}`);
49
+ }
50
+ }
51
+ function toKebab(targetPath, currentType) {
52
+ if (currentType === "pascal") {
53
+ pascalToKebab(targetPath);
54
+ }
55
+ else if (currentType === "camel") {
56
+ camelToKebab(targetPath);
57
+ }
58
+ else {
59
+ console.log("⚠️ Unsupported case type passed.");
60
+ }
61
+ }
62
+ //# sourceMappingURL=to-kebab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-kebab.js","sourceRoot":"","sources":["../../src/transforms/to-kebab.ts"],"names":[],"mappings":";;;;;AA2DA,0BAWC;AAtED,4CAAoB;AACpB,gDAAwB;AAKxB,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,WAAW,EAAE,CAAC;AACnB,CAAC;AAID,SAAS,aAAa,CAAC,UAAkB;IACvC,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,MAAM,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAID,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,MAAM,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAID,SAAgB,OAAO,CACrB,UAAkB,EAClB,WAA8B;IAE9B,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACnC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type CaseType } from "../types";
2
+ export declare function toPascal(targetPath: string, currentType: Partial<CaseType>): void;
@@ -0,0 +1,61 @@
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.toPascal = toPascal;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function toPascalCase(str) {
10
+ return str
11
+ .replace(/[-_](.)/g, (_, group1) => group1.toUpperCase())
12
+ .replace(/^(.)/, (_, group1) => group1.toUpperCase());
13
+ }
14
+ function kebabToPascal(targetPath) {
15
+ const parent = path_1.default.dirname(targetPath);
16
+ const currentName = path_1.default.basename(targetPath);
17
+ const newName = toPascalCase(currentName);
18
+ const newPath = path_1.default.join(parent, newName);
19
+ if (currentName === newName) {
20
+ console.log(`✅ Already in PascalCase: ${currentName}`);
21
+ return;
22
+ }
23
+ try {
24
+ fs_1.default.renameSync(targetPath, newPath);
25
+ console.log(`✨ Renamed Kebab → Pascal: ${currentName} ➝ ${newName}`);
26
+ }
27
+ catch (err) {
28
+ const message = err instanceof Error ? err.message : String(err);
29
+ console.error(`❌ Rename failed: ${message}`);
30
+ }
31
+ }
32
+ function camelToPascal(targetPath) {
33
+ const parent = path_1.default.dirname(targetPath);
34
+ const currentName = path_1.default.basename(targetPath);
35
+ const newName = currentName.charAt(0).toUpperCase() + currentName.slice(1);
36
+ const newPath = path_1.default.join(parent, newName);
37
+ if (currentName === newName) {
38
+ console.log(`✅ Already in PascalCase: ${currentName}`);
39
+ return;
40
+ }
41
+ try {
42
+ fs_1.default.renameSync(targetPath, newPath);
43
+ console.log(`✨ Renamed Camel → Pascal: ${currentName} ➝ ${newName}`);
44
+ }
45
+ catch (err) {
46
+ const message = err instanceof Error ? err.message : String(err);
47
+ console.error(`❌ Rename failed: ${message}`);
48
+ }
49
+ }
50
+ function toPascal(targetPath, currentType) {
51
+ if (currentType === "kebab") {
52
+ kebabToPascal(targetPath);
53
+ }
54
+ else if (currentType === "camel") {
55
+ camelToPascal(targetPath);
56
+ }
57
+ else {
58
+ console.log("⚠️ Unsupported case type passed.");
59
+ }
60
+ }
61
+ //# sourceMappingURL=to-pascal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-pascal.js","sourceRoot":"","sources":["../../src/transforms/to-pascal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type CaseType = "camel" | "kebab" | "pascal" | "unknown";
2
+ export type OperationMode = "partial" | "full";
3
+ export interface CaselyConfig {
4
+ path: string;
5
+ file: string[];
6
+ case: CaseType;
7
+ operate: OperationMode;
8
+ dryRun?: boolean;
9
+ }