create-sip 0.16.0 → 1.0.1
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 +84 -0
- package/expressapi/op +21 -14
- package/manager.js +9 -1
- package/package.json +1 -1
- package/utils.js +9 -0
package/README.md
CHANGED
|
@@ -22,6 +22,22 @@ npm create sip@latest
|
|
|
22
22
|
* Write project name.
|
|
23
23
|
* Select project type.
|
|
24
24
|
|
|
25
|
+
Options:
|
|
26
|
+
|
|
27
|
+
```txt
|
|
28
|
+
✔ Project name: … vmi
|
|
29
|
+
? Project type: › - Use arrow-keys. Return to submit.
|
|
30
|
+
Webpage
|
|
31
|
+
Web Bootstrap
|
|
32
|
+
JavaScript
|
|
33
|
+
Web Node.js
|
|
34
|
+
ESBuild JavaScript
|
|
35
|
+
ESBuild TypeScript
|
|
36
|
+
hai mock API
|
|
37
|
+
Express API
|
|
38
|
+
❯ Cancel
|
|
39
|
+
```
|
|
40
|
+
|
|
25
41
|
## Express API
|
|
26
42
|
|
|
27
43
|
Key generation:
|
|
@@ -86,3 +102,71 @@ Generate admin user:
|
|
|
86
102
|
```bash
|
|
87
103
|
node op admin:generate
|
|
88
104
|
```
|
|
105
|
+
|
|
106
|
+
### Copy default config file
|
|
107
|
+
|
|
108
|
+
Copy **config/default.json.example** to **config/default.json** file.
|
|
109
|
+
|
|
110
|
+
### Seed database
|
|
111
|
+
|
|
112
|
+
Load data from JSON or CSV file.
|
|
113
|
+
|
|
114
|
+
Examples:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node op db:seed thing somethings.json
|
|
118
|
+
node op db:seed thing somethings.csv
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
For example JSON file:
|
|
122
|
+
|
|
123
|
+
employees.json:
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
[
|
|
127
|
+
{ "id": 1, "name": "Tom Large" },
|
|
128
|
+
{ "id": 2, "name": "Jack Small" }
|
|
129
|
+
]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The default separator is comma.
|
|
133
|
+
|
|
134
|
+
```cmd
|
|
135
|
+
node op db:seed employee employees.json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
For example CSV file:
|
|
139
|
+
|
|
140
|
+
employees.csv:
|
|
141
|
+
|
|
142
|
+
```csv
|
|
143
|
+
id,name
|
|
144
|
+
1,Joe Kitin
|
|
145
|
+
2,Peter Fall
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
If you have colon separator, use sep parameter.
|
|
149
|
+
|
|
150
|
+
```csv
|
|
151
|
+
id:name
|
|
152
|
+
1:Joe Kitin
|
|
153
|
+
2:Peter Fall
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```cmd
|
|
157
|
+
node op db:seed employee employees.csv --sep :
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
If the file has semicolon separator, use sep parameter, for example:
|
|
161
|
+
|
|
162
|
+
```csv
|
|
163
|
+
id;name
|
|
164
|
+
1;Joe Kitin
|
|
165
|
+
2;Peter Fall
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Use next command:
|
|
169
|
+
|
|
170
|
+
```cmd
|
|
171
|
+
node op db:seed employee employees.csv --sep ";"
|
|
172
|
+
```
|
package/expressapi/op
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import replace from 'replace'
|
|
2
|
-
import fse from 'fs-extra'
|
|
3
|
-
import fsp from 'fs/promises'
|
|
4
|
-
import { generateApiKey } from 'generate-api-key'
|
|
1
|
+
import replace from 'replace';
|
|
2
|
+
import fse from 'fs-extra';
|
|
3
|
+
import fsp from 'fs/promises';
|
|
4
|
+
import { generateApiKey } from 'generate-api-key';
|
|
5
5
|
import bcrypt from 'bcryptjs';
|
|
6
6
|
import path from 'path';
|
|
7
|
-
import { read } from 'read'
|
|
8
|
-
import { start } from 'repl';
|
|
7
|
+
import { read } from 'read';
|
|
9
8
|
|
|
10
9
|
if(process.argv.length == 3 && process.argv[2] == 'help') {
|
|
11
10
|
console.log('Usable commands:');
|
|
@@ -14,7 +13,7 @@ if(process.argv.length == 3 && process.argv[2] == 'help') {
|
|
|
14
13
|
console.log(' node op key:generate');
|
|
15
14
|
console.log(' node op conf:generate');
|
|
16
15
|
console.log(' node op admin:generate');
|
|
17
|
-
console.log(' node op db:seed <model> <filePath>');
|
|
16
|
+
console.log(' node op db:seed <model> <filePath> [sep]');
|
|
18
17
|
process.exit(0);
|
|
19
18
|
} else if(process.argv.length == 3 && process.argv[2] == 'key:generate') {
|
|
20
19
|
startGenerateKey();
|
|
@@ -25,14 +24,23 @@ if(process.argv.length == 3 && process.argv[2] == 'help') {
|
|
|
25
24
|
} else if(process.argv[2] === 'db:seed') {
|
|
26
25
|
if(process.argv.length < 5) {
|
|
27
26
|
console.log('Usage:');
|
|
28
|
-
console.log('node op db:seed <model> <filePath>');
|
|
27
|
+
console.log('node op db:seed <model> <filePath> [sep]');
|
|
29
28
|
console.log('Examples:');
|
|
30
29
|
console.log('node op db:seed thing somethings.json');
|
|
31
30
|
console.log('node op db:seed thing somethings.csv');
|
|
31
|
+
console.log('node op db:seed thing somethings.csv ,');
|
|
32
|
+
console.log('node op db:seed thing somethings.csv :');
|
|
33
|
+
console.log('node op db:seed thing somethings.csv ";"');
|
|
32
34
|
}
|
|
33
35
|
const model = process.argv[3];
|
|
34
36
|
const filePath = process.argv[4];
|
|
35
|
-
|
|
37
|
+
if(process.argv.length == 6) {
|
|
38
|
+
const sep = process.argv[5];
|
|
39
|
+
runSeed(model, filePath, sep);
|
|
40
|
+
}else {
|
|
41
|
+
runSeed(model, filePath);
|
|
42
|
+
}
|
|
43
|
+
|
|
36
44
|
} else if(process.argv[2] === 'make:model') {
|
|
37
45
|
if(process.argv.length < 4) {
|
|
38
46
|
console.log('Usage:');
|
|
@@ -234,8 +242,7 @@ const seedFromJson = async (model, filePath) => {
|
|
|
234
242
|
}
|
|
235
243
|
}
|
|
236
244
|
|
|
237
|
-
const seedFromCsv = async (model, filePath) => {
|
|
238
|
-
const sep = ','
|
|
245
|
+
const seedFromCsv = async (model, filePath, sep) => {
|
|
239
246
|
try {
|
|
240
247
|
const data = await fsp.readFile(filePath, 'utf8')
|
|
241
248
|
const clearData = data.replace(/"/g, '').trim()
|
|
@@ -260,10 +267,10 @@ const seedFromCsv = async (model, filePath) => {
|
|
|
260
267
|
}
|
|
261
268
|
}
|
|
262
269
|
|
|
263
|
-
async function runSeed(model, filePath) {
|
|
270
|
+
async function runSeed(model, filePath, sep=',') {
|
|
264
271
|
|
|
265
272
|
if(!filePath || !model) {
|
|
266
|
-
console.log('Usage: node seed.js <modelName> <filePath>')
|
|
273
|
+
console.log('Usage: node seed.js <modelName> <filePath> [sep]')
|
|
267
274
|
process.exit(1)
|
|
268
275
|
}
|
|
269
276
|
|
|
@@ -299,7 +306,7 @@ async function runSeed(model, filePath) {
|
|
|
299
306
|
await sequelize.sync({ force: true })
|
|
300
307
|
await sequelize.authenticate()
|
|
301
308
|
if(ext === '.csv') {
|
|
302
|
-
await seedFromCsv(modelObject, filePath)
|
|
309
|
+
await seedFromCsv(modelObject, filePath, sep)
|
|
303
310
|
}else {
|
|
304
311
|
await seedFromJson(modelObject, filePath)
|
|
305
312
|
}
|
package/manager.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
const { copyDir, updatePackageName } = require('./utils');
|
|
1
|
+
const { copyDir, updatePackageName, checkIfDirExists } = require('./utils');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const dir = path.join(__dirname);
|
|
4
4
|
|
|
5
5
|
const genWebpage = (target) => {
|
|
6
|
+
checkIfDirExists(target);
|
|
6
7
|
copyDir(`${dir}/webpage`, target);
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
const genBootstrap = (target) => {
|
|
11
|
+
checkIfDirExists(target);
|
|
10
12
|
copyDir(`${dir}/webbootstrap`, target);
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
const genJavascript = (target) => {
|
|
16
|
+
checkIfDirExists(target);
|
|
14
17
|
copyDir(`${dir}/javascript`, target);
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
const genNodejs = (target) => {
|
|
21
|
+
checkIfDirExists(target);
|
|
18
22
|
copyDir(`${dir}/webnodejs`, target);
|
|
19
23
|
updatePackageName(`${target}/package.json`, target);
|
|
20
24
|
console.log('Web client created');
|
|
@@ -25,6 +29,7 @@ const genNodejs = (target) => {
|
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
const genWebEsbuildJs = (target) => {
|
|
32
|
+
checkIfDirExists(target);
|
|
28
33
|
copyDir(`${dir}/webesbuildjs`, target);
|
|
29
34
|
updatePackageName(`${target}/package.json`, target);
|
|
30
35
|
console.log('ESBuild client created with Javascript');
|
|
@@ -38,6 +43,7 @@ const genWebEsbuildJs = (target) => {
|
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
const genWebEsbuildTs = (target) => {
|
|
46
|
+
checkIfDirExists(target);
|
|
41
47
|
copyDir(`${dir}/webesbuildts`, target);
|
|
42
48
|
updatePackageName(`${target}/package.json`, target);
|
|
43
49
|
console.log('ESBuild client created with Typescript');
|
|
@@ -51,6 +57,7 @@ const genWebEsbuildTs = (target) => {
|
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
const genMockApi = (target) => {
|
|
60
|
+
checkIfDirExists(target);
|
|
54
61
|
copyDir(`${dir}/mockapi`, target);
|
|
55
62
|
updatePackageName(`${target}/package.json`, target);
|
|
56
63
|
console.log('MockAPI with hai-server 0.0.4');
|
|
@@ -61,6 +68,7 @@ const genMockApi = (target) => {
|
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
const genExpressApi = (target) => {
|
|
71
|
+
checkIfDirExists(target);
|
|
64
72
|
copyDir(`${dir}/expressapi`, target);
|
|
65
73
|
updatePackageName(`${target}/package.json`, target);
|
|
66
74
|
console.log('ExpressJS REST API skeleton created');
|
package/package.json
CHANGED
package/utils.js
CHANGED
|
@@ -24,7 +24,16 @@ const copyDir = (srcDir, destDir) => {
|
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
const checkIfDirExists = (dirPath) => {
|
|
28
|
+
if (fs.existsSync(dirPath)) {
|
|
29
|
+
console.error('Error!');
|
|
30
|
+
console.error(`Directory already exists: ${dirPath}`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
27
35
|
module.exports = {
|
|
28
36
|
updatePackageName,
|
|
29
37
|
copyDir,
|
|
38
|
+
checkIfDirExists
|
|
30
39
|
};
|