caselyjs 0.1.1 → 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.
- package/README.md +91 -35
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +33 -0
- package/dist/bin.js.map +1 -0
- package/dist/casely.d.ts +7 -0
- package/dist/casely.js +75 -0
- package/dist/casely.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/case-identifier.d.ts +1 -0
- package/dist/tools/case-identifier.js +16 -0
- package/dist/tools/case-identifier.js.map +1 -0
- package/dist/tools/mutate-case.d.ts +2 -0
- package/dist/tools/mutate-case.js +18 -0
- package/dist/tools/mutate-case.js.map +1 -0
- package/dist/tools/resolver.d.ts +9 -0
- package/dist/tools/resolver.js +34 -0
- package/dist/tools/resolver.js.map +1 -0
- package/dist/transforms/to-camel.d.ts +2 -0
- package/dist/transforms/to-camel.js +61 -0
- package/dist/transforms/to-camel.js.map +1 -0
- package/dist/transforms/to-kebab.d.ts +2 -0
- package/dist/transforms/to-kebab.js +62 -0
- package/dist/transforms/to-kebab.js.map +1 -0
- package/dist/transforms/to-pascal.d.ts +2 -0
- package/dist/transforms/to-pascal.js +61 -0
- package/dist/transforms/to-pascal.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +23 -8
- package/src/bin.ts +36 -0
- package/src/casely.ts +87 -0
- package/src/index.ts +1 -0
- package/src/tools/case-identifier.ts +12 -0
- package/src/tools/mutate-case.ts +24 -0
- package/src/tools/resolver.ts +55 -0
- package/src/transforms/to-camel.ts +70 -0
- package/src/transforms/to-kebab.ts +71 -0
- package/src/transforms/to-pascal.ts +68 -0
- package/src/types.ts +10 -0
- package/test/hello-world/new-world.js +0 -0
- package/test/hello.json +0 -0
- package/test/hello.py +0 -0
- package/test/index.md +0 -0
- package/test/pascal.js +0 -0
- package/test/why-not/why-no/why-no.ts +0 -0
- package/test/why-not/why-not/pascal.js +0 -0
- package/test/world-book.go +0 -0
- package/tsconfig.json +33 -0
- package/casely.js +0 -56
- package/index.js +0 -1
- package/tools/case-identifier.js +0 -10
- package/tools/mutate-case.js +0 -21
- package/tools/resolver.js +0 -36
- package/tools/transforms/to-camel.js +0 -58
- package/tools/transforms/to-kebab.js +0 -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
|
|
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
|
-
|
|
35
|
+
You can now run `caselyjs` directly from your terminal without writing any code.
|
|
18
36
|
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
|
|
37
|
+
```bash
|
|
38
|
+
# Basic usage (defaults to kebab-case and .js, .jsx, .ts, .tsx files)
|
|
39
|
+
caselyjs ./src
|
|
22
40
|
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
37
|
-
case:
|
|
38
|
-
file: [
|
|
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
|
-
>
|
|
48
|
-
>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
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
|
package/dist/bin.js.map
ADDED
|
@@ -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"}
|
package/dist/casely.d.ts
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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,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,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,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,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,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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"}
|
package/dist/types.d.ts
ADDED