-
Notifications
You must be signed in to change notification settings - Fork 398
/
Copy pathgenerateComponent.js
51 lines (42 loc) · 1.72 KB
/
generateComponent.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import fs from "fs";
import path from "path";
import process from "process";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
if (args.length < 2) {
console.error("Usage: npm run generate:component <ComponentType> <ComponentName>");
process.exit(1);
}
const [componentType, componentName] = args;
const componentNameLower = componentName.charAt(0).toLowerCase() + componentName.slice(1);
const paths = {
content: path.join(__dirname, "../src/content", componentType, componentName),
tailwind: path.join(__dirname, "../src/tailwind", componentType, componentName),
ts: path.join(__dirname, "../src/ts-default", componentType, componentName),
tsTailwind: path.join(__dirname, "../src/ts-tailwind", componentType, componentName),
demo: path.join(__dirname, "../src/demo", componentType),
constants: path.join(__dirname, "../src/constants/code", componentType),
};
Object.values(paths).forEach((dir) => {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
});
const files = [
path.join(paths.content, `${componentName}.jsx`),
path.join(paths.content, `${componentName}.css`),
path.join(paths.tailwind, `${componentName}.jsx`),
path.join(paths.ts, `${componentName}.tsx`),
path.join(paths.ts, `${componentName}.css`),
path.join(paths.tsTailwind, `${componentName}.tsx`),
path.join(paths.demo, `${componentName}Demo.jsx`),
path.join(paths.constants, `${componentNameLower}Code.js`),
];
files.forEach((file) => {
if (!fs.existsSync(file)) {
fs.writeFileSync(file, "");
}
});
console.log(`Component "${componentName}" structure created successfully under "${componentType}".`);