@foal/cli 2.10.2 → 3.0.0-alpha.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/lib/create-secret/create-secret.js +1 -1
- package/lib/generate/file-system.js +47 -47
- package/lib/generate/generators/angular/connect-angular.js +11 -12
- package/lib/generate/generators/app/create-app.js +11 -12
- package/lib/generate/generators/controller/create-controller.js +4 -4
- package/lib/generate/generators/entity/create-entity.js +2 -2
- package/lib/generate/generators/hook/create-hook.js +2 -2
- package/lib/generate/generators/index.d.ts +0 -1
- package/lib/generate/generators/index.js +5 -2
- package/lib/generate/generators/react/connect-react.js +3 -3
- package/lib/generate/generators/rest-api/create-rest-api.js +9 -5
- package/lib/generate/generators/script/create-script.js +1 -1
- package/lib/generate/generators/service/create-service.js +2 -2
- package/lib/generate/generators/vue/connect-vue.js +4 -4
- package/lib/generate/index.js +5 -1
- package/lib/generate/templates/app/.eslintrc.js +13 -14
- package/lib/generate/templates/app/package.json +17 -17
- package/lib/generate/templates/app/package.mongodb.json +13 -13
- package/lib/generate/templates/app/package.mongodb.yaml.json +13 -13
- package/lib/generate/templates/app/package.yaml.json +17 -17
- package/lib/generate/templates/app/src/app/app.controller.ts +0 -5
- package/lib/generate/templates/app/src/app/entities/user.entity.mongodb.ts +3 -14
- package/lib/generate/templates/app/src/app/entities/user.entity.ts +1 -12
- package/lib/generate/templates/app/src/db.ts +24 -0
- package/lib/generate/templates/app/src/e2e/index.ts +10 -2
- package/lib/generate/templates/app/src/index.ts +3 -0
- package/lib/generate/templates/app/src/scripts/create-user.ts +9 -13
- package/lib/generate/templates/app/tsconfig.json +3 -3
- package/lib/generate/templates/entity/entity.mongodb.ts +3 -3
- package/lib/generate/templates/rest-api/controllers/controller.auth.ts +15 -16
- package/lib/generate/templates/rest-api/controllers/controller.spec.auth.ts +27 -21
- package/lib/generate/templates/rest-api/controllers/controller.spec.ts +24 -16
- package/lib/generate/templates/rest-api/controllers/controller.ts +9 -10
- package/lib/generate/templates/script/script.ts +4 -14
- package/lib/generate/utils/init-git-repo.js +2 -2
- package/lib/generate/utils/mkdir-if-does-not-exist.js +2 -2
- package/lib/generate/utils/rm-dir-and-files-if-exist.js +6 -6
- package/lib/index.js +41 -41
- package/lib/rmdir/rmdir.util.js +5 -5
- package/lib/run-script/run-script.js +7 -7
- package/package.json +12 -12
- package/lib/generate/generators/vscode-config/create-vscode-config.d.ts +0 -1
- package/lib/generate/generators/vscode-config/create-vscode-config.js +0 -15
- package/lib/generate/generators/vscode-config/index.d.ts +0 -1
- package/lib/generate/generators/vscode-config/index.js +0 -5
- package/lib/generate/templates/app/ormconfig.js +0 -21
- package/lib/generate/templates/app/src/scripts/create-user.mongodb.ts +0 -38
- package/lib/generate/templates/vscode-config/launch.json +0 -54
- package/lib/generate/templates/vscode-config/tasks.json +0 -25
|
@@ -7,14 +7,16 @@ import {
|
|
|
7
7
|
isHttpResponseCreated, isHttpResponseNoContent,
|
|
8
8
|
isHttpResponseNotFound, isHttpResponseOK
|
|
9
9
|
} from '@foal/core';
|
|
10
|
-
import {
|
|
10
|
+
import { DataSource } from 'typeorm';
|
|
11
11
|
|
|
12
12
|
// App
|
|
13
13
|
import { /* upperFirstCamelName */, User } from '/* entitiesPath */';
|
|
14
|
+
import { createDataSource } from '/* createDataSourcePath */';
|
|
14
15
|
import { /* upperFirstCamelName */Controller } from './/* kebabName */.controller';
|
|
15
16
|
|
|
16
17
|
describe('/* upperFirstCamelName */Controller', () => {
|
|
17
18
|
|
|
19
|
+
let dataSource: DataSource;
|
|
18
20
|
let controller: /* upperFirstCamelName */Controller;
|
|
19
21
|
let /* camelName */0: /* upperFirstCamelName */;
|
|
20
22
|
let /* camelName */1: /* upperFirstCamelName */;
|
|
@@ -22,25 +24,29 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
22
24
|
let user1: User;
|
|
23
25
|
let user2: User;
|
|
24
26
|
|
|
25
|
-
before(() =>
|
|
27
|
+
before(async () => {
|
|
28
|
+
dataSource = createDataSource();
|
|
29
|
+
await dataSource.initialize();
|
|
30
|
+
});
|
|
26
31
|
|
|
27
|
-
after(() =>
|
|
32
|
+
after(async () => {
|
|
33
|
+
if (dataSource) {
|
|
34
|
+
await dataSource.destroy();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
28
37
|
|
|
29
38
|
beforeEach(async () => {
|
|
30
39
|
controller = createController(/* upperFirstCamelName */Controller);
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
await /* camelName */Repository.clear();
|
|
36
|
-
await userRepository.clear();
|
|
41
|
+
await /* upperFirstCamelName */.clear();
|
|
42
|
+
await User.clear();
|
|
37
43
|
|
|
38
|
-
[ user1, user2 ] = await
|
|
44
|
+
[ user1, user2 ] = await User.save([
|
|
39
45
|
{},
|
|
40
46
|
{},
|
|
41
47
|
]);
|
|
42
48
|
|
|
43
|
-
[ /* camelName */0, /* camelName */1, /* camelName */2 ] = await /*
|
|
49
|
+
[ /* camelName */0, /* camelName */1, /* camelName */2 ] = await /* upperFirstCamelName */.save([
|
|
44
50
|
{
|
|
45
51
|
owner: user1,
|
|
46
52
|
text: '/* upperFirstCamelName */ 0',
|
|
@@ -82,7 +88,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
82
88
|
});
|
|
83
89
|
|
|
84
90
|
it('should support pagination', async () => {
|
|
85
|
-
const /* camelName */3 = await
|
|
91
|
+
const /* camelName */3 = await /* upperFirstCamelName */.save({
|
|
86
92
|
owner: user2,
|
|
87
93
|
text: '/* upperFirstCamelName */ 3',
|
|
88
94
|
});
|
|
@@ -191,8 +197,8 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
191
197
|
throw new Error('The returned value should be an HttpResponseCreated object.');
|
|
192
198
|
}
|
|
193
199
|
|
|
194
|
-
const /* camelName */ = await
|
|
195
|
-
relations:
|
|
200
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOne({
|
|
201
|
+
relations: { owner: true },
|
|
196
202
|
where: { text: '/* upperFirstCamelName */ 3' },
|
|
197
203
|
});
|
|
198
204
|
|
|
@@ -232,7 +238,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
232
238
|
throw new Error('The returned value should be an HttpResponseOK object.');
|
|
233
239
|
}
|
|
234
240
|
|
|
235
|
-
const /* camelName */ = await
|
|
241
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
236
242
|
|
|
237
243
|
if (!/* camelName */) {
|
|
238
244
|
throw new Error();
|
|
@@ -256,7 +262,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
256
262
|
ctx.user = user2;
|
|
257
263
|
await controller.modify/* upperFirstCamelName */(ctx);
|
|
258
264
|
|
|
259
|
-
const /* camelName */ = await
|
|
265
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
260
266
|
|
|
261
267
|
if (!/* camelName */) {
|
|
262
268
|
throw new Error();
|
|
@@ -324,7 +330,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
324
330
|
throw new Error('The returned value should be an HttpResponseOK object.');
|
|
325
331
|
}
|
|
326
332
|
|
|
327
|
-
const /* camelName */ = await
|
|
333
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
328
334
|
|
|
329
335
|
if (!/* camelName */) {
|
|
330
336
|
throw new Error();
|
|
@@ -348,7 +354,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
348
354
|
ctx.user = user2;
|
|
349
355
|
await controller.replace/* upperFirstCamelName */(ctx);
|
|
350
356
|
|
|
351
|
-
const /* camelName */ = await
|
|
357
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
352
358
|
|
|
353
359
|
if (!/* camelName */) {
|
|
354
360
|
throw new Error();
|
|
@@ -413,9 +419,9 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
413
419
|
throw new Error('The returned value should be an HttpResponseNoContent object.');
|
|
414
420
|
}
|
|
415
421
|
|
|
416
|
-
const /* camelName */ = await
|
|
422
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
417
423
|
|
|
418
|
-
strictEqual(/* camelName */,
|
|
424
|
+
strictEqual(/* camelName */, null);
|
|
419
425
|
});
|
|
420
426
|
|
|
421
427
|
it('should not delete the other /* camelName */s.', async () => {
|
|
@@ -431,9 +437,9 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
431
437
|
throw new Error('The returned value should be an HttpResponseNoContent object.');
|
|
432
438
|
}
|
|
433
439
|
|
|
434
|
-
const /* camelName */ = await
|
|
440
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
435
441
|
|
|
436
|
-
notStrictEqual(/* camelName */,
|
|
442
|
+
notStrictEqual(/* camelName */, null);
|
|
437
443
|
});
|
|
438
444
|
|
|
439
445
|
it('should return an HttpResponseNotFound if the /* camelName */ was not found.', async () => {
|
|
@@ -7,28 +7,36 @@ import {
|
|
|
7
7
|
isHttpResponseCreated, isHttpResponseNoContent,
|
|
8
8
|
isHttpResponseNotFound, isHttpResponseOK
|
|
9
9
|
} from '@foal/core';
|
|
10
|
-
import {
|
|
10
|
+
import { DataSource } from 'typeorm';
|
|
11
11
|
|
|
12
12
|
// App
|
|
13
13
|
import { /* upperFirstCamelName */ } from '/* entitiesPath */';
|
|
14
|
+
import { createDataSource } from '/* createDataSourcePath */';
|
|
14
15
|
import { /* upperFirstCamelName */Controller } from './/* kebabName */.controller';
|
|
15
16
|
|
|
16
17
|
describe('/* upperFirstCamelName */Controller', () => {
|
|
17
18
|
|
|
19
|
+
let dataSource: DataSource;
|
|
18
20
|
let controller: /* upperFirstCamelName */Controller;
|
|
19
21
|
let /* camelName */1: /* upperFirstCamelName */;
|
|
20
22
|
let /* camelName */2: /* upperFirstCamelName */;
|
|
21
23
|
|
|
22
|
-
before(() =>
|
|
24
|
+
before(async () => {
|
|
25
|
+
dataSource = createDataSource();
|
|
26
|
+
await dataSource.initialize();
|
|
27
|
+
});
|
|
23
28
|
|
|
24
|
-
after(() =>
|
|
29
|
+
after(async () => {
|
|
30
|
+
if (dataSource) {
|
|
31
|
+
await dataSource.destroy();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
25
34
|
|
|
26
35
|
beforeEach(async () => {
|
|
27
36
|
controller = createController(/* upperFirstCamelName */Controller);
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
await
|
|
31
|
-
[ /* camelName */1, /* camelName */2 ] = await repository.save([
|
|
38
|
+
await /* upperFirstCamelName */.clear();
|
|
39
|
+
[ /* camelName */1, /* camelName */2 ] = await /* upperFirstCamelName */.save([
|
|
32
40
|
{
|
|
33
41
|
text: '/* upperFirstCamelName */ 1'
|
|
34
42
|
},
|
|
@@ -63,7 +71,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
63
71
|
});
|
|
64
72
|
|
|
65
73
|
it('should support pagination', async () => {
|
|
66
|
-
const /* camelName */3 = await
|
|
74
|
+
const /* camelName */3 = await /* upperFirstCamelName */.save({
|
|
67
75
|
text: '/* upperFirstCamelName */ 3',
|
|
68
76
|
});
|
|
69
77
|
|
|
@@ -152,7 +160,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
152
160
|
throw new Error('The returned value should be an HttpResponseCreated object.');
|
|
153
161
|
}
|
|
154
162
|
|
|
155
|
-
const /* camelName */ = await
|
|
163
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ text: '/* upperFirstCamelName */ 3' });
|
|
156
164
|
|
|
157
165
|
if (!/* camelName */) {
|
|
158
166
|
throw new Error('No /* camelName */ 3 was found in the database.');
|
|
@@ -188,7 +196,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
188
196
|
throw new Error('The returned value should be an HttpResponseOK object.');
|
|
189
197
|
}
|
|
190
198
|
|
|
191
|
-
const /* camelName */ = await
|
|
199
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
192
200
|
|
|
193
201
|
if (!/* camelName */) {
|
|
194
202
|
throw new Error();
|
|
@@ -211,7 +219,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
211
219
|
});
|
|
212
220
|
await controller.modify/* upperFirstCamelName */(ctx);
|
|
213
221
|
|
|
214
|
-
const /* camelName */ = await
|
|
222
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
215
223
|
|
|
216
224
|
if (!/* camelName */) {
|
|
217
225
|
throw new Error();
|
|
@@ -260,7 +268,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
260
268
|
throw new Error('The returned value should be an HttpResponseOK object.');
|
|
261
269
|
}
|
|
262
270
|
|
|
263
|
-
const /* camelName */ = await
|
|
271
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
264
272
|
|
|
265
273
|
if (!/* camelName */) {
|
|
266
274
|
throw new Error();
|
|
@@ -283,7 +291,7 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
283
291
|
});
|
|
284
292
|
await controller.replace/* upperFirstCamelName */(ctx);
|
|
285
293
|
|
|
286
|
-
const /* camelName */ = await
|
|
294
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
287
295
|
|
|
288
296
|
if (!/* camelName */) {
|
|
289
297
|
throw new Error();
|
|
@@ -329,9 +337,9 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
329
337
|
throw new Error('The returned value should be an HttpResponseNoContent object.');
|
|
330
338
|
}
|
|
331
339
|
|
|
332
|
-
const /* camelName */ = await
|
|
340
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
|
|
333
341
|
|
|
334
|
-
strictEqual(/* camelName */,
|
|
342
|
+
strictEqual(/* camelName */, null);
|
|
335
343
|
});
|
|
336
344
|
|
|
337
345
|
it('should not delete the other /* camelName */s.', async () => {
|
|
@@ -346,9 +354,9 @@ describe('/* upperFirstCamelName */Controller', () => {
|
|
|
346
354
|
throw new Error('The returned value should be an HttpResponseNoContent object.');
|
|
347
355
|
}
|
|
348
356
|
|
|
349
|
-
const /* camelName */ = await
|
|
357
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
|
|
350
358
|
|
|
351
|
-
notStrictEqual(/* camelName */,
|
|
359
|
+
notStrictEqual(/* camelName */, null);
|
|
352
360
|
});
|
|
353
361
|
|
|
354
362
|
it('should return an HttpResponseNotFound if the /* camelName */ was not found.', async () => {
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
HttpResponseNoContent, HttpResponseNotFound, HttpResponseOK, Patch, Post,
|
|
5
5
|
Put, ValidateBody, ValidatePathParam, ValidateQueryParam
|
|
6
6
|
} from '@foal/core';
|
|
7
|
-
import { getRepository } from 'typeorm';
|
|
8
7
|
|
|
9
8
|
import { /* upperFirstCamelName */ } from '/* entitiesPath */';
|
|
10
9
|
|
|
@@ -32,7 +31,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
32
31
|
@ValidateQueryParam('skip', { type: 'number' }, { required: false })
|
|
33
32
|
@ValidateQueryParam('take', { type: 'number' }, { required: false })
|
|
34
33
|
async find/* upperFirstCamelName */s(ctx: Context) {
|
|
35
|
-
const /* camelName */s = await
|
|
34
|
+
const /* camelName */s = await /* upperFirstCamelName */.find({
|
|
36
35
|
skip: ctx.request.query.skip,
|
|
37
36
|
take: ctx.request.query.take,
|
|
38
37
|
where: {},
|
|
@@ -47,7 +46,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
47
46
|
@ApiResponse(200, { description: 'Returns the /* camelName */.' })
|
|
48
47
|
@ValidatePathParam('/* camelName */Id', { type: 'number' })
|
|
49
48
|
async find/* upperFirstCamelName */ById(ctx: Context) {
|
|
50
|
-
const /* camelName */ = await
|
|
49
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: ctx.request.params./* camelName */Id });
|
|
51
50
|
|
|
52
51
|
if (!/* camelName */) {
|
|
53
52
|
return new HttpResponseNotFound();
|
|
@@ -63,7 +62,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
63
62
|
@ApiResponse(201, { description: '/* upperFirstCamelName */ successfully created. Returns the /* camelName */.' })
|
|
64
63
|
@ValidateBody(/* camelName */Schema)
|
|
65
64
|
async create/* upperFirstCamelName */(ctx: Context) {
|
|
66
|
-
const /* camelName */ = await
|
|
65
|
+
const /* camelName */ = await /* upperFirstCamelName */.save(ctx.request.body);
|
|
67
66
|
return new HttpResponseCreated(/* camelName */);
|
|
68
67
|
}
|
|
69
68
|
|
|
@@ -76,7 +75,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
76
75
|
@ValidatePathParam('/* camelName */Id', { type: 'number' })
|
|
77
76
|
@ValidateBody({ .../* camelName */Schema, required: [] })
|
|
78
77
|
async modify/* upperFirstCamelName */(ctx: Context) {
|
|
79
|
-
const /* camelName */ = await
|
|
78
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: ctx.request.params./* camelName */Id });
|
|
80
79
|
|
|
81
80
|
if (!/* camelName */) {
|
|
82
81
|
return new HttpResponseNotFound();
|
|
@@ -84,7 +83,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
84
83
|
|
|
85
84
|
Object.assign(/* camelName */, ctx.request.body);
|
|
86
85
|
|
|
87
|
-
await
|
|
86
|
+
await /* upperFirstCamelName */.save(/* camelName */);
|
|
88
87
|
|
|
89
88
|
return new HttpResponseOK(/* camelName */);
|
|
90
89
|
}
|
|
@@ -98,7 +97,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
98
97
|
@ValidatePathParam('/* camelName */Id', { type: 'number' })
|
|
99
98
|
@ValidateBody(/* camelName */Schema)
|
|
100
99
|
async replace/* upperFirstCamelName */(ctx: Context) {
|
|
101
|
-
const /* camelName */ = await
|
|
100
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: ctx.request.params./* camelName */Id });
|
|
102
101
|
|
|
103
102
|
if (!/* camelName */) {
|
|
104
103
|
return new HttpResponseNotFound();
|
|
@@ -106,7 +105,7 @@ export class /* upperFirstCamelName */Controller {
|
|
|
106
105
|
|
|
107
106
|
Object.assign(/* camelName */, ctx.request.body);
|
|
108
107
|
|
|
109
|
-
await
|
|
108
|
+
await /* upperFirstCamelName */.save(/* camelName */);
|
|
110
109
|
|
|
111
110
|
return new HttpResponseOK(/* camelName */);
|
|
112
111
|
}
|
|
@@ -118,13 +117,13 @@ export class /* upperFirstCamelName */Controller {
|
|
|
118
117
|
@ApiResponse(204, { description: '/* upperFirstCamelName */ successfully deleted.' })
|
|
119
118
|
@ValidatePathParam('/* camelName */Id', { type: 'number' })
|
|
120
119
|
async delete/* upperFirstCamelName */(ctx: Context) {
|
|
121
|
-
const /* camelName */ = await
|
|
120
|
+
const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: ctx.request.params./* camelName */Id });
|
|
122
121
|
|
|
123
122
|
if (!/* camelName */) {
|
|
124
123
|
return new HttpResponseNotFound();
|
|
125
124
|
}
|
|
126
125
|
|
|
127
|
-
await
|
|
126
|
+
await /* upperFirstCamelName */.delete({ id: ctx.request.params./* camelName */Id });
|
|
128
127
|
|
|
129
128
|
return new HttpResponseNoContent();
|
|
130
129
|
}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
// 3p
|
|
2
|
-
import { createConnection } from 'typeorm';
|
|
3
|
-
|
|
4
1
|
export const schema = {
|
|
5
2
|
additionalProperties: false,
|
|
6
3
|
properties: {
|
|
7
|
-
|
|
4
|
+
|
|
8
5
|
},
|
|
9
|
-
required: [
|
|
6
|
+
required: [
|
|
7
|
+
|
|
8
|
+
],
|
|
10
9
|
type: 'object',
|
|
11
10
|
};
|
|
12
11
|
|
|
13
12
|
export async function main(args: any) {
|
|
14
|
-
const connection = await createConnection();
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
// Do something.
|
|
18
13
|
|
|
19
|
-
} catch (error: any) {
|
|
20
|
-
console.error(error);
|
|
21
|
-
} finally {
|
|
22
|
-
await connection.close();
|
|
23
|
-
}
|
|
24
14
|
}
|
|
@@ -7,7 +7,7 @@ const child_process_1 = require("child_process");
|
|
|
7
7
|
async function initGitRepo(root) {
|
|
8
8
|
function execute(args) {
|
|
9
9
|
return new Promise((resolve, reject) => {
|
|
10
|
-
child_process_1.spawn('git', args, { cwd: root, shell: true })
|
|
10
|
+
(0, child_process_1.spawn)('git', args, { cwd: root, shell: true })
|
|
11
11
|
.on('close', (code) => code === 0 ? resolve() : reject(code));
|
|
12
12
|
});
|
|
13
13
|
}
|
|
@@ -27,7 +27,7 @@ async function initGitRepo(root) {
|
|
|
27
27
|
await execute(['add', '.']);
|
|
28
28
|
await execute(['commit', '-m "Initial commit"']);
|
|
29
29
|
}
|
|
30
|
-
catch
|
|
30
|
+
catch {
|
|
31
31
|
console.log(' Initialization of git failed.');
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -8,8 +8,8 @@ function mkdirIfDoesNotExist(path) {
|
|
|
8
8
|
const paths2 = [];
|
|
9
9
|
while (paths.length > 0) {
|
|
10
10
|
paths2.push(paths.shift());
|
|
11
|
-
if (!fs_1.existsSync(paths2.join('/'))) {
|
|
12
|
-
fs_1.mkdirSync(paths2.join('/'));
|
|
11
|
+
if (!(0, fs_1.existsSync)(paths2.join('/'))) {
|
|
12
|
+
(0, fs_1.mkdirSync)(paths2.join('/'));
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -5,19 +5,19 @@ exports.rmDirAndFilesIfExist = void 0;
|
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
7
|
function rmDirAndFilesIfExist(path) {
|
|
8
|
-
if (!fs_1.existsSync(path)) {
|
|
8
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
-
const files = fs_1.readdirSync(path);
|
|
11
|
+
const files = (0, fs_1.readdirSync)(path);
|
|
12
12
|
for (const file of files) {
|
|
13
|
-
const stats = fs_1.statSync(path_1.join(path, file));
|
|
13
|
+
const stats = (0, fs_1.statSync)((0, path_1.join)(path, file));
|
|
14
14
|
if (stats.isDirectory()) {
|
|
15
|
-
rmDirAndFilesIfExist(path_1.join(path, file));
|
|
15
|
+
rmDirAndFilesIfExist((0, path_1.join)(path, file));
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
fs_1.unlinkSync(path_1.join(path, file));
|
|
18
|
+
(0, fs_1.unlinkSync)((0, path_1.join)(path, file));
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
fs_1.rmdirSync(path);
|
|
21
|
+
(0, fs_1.rmdirSync)(path);
|
|
22
22
|
}
|
|
23
23
|
exports.rmDirAndFilesIfExist = rmDirAndFilesIfExist;
|
package/lib/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
// 3p
|
|
10
10
|
const safe_1 = require("colors/safe");
|
|
11
|
-
const
|
|
11
|
+
const commander_1 = require("commander");
|
|
12
12
|
// FoalTS
|
|
13
13
|
const create_secret_1 = require("./create-secret");
|
|
14
14
|
const generate_1 = require("./generate");
|
|
@@ -17,23 +17,24 @@ const rmdir_1 = require("./rmdir");
|
|
|
17
17
|
const run_script_1 = require("./run-script");
|
|
18
18
|
function displayError(...lines) {
|
|
19
19
|
console.error();
|
|
20
|
-
lines.forEach(line => console.error(safe_1.red(line)));
|
|
20
|
+
lines.forEach(line => console.error((0, safe_1.red)(line)));
|
|
21
21
|
console.error();
|
|
22
22
|
process.exitCode = 1;
|
|
23
23
|
}
|
|
24
24
|
// tslint:disable-next-line:no-var-requires
|
|
25
25
|
const pkg = require('../package.json');
|
|
26
|
-
program
|
|
26
|
+
commander_1.program
|
|
27
27
|
.version(pkg.version, '-v, --version');
|
|
28
|
-
program
|
|
29
|
-
.command('createapp
|
|
28
|
+
commander_1.program
|
|
29
|
+
.command('createapp')
|
|
30
|
+
.argument('<name>', 'Name of the application')
|
|
30
31
|
.description('Create a new project.')
|
|
31
32
|
.option('-G, --no-git', 'Don\'t initialize a git repository')
|
|
32
33
|
.option('-I, --no-install', 'Don\'t autoinstall packages using yarn or npm (uses first available)')
|
|
33
34
|
.option('-m, --mongodb', 'Generate a new project using MongoDB instead of SQLite', false)
|
|
34
35
|
.option('-y, --yaml', 'Generate a new project using YAML configuration instead of JSON', false)
|
|
35
36
|
.action((name, options) => {
|
|
36
|
-
generate_1.createApp({
|
|
37
|
+
(0, generate_1.createApp)({
|
|
37
38
|
autoInstall: options.install,
|
|
38
39
|
initRepo: options.git,
|
|
39
40
|
mongodb: options.mongodb,
|
|
@@ -41,19 +42,22 @@ program
|
|
|
41
42
|
yaml: options.yaml
|
|
42
43
|
});
|
|
43
44
|
});
|
|
44
|
-
program
|
|
45
|
+
commander_1.program
|
|
45
46
|
.command('createsecret')
|
|
46
47
|
.description('Create a 256-bit random secret encoded in base64.')
|
|
47
|
-
.action(() => create_secret_1.createSecret().then(secret => console.log(secret)));
|
|
48
|
-
program
|
|
49
|
-
.command('run
|
|
48
|
+
.action(() => (0, create_secret_1.createSecret)().then(secret => console.log(secret)));
|
|
49
|
+
commander_1.program
|
|
50
|
+
.command('run')
|
|
51
|
+
.argument('<name>', 'Name of the script to run')
|
|
50
52
|
.alias('run-script')
|
|
51
53
|
.description('Run a shell script.')
|
|
52
54
|
.action((name) => {
|
|
53
|
-
run_script_1.runScript({ name }, process.argv);
|
|
55
|
+
(0, run_script_1.runScript)({ name }, process.argv);
|
|
54
56
|
});
|
|
55
|
-
program
|
|
56
|
-
.command('connect
|
|
57
|
+
commander_1.program
|
|
58
|
+
.command('connect')
|
|
59
|
+
.argument('<framework>', 'Frontend framework to connect to')
|
|
60
|
+
.argument('<path>', 'Path to the frontend project')
|
|
57
61
|
.description('Configure your frontend to interact with your application.')
|
|
58
62
|
.addHelpText('after', `
|
|
59
63
|
Available frameworks:
|
|
@@ -64,23 +68,25 @@ Available frameworks:
|
|
|
64
68
|
.action(async (framework, path) => {
|
|
65
69
|
switch (framework) {
|
|
66
70
|
case 'angular':
|
|
67
|
-
generate_1.connectAngular(path);
|
|
71
|
+
(0, generate_1.connectAngular)(path);
|
|
68
72
|
break;
|
|
69
73
|
case 'react':
|
|
70
|
-
generate_1.connectReact(path);
|
|
74
|
+
(0, generate_1.connectReact)(path);
|
|
71
75
|
break;
|
|
72
76
|
case 'vue':
|
|
73
|
-
generate_1.connectVue(path);
|
|
77
|
+
(0, generate_1.connectVue)(path);
|
|
74
78
|
break;
|
|
75
79
|
default:
|
|
76
|
-
displayError(`Unknown framework ${safe_1.yellow(framework)}. Please provide a valid one:`, '', ' - angular', ' - react', ' - vue');
|
|
80
|
+
displayError(`Unknown framework ${(0, safe_1.yellow)(framework)}. Please provide a valid one:`, '', ' - angular', ' - react', ' - vue');
|
|
77
81
|
}
|
|
78
82
|
});
|
|
79
83
|
const generateTypes = [
|
|
80
|
-
'controller', 'entity', 'rest-api', 'hook', 'script', 'service'
|
|
84
|
+
'controller', 'entity', 'rest-api', 'hook', 'script', 'service'
|
|
81
85
|
];
|
|
82
|
-
program
|
|
83
|
-
.command('generate
|
|
86
|
+
commander_1.program
|
|
87
|
+
.command('generate')
|
|
88
|
+
.argument('<type>', 'Type of the file to generate')
|
|
89
|
+
.argument('<name>', 'Name of the file to generate')
|
|
84
90
|
.description('Generate and/or modify files.')
|
|
85
91
|
.option('-r, --register', 'Register the controller into app.controller.ts (only available if type=controller|rest-api)', false)
|
|
86
92
|
.option('-a, --auth', 'Add an owner to the entities of the generated REST API (only available if type=rest-api)', false)
|
|
@@ -90,35 +96,28 @@ Available types:
|
|
|
90
96
|
${generateTypes.map(t => ` - ${t}`).join('\n')}
|
|
91
97
|
`)
|
|
92
98
|
.action(async (type, name, options) => {
|
|
93
|
-
if (!name && type !== 'vscode-config') {
|
|
94
|
-
displayError(`Argument "name" is required when creating a ${type}. Please provide one.`);
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
99
|
try {
|
|
98
100
|
switch (type) {
|
|
99
101
|
case 'controller':
|
|
100
|
-
generate_1.createController({ name, register: options.register });
|
|
102
|
+
(0, generate_1.createController)({ name, register: options.register });
|
|
101
103
|
break;
|
|
102
104
|
case 'entity':
|
|
103
|
-
generate_1.createEntity({ name });
|
|
105
|
+
(0, generate_1.createEntity)({ name });
|
|
104
106
|
break;
|
|
105
107
|
case 'rest-api':
|
|
106
|
-
generate_1.createRestApi({ name, register: options.register, auth: options.auth });
|
|
108
|
+
(0, generate_1.createRestApi)({ name, register: options.register, auth: options.auth });
|
|
107
109
|
break;
|
|
108
110
|
case 'hook':
|
|
109
|
-
generate_1.createHook({ name });
|
|
111
|
+
(0, generate_1.createHook)({ name });
|
|
110
112
|
break;
|
|
111
113
|
case 'script':
|
|
112
|
-
generate_1.createScript({ name });
|
|
114
|
+
(0, generate_1.createScript)({ name });
|
|
113
115
|
break;
|
|
114
116
|
case 'service':
|
|
115
|
-
generate_1.createService({ name });
|
|
116
|
-
break;
|
|
117
|
-
case 'vscode-config':
|
|
118
|
-
generate_1.createVSCodeConfig();
|
|
117
|
+
(0, generate_1.createService)({ name });
|
|
119
118
|
break;
|
|
120
119
|
default:
|
|
121
|
-
displayError(`Unknown type ${safe_1.yellow(type)}. Please provide a valid one:`, '', ...generateTypes.map(t => ` - ${t}`));
|
|
120
|
+
displayError(`Unknown type ${(0, safe_1.yellow)(type)}. Please provide a valid one:`, '', ...generateTypes.map(t => ` - ${t}`));
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
123
|
catch (error) {
|
|
@@ -129,12 +128,13 @@ ${generateTypes.map(t => ` - ${t}`).join('\n')}
|
|
|
129
128
|
throw error;
|
|
130
129
|
}
|
|
131
130
|
});
|
|
132
|
-
program
|
|
133
|
-
.command('rmdir
|
|
131
|
+
commander_1.program
|
|
132
|
+
.command('rmdir')
|
|
133
|
+
.argument('<name>', 'Name of the directory to remove')
|
|
134
134
|
.description('Remove a directory and all its contents, including any subdirectories and files.')
|
|
135
135
|
.action(async (name) => {
|
|
136
136
|
try {
|
|
137
|
-
await rmdir_1.rmdir(name);
|
|
137
|
+
await (0, rmdir_1.rmdir)(name);
|
|
138
138
|
}
|
|
139
139
|
catch (error) {
|
|
140
140
|
if (error.code === 'ENOTDIR') {
|
|
@@ -144,9 +144,9 @@ program
|
|
|
144
144
|
throw error;
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
-
program
|
|
147
|
+
commander_1.program
|
|
148
148
|
.on('command:*', (commands) => {
|
|
149
|
-
program.outputHelp();
|
|
150
|
-
displayError(`Unknown command ${safe_1.yellow(commands[0])}.`);
|
|
149
|
+
commander_1.program.outputHelp();
|
|
150
|
+
displayError(`Unknown command ${(0, safe_1.yellow)(commands[0])}.`);
|
|
151
151
|
});
|
|
152
|
-
program.parse(process.argv);
|
|
152
|
+
commander_1.program.parse(process.argv);
|
package/lib/rmdir/rmdir.util.js
CHANGED
|
@@ -15,7 +15,7 @@ const util_1 = require("util");
|
|
|
15
15
|
async function rmdir(path) {
|
|
16
16
|
let contents;
|
|
17
17
|
try {
|
|
18
|
-
contents = await util_1.promisify(fs_1.readdir)(path);
|
|
18
|
+
contents = await (0, util_1.promisify)(fs_1.readdir)(path);
|
|
19
19
|
}
|
|
20
20
|
catch (error) {
|
|
21
21
|
if (error.code === 'ENOENT') {
|
|
@@ -24,15 +24,15 @@ async function rmdir(path) {
|
|
|
24
24
|
throw error;
|
|
25
25
|
}
|
|
26
26
|
await Promise.all(contents.map(content => {
|
|
27
|
-
const subPath = path_1.join(path, content);
|
|
28
|
-
return util_1.promisify(fs_1.stat)(subPath)
|
|
27
|
+
const subPath = (0, path_1.join)(path, content);
|
|
28
|
+
return (0, util_1.promisify)(fs_1.stat)(subPath)
|
|
29
29
|
.then(stats => {
|
|
30
30
|
if (stats.isDirectory()) {
|
|
31
31
|
return rmdir(subPath);
|
|
32
32
|
}
|
|
33
|
-
return util_1.promisify(fs_1.unlink)(subPath);
|
|
33
|
+
return (0, util_1.promisify)(fs_1.unlink)(subPath);
|
|
34
34
|
});
|
|
35
35
|
}));
|
|
36
|
-
await util_1.promisify(fs_1.rmdir)(path);
|
|
36
|
+
await (0, util_1.promisify)(fs_1.rmdir)(path);
|
|
37
37
|
}
|
|
38
38
|
exports.rmdir = rmdir;
|