-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-form-structure.js
executable file
·156 lines (139 loc) · 5.14 KB
/
create-form-structure.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
console.log(".......................")
console.log("T H E B I G F U D G E")
console.log(".......................")
const fs = require('fs');
const readline = require('readline');
const componentFun = require('./generate-files/generate-component-files');
const formServiceFun = require('./generate-files/generate-form-service');
const apiServiceFun = require('./generate-files/generate-api-service');
const constantFun = require('./generate-files/generate-constant');
const storeFun = require('./generate-files/generate-store');
const keyConfigFun = require('./generate-files/generate-key-config');
const modelFun = require('./generate-files/generate-model');
const effectFun = require('./generate-files/generate-effects');
const fakeFun = require('./generate-files/generate-fake');
const moduleFun = require('./generate-files/generate-module-content');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let keyNames = [];
let keyTypes = [];
rl.question('Enter the number of keys: ', (numberOfKeys) => {
const keysCount = parseInt(numberOfKeys);
if (isNaN(keysCount)) {
console.error('Please enter a valid number.');
rl.close();
return;
}
let count = 0;
const askKeyInfo = () => {
rl.question(`Enter Key Name ${count + 1}: `, (keyName) => {
keyNames.push(keyName);
rl.question(`Enter Key Type for ${keyName}: `, (keyType) => {
keyTypes.push(keyType);
count++;
if (count < numberOfKeys) askKeyInfo();
else {
generateFiles();
rl.close();
}
});
});
};
askKeyInfo();
});
function generateFiles() {
const componentName = process.argv[2];
if (!componentName) {
console.error('Please provide a component name. Example: "get-form-folder-structure abc-def"');
process.exit(1);
}
const parentFolder = `${componentName}-form`;
const folders = ['form-component', 'constants', 'services', 'store', 'models', 'key-config', 'fake-test-data'];
const nestedFolders = {
services: ['api', 'form'],
store: ['effects', 'reducers', 'selectors']
};
const files = {
'form-component': ['component.ts', 'component.spec.ts', 'component.html', 'component.scss'],
constants: ['constants.ts'],
api: ['api.service.ts', 'api.service.spec.ts'],
form: ['form.service.ts', 'form.service.spec.ts'],
store: ['actions.ts', 'state.ts'],
effects: ['effects.ts', 'effects.spec.ts'],
reducers: ['reducers.ts', 'reducers.spec.ts'],
selectors: ['selectors.ts', 'selectors.spec.ts'],
'key-config': ['key-config.ts'],
models: ['form.model.ts'],
'fake-test-data': ['fake.ts']
};
const moduleFiles = ['', '-routing'];
// Function to generate file content
function generateFileContent(folder, file) {
switch (folder) {
case 'form-component':
return componentFun.generateFormComponentContent(file, keyNames, keyTypes);
case 'constants':
return constantFun.generateConstantsContent(file);
case 'store':
return storeFun.generateStoreContent(file);
case 'key-config':
return keyConfigFun.generateKeyConfigContent(file, keyNames);
case 'api':
return apiServiceFun.generateAPIServiceContent(file);
case 'form':
return formServiceFun.generateFormServiceContent(file);
case 'models':
return modelFun.generateModelsContent(file, keyNames, keyTypes);
case 'effects':
return effectFun.generateEffectsContent(file);
case 'module':
return moduleFun.generateModuleContent(file);
case 'fake-test-data':
return fakeFun.generateFakeDataContent(file, keyNames, keyTypes);
default:
return '';
}
}
// Create parent folder
fs.mkdirSync(parentFolder);
// Create subfolders and files
folders.forEach(folder => {
console.log('\x1b[32m%s\x1b[0m', "CREATE ", folder);
const folderPath = `${parentFolder}/${folder}`;
fs.mkdirSync(folderPath);
if (nestedFolders[folder]) {
nestedFolders[folder].forEach(subfolder => {
fs.mkdirSync(`${folderPath}/${subfolder}`);
files[subfolder].forEach(file => {
const content = generateFileContent(subfolder, file);
fs.writeFileSync(`${folderPath}/${subfolder}/${componentName}-${file}`, content);
});
});
}
if (folder === 'form-component') {
files[folder].forEach(file => {
const content = generateFileContent(folder, file);
fs.writeFileSync(`${folderPath}/${componentName}.${file}`, content);
});
}
else if (!nestedFolders[folder]) {
files[folder].forEach(file => {
const content = generateFileContent(folder, file);
fs.writeFileSync(`${folderPath}/${componentName}-${file}`, content);
});
}
if (folder === 'store') {
files[folder].forEach(file => {
const content = generateFileContent(folder, file);
fs.writeFileSync(`${folderPath}/${componentName}.${file}`, content);
});
}
});
// Create module files
moduleFiles.forEach(file => {
const content = generateFileContent('module', file);
fs.writeFileSync(`${parentFolder}/${componentName}${file}.module.ts`, content);
});
}