@foal/cli 2.11.0 → 3.0.0-alpha.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.
Files changed (49) hide show
  1. package/lib/create-secret/create-secret.js +1 -1
  2. package/lib/generate/file-system.js +47 -47
  3. package/lib/generate/generators/angular/connect-angular.js +11 -12
  4. package/lib/generate/generators/app/create-app.js +11 -12
  5. package/lib/generate/generators/controller/create-controller.js +4 -4
  6. package/lib/generate/generators/entity/create-entity.js +2 -2
  7. package/lib/generate/generators/hook/create-hook.js +2 -2
  8. package/lib/generate/generators/index.d.ts +0 -1
  9. package/lib/generate/generators/index.js +5 -2
  10. package/lib/generate/generators/react/connect-react.js +3 -3
  11. package/lib/generate/generators/rest-api/create-rest-api.js +9 -5
  12. package/lib/generate/generators/script/create-script.js +1 -1
  13. package/lib/generate/generators/service/create-service.js +2 -2
  14. package/lib/generate/generators/vue/connect-vue.js +4 -4
  15. package/lib/generate/index.js +5 -1
  16. package/lib/generate/templates/app/.eslintrc.js +13 -14
  17. package/lib/generate/templates/app/package.json +17 -17
  18. package/lib/generate/templates/app/package.mongodb.json +13 -13
  19. package/lib/generate/templates/app/package.mongodb.yaml.json +13 -13
  20. package/lib/generate/templates/app/package.yaml.json +17 -17
  21. package/lib/generate/templates/app/src/app/app.controller.ts +0 -5
  22. package/lib/generate/templates/app/src/app/entities/user.entity.mongodb.ts +3 -14
  23. package/lib/generate/templates/app/src/app/entities/user.entity.ts +1 -12
  24. package/lib/generate/templates/app/src/db.ts +24 -0
  25. package/lib/generate/templates/app/src/e2e/index.ts +10 -2
  26. package/lib/generate/templates/app/src/index.ts +3 -0
  27. package/lib/generate/templates/app/src/scripts/create-user.ts +9 -13
  28. package/lib/generate/templates/app/tsconfig.json +3 -3
  29. package/lib/generate/templates/entity/entity.mongodb.ts +3 -3
  30. package/lib/generate/templates/rest-api/controllers/controller.auth.ts +15 -16
  31. package/lib/generate/templates/rest-api/controllers/controller.spec.auth.ts +27 -21
  32. package/lib/generate/templates/rest-api/controllers/controller.spec.ts +24 -16
  33. package/lib/generate/templates/rest-api/controllers/controller.ts +9 -10
  34. package/lib/generate/templates/script/script.ts +4 -14
  35. package/lib/generate/utils/init-git-repo.js +2 -2
  36. package/lib/generate/utils/mkdir-if-does-not-exist.js +2 -2
  37. package/lib/generate/utils/rm-dir-and-files-if-exist.js +6 -6
  38. package/lib/index.js +41 -41
  39. package/lib/rmdir/rmdir.util.js +5 -5
  40. package/lib/run-script/run-script.js +7 -7
  41. package/package.json +12 -12
  42. package/lib/generate/generators/vscode-config/create-vscode-config.d.ts +0 -1
  43. package/lib/generate/generators/vscode-config/create-vscode-config.js +0 -15
  44. package/lib/generate/generators/vscode-config/index.d.ts +0 -1
  45. package/lib/generate/generators/vscode-config/index.js +0 -5
  46. package/lib/generate/templates/app/ormconfig.js +0 -21
  47. package/lib/generate/templates/app/src/scripts/create-user.mongodb.ts +0 -38
  48. package/lib/generate/templates/vscode-config/launch.json +0 -54
  49. 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 { createConnection, getConnection, getRepository } from 'typeorm';
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(() => createConnection());
27
+ before(async () => {
28
+ dataSource = createDataSource();
29
+ await dataSource.initialize();
30
+ });
26
31
 
27
- after(() => getConnection().close());
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
- const /* camelName */Repository = getRepository(/* upperFirstCamelName */);
33
- const userRepository = getRepository(User);
34
-
35
- await /* camelName */Repository.clear();
36
- await userRepository.clear();
41
+ await /* upperFirstCamelName */.clear();
42
+ await User.clear();
37
43
 
38
- [ user1, user2 ] = await userRepository.save([
44
+ [ user1, user2 ] = await User.save([
39
45
  {},
40
46
  {},
41
47
  ]);
42
48
 
43
- [ /* camelName */0, /* camelName */1, /* camelName */2 ] = await /* camelName */Repository.save([
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 getRepository(/* upperFirstCamelName */).save({
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 getRepository(/* upperFirstCamelName */).findOne({
195
- relations: [ 'owner' ],
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
422
+ const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
417
423
 
418
- strictEqual(/* camelName */, undefined);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
440
+ const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
435
441
 
436
- notStrictEqual(/* camelName */, undefined);
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 { createConnection, getConnection, getRepository } from 'typeorm';
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(() => createConnection());
24
+ before(async () => {
25
+ dataSource = createDataSource();
26
+ await dataSource.initialize();
27
+ });
23
28
 
24
- after(() => getConnection().close());
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
- const repository = getRepository(/* upperFirstCamelName */);
30
- await repository.clear();
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 getRepository(/* upperFirstCamelName */).save({
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 getRepository(/* upperFirstCamelName */).findOne({ text: '/* upperFirstCamelName */ 3' });
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */2.id);
340
+ const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */2.id });
333
341
 
334
- strictEqual(/* camelName */, undefined);
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 getRepository(/* upperFirstCamelName */).findOne(/* camelName */1.id);
357
+ const /* camelName */ = await /* upperFirstCamelName */.findOneBy({ id: /* camelName */1.id });
350
358
 
351
- notStrictEqual(/* camelName */, undefined);
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 getRepository(/* upperFirstCamelName */).find({
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 getRepository(/* upperFirstCamelName */).findOne(ctx.request.params./* camelName */Id);
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 getRepository(/* upperFirstCamelName */).save(ctx.request.body);
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 getRepository(/* upperFirstCamelName */).findOne(ctx.request.params./* camelName */Id);
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 getRepository(/* upperFirstCamelName */).save(/* camelName */);
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 getRepository(/* upperFirstCamelName */).findOne(ctx.request.params./* camelName */Id);
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 getRepository(/* upperFirstCamelName */).save(/* camelName */);
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 getRepository(/* upperFirstCamelName */).findOne(ctx.request.params./* camelName */Id);
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 getRepository(/* upperFirstCamelName */).delete(ctx.request.params./* camelName */Id);
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
- /* To complete */
4
+
8
5
  },
9
- required: [ /* To complete */ ],
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 (_a) {
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 program = require("commander");
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 <name>')
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 <name>')
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 <framework> <path>')
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', 'vscode-config'
84
+ 'controller', 'entity', 'rest-api', 'hook', 'script', 'service'
81
85
  ];
82
- program
83
- .command('generate <type> [name]')
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 <name>')
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);
@@ -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;