@rxdi/schematics 0.7.124 → 0.7.128

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 (224) hide show
  1. package/lib/application/application.factory.js +4 -4
  2. package/lib/application/application.factory.test.ts +88 -0
  3. package/lib/application/application.factory.ts +54 -0
  4. package/lib/application/application.schema.d.ts +34 -0
  5. package/lib/application/files/js/.babelrc +4 -0
  6. package/lib/application/files/js/.prettierrc +4 -0
  7. package/lib/application/files/js/README.md +37 -0
  8. package/lib/application/files/js/index.js +3 -0
  9. package/lib/application/files/js/jsconfig.json +9 -0
  10. package/lib/application/files/js/nest-cli.json +5 -0
  11. package/lib/application/files/js/nodemon.json +6 -0
  12. package/lib/application/files/js/package.json +46 -0
  13. package/lib/application/files/js/test/app.e2e-spec.js +23 -0
  14. package/lib/application/files/js/test/jest-e2e.json +5 -0
  15. package/lib/application/files/ts/.prettierrc +4 -0
  16. package/lib/application/files/ts/README.md +75 -0
  17. package/lib/application/files/ts/nest-cli.json +5 -0
  18. package/lib/application/files/ts/nodemon-debug.json +6 -0
  19. package/lib/application/files/ts/nodemon.json +6 -0
  20. package/lib/application/files/ts/package.json +58 -0
  21. package/lib/application/files/ts/test/app.e2e-spec.ts +23 -0
  22. package/lib/application/files/ts/test/jest-e2e.json +9 -0
  23. package/lib/application/files/ts/tsconfig.build.json +4 -0
  24. package/lib/application/schema.json +49 -0
  25. package/lib/class/class.factory.js +6 -6
  26. package/lib/class/class.factory.test.ts +100 -0
  27. package/lib/class/class.factory.ts +54 -0
  28. package/lib/class/class.schema.d.ts +28 -0
  29. package/lib/class/files/js/__name__.js +1 -0
  30. package/lib/class/files/js/__name__.spec.js +7 -0
  31. package/lib/class/files/ts/__name__.spec.ts +7 -0
  32. package/lib/class/files/ts/__name__.ts +1 -0
  33. package/lib/class/schema.json +39 -0
  34. package/lib/client-app/angular/angular.factory.js +9 -9
  35. package/lib/client-app/angular/angular.factory.ts +139 -0
  36. package/lib/client-app/angular/angular.schema.d.ts +32 -0
  37. package/lib/client-app/angular/files/angular.constants.ts +4 -0
  38. package/lib/client-app/angular/files/angular.module.ts +41 -0
  39. package/lib/client-app/angular/files/angular.providers.ts +27 -0
  40. package/lib/client-app/angular/files/angular.utils.ts +19 -0
  41. package/lib/client-app/angular/files/interfaces/angular-options.interface.ts +87 -0
  42. package/lib/client-app/angular/files/loaders/abstract.loader.ts +16 -0
  43. package/lib/client-app/angular/files/loaders/express.loader.ts +25 -0
  44. package/lib/client-app/angular/files/loaders/fastify.loader.ts +34 -0
  45. package/lib/client-app/angular/files/loaders/noop.loader.ts +12 -0
  46. package/lib/client-app/angular/schema.json +24 -0
  47. package/lib/component/component.factory.js +8 -8
  48. package/lib/component/component.factory.test.ts +191 -0
  49. package/lib/component/component.factory.ts +91 -0
  50. package/lib/component/component.schema.d.ts +44 -0
  51. package/lib/component/files/js/__name__.component.js +56 -0
  52. package/lib/component/files/js/__name__.component.spec.js +31 -0
  53. package/lib/component/files/ts/__name__.component.spec.ts +31 -0
  54. package/lib/component/files/ts/__name__.component.ts +56 -0
  55. package/lib/component/schema.json +47 -0
  56. package/lib/configuration/configuration.factory.js +4 -4
  57. package/lib/configuration/configuration.factory.test.ts +60 -0
  58. package/lib/configuration/configuration.factory.ts +35 -0
  59. package/lib/configuration/configuration.schema.d.ts +18 -0
  60. package/lib/configuration/files/js/nest-cli.json +5 -0
  61. package/lib/configuration/files/ts/nest-cli.json +5 -0
  62. package/lib/controller/controller.factory.js +8 -8
  63. package/lib/controller/controller.factory.test.ts +191 -0
  64. package/lib/controller/controller.factory.ts +91 -0
  65. package/lib/controller/controller.schema.d.ts +44 -0
  66. package/lib/controller/files/js/__name__.controller.js +24 -0
  67. package/lib/controller/files/js/__name__.controller.spec.js +61 -0
  68. package/lib/controller/files/ts/__name__.controller.spec.ts +61 -0
  69. package/lib/controller/files/ts/__name__.controller.ts +24 -0
  70. package/lib/controller/schema.json +47 -0
  71. package/lib/decorator/decorator.factory.js +5 -5
  72. package/lib/decorator/decorator.factory.test.ts +111 -0
  73. package/lib/decorator/decorator.factory.ts +48 -0
  74. package/lib/decorator/decorator.schema.d.ts +24 -0
  75. package/lib/decorator/files/js/__name__.decorator.js +3 -0
  76. package/lib/decorator/files/ts/__name__.decorator.ts +3 -0
  77. package/lib/decorator/schema.json +35 -0
  78. package/lib/defaults.ts +6 -0
  79. package/lib/effect/effect.factory.js +9 -9
  80. package/lib/effect/effect.factory.test.ts +190 -0
  81. package/lib/effect/effect.factory.ts +91 -0
  82. package/lib/effect/effect.schema.d.ts +44 -0
  83. package/lib/effect/files/js/__name__.effect.js +11 -0
  84. package/lib/effect/files/js/__name__.effect.spec.js +17 -0
  85. package/lib/effect/files/ts/__name__.effect.spec.ts +17 -0
  86. package/lib/effect/files/ts/__name__.effect.ts +11 -0
  87. package/lib/effect/schema.json +39 -0
  88. package/lib/filter/files/js/__name__.filter.js +6 -0
  89. package/lib/filter/files/js/__name__.filter.spec.js +7 -0
  90. package/lib/filter/files/ts/__name__.filter.spec.ts +7 -0
  91. package/lib/filter/files/ts/__name__.filter.ts +6 -0
  92. package/lib/filter/filter.factory.js +6 -6
  93. package/lib/filter/filter.factory.test.ts +147 -0
  94. package/lib/filter/filter.factory.ts +51 -0
  95. package/lib/filter/filter.schema.d.ts +28 -0
  96. package/lib/filter/schema.json +39 -0
  97. package/lib/gateway/files/js/__name__.gateway.js +9 -0
  98. package/lib/gateway/files/js/__name__.gateway.spec.js +18 -0
  99. package/lib/gateway/files/ts/__name__.gateway.spec.ts +18 -0
  100. package/lib/gateway/files/ts/__name__.gateway.ts +9 -0
  101. package/lib/gateway/gateway.factory.js +8 -8
  102. package/lib/gateway/gateway.factory.test.ts +147 -0
  103. package/lib/gateway/gateway.factory.ts +92 -0
  104. package/lib/gateway/gateway.schema.d.ts +36 -0
  105. package/lib/gateway/schema.json +39 -0
  106. package/lib/guard/files/js/__name__.guard.js +17 -0
  107. package/lib/guard/files/js/__name__.guard.spec.js +7 -0
  108. package/lib/guard/files/ts/__name__.guard.spec.ts +7 -0
  109. package/lib/guard/files/ts/__name__.guard.ts +17 -0
  110. package/lib/guard/guard.factory.js +6 -6
  111. package/lib/guard/guard.factory.test.ts +156 -0
  112. package/lib/guard/guard.factory.ts +51 -0
  113. package/lib/guard/guard.schema.d.ts +28 -0
  114. package/lib/guard/schema.json +39 -0
  115. package/lib/interceptor/files/js/__name__.interceptor.js +18 -0
  116. package/lib/interceptor/files/js/__name__.interceptor.spec.js +7 -0
  117. package/lib/interceptor/files/ts/__name__.interceptor.spec.ts +7 -0
  118. package/lib/interceptor/files/ts/__name__.interceptor.ts +19 -0
  119. package/lib/interceptor/interceptor.factory.js +6 -6
  120. package/lib/interceptor/interceptor.factory.test.ts +146 -0
  121. package/lib/interceptor/interceptor.factory.ts +51 -0
  122. package/lib/interceptor/interceptor.schema.d.ts +28 -0
  123. package/lib/interceptor/schema.json +39 -0
  124. package/lib/interface/files/__name__.interface.ts +1 -0
  125. package/lib/interface/interface.factory.js +5 -5
  126. package/lib/interface/interface.factory.test.ts +84 -0
  127. package/lib/interface/interface.factory.ts +47 -0
  128. package/lib/interface/interface.schema.d.ts +20 -0
  129. package/lib/interface/schema.json +31 -0
  130. package/lib/library/files/js/.babelrc +4 -0
  131. package/lib/library/files/js/jsconfig.json +9 -0
  132. package/lib/library/files/js/package.json +8 -0
  133. package/lib/library/files/js/src/__name__.module.js +8 -0
  134. package/lib/library/files/js/src/__name__.service.js +4 -0
  135. package/lib/library/files/js/src/__name__.service.spec.js +18 -0
  136. package/lib/library/files/js/src/index.js +2 -0
  137. package/lib/library/files/ts/package.json +8 -0
  138. package/lib/library/files/ts/src/__name__.module.ts +8 -0
  139. package/lib/library/files/ts/src/__name__.service.spec.ts +18 -0
  140. package/lib/library/files/ts/src/__name__.service.ts +4 -0
  141. package/lib/library/files/ts/src/index.ts +2 -0
  142. package/lib/library/files/ts/tsconfig.lib.json +5 -0
  143. package/lib/library/library.factory.js +12 -12
  144. package/lib/library/library.factory.test.ts +68 -0
  145. package/lib/library/library.factory.ts +158 -0
  146. package/lib/library/library.schema.d.ts +24 -0
  147. package/lib/library/schema.json +37 -0
  148. package/lib/module/files/js/__name__.module.js +4 -0
  149. package/lib/module/files/ts/__name__.module.ts +4 -0
  150. package/lib/module/module.factory.js +7 -7
  151. package/lib/module/module.factory.test.ts +165 -0
  152. package/lib/module/module.factory.ts +79 -0
  153. package/lib/module/module.schema.d.ts +36 -0
  154. package/lib/module/schema.json +40 -0
  155. package/lib/pipe/files/js/__name__.pipe.js +8 -0
  156. package/lib/pipe/files/js/__name__.pipe.spec.js +7 -0
  157. package/lib/pipe/files/ts/__name__.pipe.spec.ts +7 -0
  158. package/lib/pipe/files/ts/__name__.pipe.ts +8 -0
  159. package/lib/pipe/pipe.factory.js +6 -6
  160. package/lib/pipe/pipe.factory.test.ts +141 -0
  161. package/lib/pipe/pipe.factory.ts +51 -0
  162. package/lib/pipe/pipe.schema.d.ts +28 -0
  163. package/lib/pipe/schema.json +39 -0
  164. package/lib/plugin/files/js/__name__.plugin.js +28 -0
  165. package/lib/plugin/files/js/__name__.plugin.spec.js +7 -0
  166. package/lib/plugin/files/ts/__name__.plugin.spec.ts +7 -0
  167. package/lib/plugin/files/ts/__name__.plugin.ts +28 -0
  168. package/lib/plugin/plugin.factory.d.ts +2 -2
  169. package/lib/plugin/plugin.factory.js +1 -2
  170. package/lib/plugin/plugin.factory.test.ts +191 -0
  171. package/lib/plugin/plugin.factory.ts +91 -0
  172. package/lib/plugin/plugin.schema.d.ts +44 -0
  173. package/lib/plugin/schema.json +52 -0
  174. package/lib/provider/files/js/__name__.js +4 -0
  175. package/lib/provider/files/js/__name__.spec.js +17 -0
  176. package/lib/provider/files/ts/__name__.spec.ts +17 -0
  177. package/lib/provider/files/ts/__name__.ts +4 -0
  178. package/lib/provider/provider.factory.js +1 -2
  179. package/lib/provider/provider.factory.test.ts +151 -0
  180. package/lib/provider/provider.factory.ts +89 -0
  181. package/lib/provider/provider.schema.d.ts +44 -0
  182. package/lib/provider/schema.json +39 -0
  183. package/lib/resolver/files/js/__name__.resolver.js +4 -0
  184. package/lib/resolver/files/js/__name__.resolver.spec.js +18 -0
  185. package/lib/resolver/files/ts/__name__.resolver.spec.ts +18 -0
  186. package/lib/resolver/files/ts/__name__.resolver.ts +4 -0
  187. package/lib/resolver/resolver.factory.js +8 -8
  188. package/lib/resolver/resolver.factory.test.ts +117 -0
  189. package/lib/resolver/resolver.factory.ts +92 -0
  190. package/lib/resolver/resolver.schema.d.ts +36 -0
  191. package/lib/resolver/schema.json +39 -0
  192. package/lib/service/files/js/__name__.service.js +4 -0
  193. package/lib/service/files/js/__name__.service.spec.js +17 -0
  194. package/lib/service/files/ts/__name__.service.spec.ts +17 -0
  195. package/lib/service/files/ts/__name__.service.ts +4 -0
  196. package/lib/service/schema.json +39 -0
  197. package/lib/service/service.factory.js +9 -9
  198. package/lib/service/service.factory.test.ts +190 -0
  199. package/lib/service/service.factory.ts +91 -0
  200. package/lib/service/service.schema.d.ts +44 -0
  201. package/lib/type/files/js/__name__.type.js +10 -0
  202. package/lib/type/files/ts/__name__.type.ts +10 -0
  203. package/lib/type/schema.json +43 -0
  204. package/lib/type/type.factory.d.ts +1 -1
  205. package/lib/type/type.factory.js +1 -2
  206. package/lib/type/type.factory.test.ts +191 -0
  207. package/lib/type/type.factory.ts +91 -0
  208. package/lib/type/type.schema.d.ts +44 -0
  209. package/package.json +2 -2
  210. package/utils/metadata.manager.js +1 -1
  211. package/utils/metadata.manager.ts +219 -0
  212. package/utils/module-import.declarator.js +2 -2
  213. package/utils/module-import.declarator.ts +41 -0
  214. package/utils/module-metadata.declarator.ts +14 -0
  215. package/utils/module.declarator.js +2 -2
  216. package/utils/module.declarator.ts +41 -0
  217. package/utils/module.finder.js +1 -1
  218. package/utils/module.finder.ts +32 -0
  219. package/utils/name.parser.js +3 -3
  220. package/utils/name.parser.ts +29 -0
  221. package/utils/path.solver.js +2 -2
  222. package/utils/path.solver.ts +17 -0
  223. package/utils/source-root.helpers.js +2 -2
  224. package/utils/source-root.helpers.ts +30 -0
@@ -0,0 +1,11 @@
1
+ import { Effect, OfType } from '@gapi/core';
2
+
3
+ @Effect()
4
+ export class <%= classify(name) %>Effect {
5
+
6
+ @OfType<any>('<%= classify(name) %>')
7
+ <%= classify(name) %>Action(result, payload, context) {
8
+ console.log(result, payload, context);
9
+ }
10
+
11
+ }
@@ -0,0 +1,17 @@
1
+ import 'jest';
2
+ import { Container, createTestBed } from '@gapi/core';
3
+ import { <%= classify(name) %>Effect } from './<%= name %>.effect';
4
+
5
+ describe('<%= classify(name) %> Effect', () => {
6
+ beforeAll(async () => {
7
+ await createTestBed({
8
+ imports: [],
9
+ effects: [<%= classify(name) %>Effect]
10
+ }).toPromise();
11
+ });
12
+
13
+ it('should be defined', done => {
14
+ expect(Container.has(<%= classify(name) %>Effect)).toBeTruthy();
15
+ done();
16
+ });
17
+ });
@@ -0,0 +1,17 @@
1
+ import 'jest';
2
+ import { Container, createTestBed } from '@gapi/core';
3
+ import { <%= classify(name) %>Effect } from './<%= name %>.effect';
4
+
5
+ describe('<%= classify(name) %> Effect', () => {
6
+ beforeAll(async () => {
7
+ await createTestBed({
8
+ imports: [],
9
+ effects: [<%= classify(name) %>Effect]
10
+ }).toPromise();
11
+ });
12
+
13
+ it('should be defined', done => {
14
+ expect(Container.has(<%= classify(name) %>Effect)).toBeTruthy();
15
+ done();
16
+ });
17
+ });
@@ -0,0 +1,11 @@
1
+ import { Effect, OfType } from '@gapi/core';
2
+
3
+ @Effect()
4
+ export class <%= classify(name) %>Effect {
5
+
6
+ @OfType<any>('<%= classify(name) %>')
7
+ <%= classify(name) %>Action(result, payload, context) {
8
+ console.log(result, payload, context);
9
+ }
10
+
11
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "id": "SchematicsGapiEffect",
4
+ "title": "Gapi Effect Options Schema",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "The name of the effect.",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "What name would you like to use for the effect?"
15
+ },
16
+ "path": {
17
+ "type": "string",
18
+ "format": "path",
19
+ "description": "The path to create the effect."
20
+ },
21
+ "language": {
22
+ "type": "string",
23
+ "description": "Gapi effect language (ts/js)."
24
+ },
25
+ "sourceRoot": {
26
+ "type": "string",
27
+ "description": "Gapi effect source root directory."
28
+ },
29
+ "flat": {
30
+ "default": false,
31
+ "description": "Flag to indicate if a directory is created."
32
+ },
33
+ "spec": {
34
+ "default": true,
35
+ "description": "Specifies if a spec file is generated."
36
+ }
37
+ },
38
+ "required": ["name"]
39
+ }
@@ -0,0 +1,6 @@
1
+ import { Catch } from '@nestjs/common';
2
+
3
+ @Catch()
4
+ export class <%= classify(name) %>Filter {
5
+ catch(exception, host) {}
6
+ }
@@ -0,0 +1,7 @@
1
+ import { <%= classify(name) %>Filter } from './<%= name %>.filter';
2
+
3
+ describe('<%= classify(name) %>Filter', () => {
4
+ it('should be defined', () => {
5
+ expect(new <%= classify(name) %>Filter()).toBeDefined();
6
+ });
7
+ });
@@ -0,0 +1,7 @@
1
+ import { <%= classify(name) %>Filter } from './<%= name %>.filter';
2
+
3
+ describe('<%= classify(name) %>Filter', () => {
4
+ it('should be defined', () => {
5
+ expect(new <%= classify(name) %>Filter()).toBeDefined();
6
+ });
7
+ });
@@ -0,0 +1,6 @@
1
+ import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';
2
+
3
+ @Catch()
4
+ export class <%= classify(name) %>Filter<T> implements ExceptionFilter {
5
+ catch(exception: T, host: ArgumentsHost) {}
6
+ }
@@ -7,7 +7,7 @@ const name_parser_1 = require("../../utils/name.parser");
7
7
  const source_root_helpers_1 = require("../../utils/source-root.helpers");
8
8
  function main(options) {
9
9
  options = transform(options);
10
- return schematics_1.chain([source_root_helpers_1.mergeSourceRoot(options), schematics_1.mergeWith(generate(options))]);
10
+ return (0, schematics_1.chain)([(0, source_root_helpers_1.mergeSourceRoot)(options), (0, schematics_1.mergeWith)(generate(options))]);
11
11
  }
12
12
  exports.main = main;
13
13
  function transform(options) {
@@ -21,13 +21,13 @@ function transform(options) {
21
21
  target.language = target.language !== undefined ? target.language : 'ts';
22
22
  target.path = target.flat
23
23
  ? target.path
24
- : core_1.join(target.path, target.name);
24
+ : (0, core_1.join)(target.path, target.name);
25
25
  return target;
26
26
  }
27
27
  function generate(options) {
28
- return (context) => schematics_1.apply(schematics_1.url(core_1.join('./files', options.language)), [
29
- options.spec ? schematics_1.noop() : schematics_1.filter(path => !path.endsWith('.spec.ts')),
30
- schematics_1.template(Object.assign(Object.assign({}, core_1.strings), options)),
31
- schematics_1.move(options.path),
28
+ return (context) => (0, schematics_1.apply)((0, schematics_1.url)((0, core_1.join)('./files', options.language)), [
29
+ options.spec ? (0, schematics_1.noop)() : (0, schematics_1.filter)(path => !path.endsWith('.spec.ts')),
30
+ (0, schematics_1.template)(Object.assign(Object.assign({}, core_1.strings), options)),
31
+ (0, schematics_1.move)(options.path),
32
32
  ])(context);
33
33
  }
@@ -0,0 +1,147 @@
1
+ import {
2
+ SchematicTestRunner,
3
+ UnitTestTree,
4
+ } from '@angular-devkit/schematics/testing';
5
+ import * as path from 'path';
6
+ import { FilterOptions } from './filter.schema';
7
+
8
+ describe('Filter Factory', () => {
9
+ const runner: SchematicTestRunner = new SchematicTestRunner(
10
+ '.',
11
+ path.join(process.cwd(), 'src/collection.json'),
12
+ );
13
+
14
+ it('should manage name only', () => {
15
+ const options: FilterOptions = {
16
+ name: 'foo',
17
+ };
18
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
19
+ const files: string[] = tree.files;
20
+ expect(files.find(filename => filename === '/foo.filter.ts')).toBeDefined();
21
+ expect(tree.readContent('/foo.filter.ts')).toEqual(
22
+ "import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';\n" +
23
+ '\n' +
24
+ '@Catch()\n' +
25
+ 'export class FooFilter<T> implements ExceptionFilter {\n' +
26
+ ' catch(exception: T, host: ArgumentsHost) {}\n' +
27
+ '}\n',
28
+ );
29
+ });
30
+
31
+ it('should manage name has a path', () => {
32
+ const options: FilterOptions = {
33
+ name: 'bar/foo',
34
+ };
35
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
36
+ const files: string[] = tree.files;
37
+ expect(
38
+ files.find(filename => filename === '/bar/foo.filter.ts'),
39
+ ).toBeDefined();
40
+ expect(tree.readContent('/bar/foo.filter.ts')).toEqual(
41
+ "import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';\n" +
42
+ '\n' +
43
+ '@Catch()\n' +
44
+ 'export class FooFilter<T> implements ExceptionFilter {\n' +
45
+ ' catch(exception: T, host: ArgumentsHost) {}\n' +
46
+ '}\n',
47
+ );
48
+ });
49
+
50
+ it('should manage name and path', () => {
51
+ const options: FilterOptions = {
52
+ name: 'foo',
53
+ path: 'baz',
54
+ };
55
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
56
+ const files: string[] = tree.files;
57
+ expect(
58
+ files.find(filename => filename === '/baz/foo.filter.ts'),
59
+ ).toBeDefined();
60
+ expect(tree.readContent('/baz/foo.filter.ts')).toEqual(
61
+ "import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';\n" +
62
+ '\n' +
63
+ '@Catch()\n' +
64
+ 'export class FooFilter<T> implements ExceptionFilter {\n' +
65
+ ' catch(exception: T, host: ArgumentsHost) {}\n' +
66
+ '}\n',
67
+ );
68
+ });
69
+
70
+ it('should manage name to dasherize', () => {
71
+ const options: FilterOptions = {
72
+ name: 'fooBar',
73
+ };
74
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
75
+ const files: string[] = tree.files;
76
+ expect(
77
+ files.find(filename => filename === '/foo-bar.filter.ts'),
78
+ ).toBeDefined();
79
+ expect(tree.readContent('/foo-bar.filter.ts')).toEqual(
80
+ "import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';\n" +
81
+ '\n' +
82
+ '@Catch()\n' +
83
+ 'export class FooBarFilter<T> implements ExceptionFilter {\n' +
84
+ ' catch(exception: T, host: ArgumentsHost) {}\n' +
85
+ '}\n',
86
+ );
87
+ });
88
+
89
+ it('should manage path to dasherize', () => {
90
+ const options: FilterOptions = {
91
+ name: 'barBaz/foo',
92
+ };
93
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
94
+ const files: string[] = tree.files;
95
+ expect(
96
+ files.find(filename => filename === '/bar-baz/foo.filter.ts'),
97
+ ).toBeDefined();
98
+ expect(tree.readContent('/bar-baz/foo.filter.ts')).toEqual(
99
+ "import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';\n" +
100
+ '\n' +
101
+ '@Catch()\n' +
102
+ 'export class FooFilter<T> implements ExceptionFilter {\n' +
103
+ ' catch(exception: T, host: ArgumentsHost) {}\n' +
104
+ '}\n',
105
+ );
106
+ });
107
+
108
+ it('should manage javascript file', () => {
109
+ const options: FilterOptions = {
110
+ name: 'foo',
111
+ language: 'js',
112
+ };
113
+ const tree: UnitTestTree = runner.runSchematic('filter', options);
114
+ const files: string[] = tree.files;
115
+ expect(files.find(filename => filename === '/foo.filter.js')).toBeDefined();
116
+ expect(tree.readContent('/foo.filter.js')).toEqual(
117
+ "import { Catch } from '@nestjs/common';\n" +
118
+ '\n' +
119
+ '@Catch()\n' +
120
+ 'export class FooFilter {\n' +
121
+ ' catch(exception, host) {}\n' +
122
+ '}\n',
123
+ );
124
+ });
125
+
126
+ it('should add source root to path', () => {
127
+ const options: FilterOptions = {
128
+ name: 'foo',
129
+ language: 'js',
130
+ };
131
+ let tree: UnitTestTree = runner.runSchematic('application', { name: '' });
132
+ tree = runner.runSchematic('filter', options, tree);
133
+
134
+ const files: string[] = tree.files;
135
+ expect(
136
+ files.find(filename => filename === '/src/foo.filter.js'),
137
+ ).toBeDefined();
138
+ expect(tree.readContent('/src/foo.filter.js')).toEqual(
139
+ "import { Catch } from '@nestjs/common';\n" +
140
+ '\n' +
141
+ '@Catch()\n' +
142
+ 'export class FooFilter {\n' +
143
+ ' catch(exception, host) {}\n' +
144
+ '}\n',
145
+ );
146
+ });
147
+ });
@@ -0,0 +1,51 @@
1
+ import { join, Path, strings } from '@angular-devkit/core';
2
+ import {
3
+ apply,
4
+ chain,
5
+ filter,
6
+ mergeWith,
7
+ move,
8
+ noop,
9
+ Rule,
10
+ SchematicContext,
11
+ SchematicsException,
12
+ Source,
13
+ template,
14
+ url,
15
+ } from '@angular-devkit/schematics';
16
+ import { Location, NameParser } from '../../utils/name.parser';
17
+ import { mergeSourceRoot } from '../../utils/source-root.helpers';
18
+ import { FilterOptions } from './filter.schema';
19
+
20
+ export function main(options: FilterOptions): Rule {
21
+ options = transform(options);
22
+ return chain([mergeSourceRoot(options), mergeWith(generate(options))]);
23
+ }
24
+
25
+ function transform(options: FilterOptions): FilterOptions {
26
+ const target: FilterOptions = Object.assign({}, options);
27
+ if (!target.name) {
28
+ throw new SchematicsException('Option (name) is required.');
29
+ }
30
+ const location: Location = new NameParser().parse(target);
31
+ target.name = strings.dasherize(location.name);
32
+ target.path = strings.dasherize(location.path);
33
+ target.language = target.language !== undefined ? target.language : 'ts';
34
+
35
+ target.path = target.flat
36
+ ? target.path
37
+ : join(target.path as Path, target.name);
38
+ return target;
39
+ }
40
+
41
+ function generate(options: FilterOptions): Source {
42
+ return (context: SchematicContext) =>
43
+ apply(url(join('./files' as Path, options.language)), [
44
+ options.spec ? noop() : filter(path => !path.endsWith('.spec.ts')),
45
+ template({
46
+ ...strings,
47
+ ...options,
48
+ }),
49
+ move(options.path),
50
+ ])(context);
51
+ }
@@ -0,0 +1,28 @@
1
+ import { Path } from '@angular-devkit/core';
2
+
3
+ export interface FilterOptions {
4
+ /**
5
+ * The name of the filter.
6
+ */
7
+ name: string;
8
+ /**
9
+ * The path to create the filter.
10
+ */
11
+ path?: string | Path;
12
+ /**
13
+ * Application language.
14
+ */
15
+ language?: string;
16
+ /**
17
+ * The source root path
18
+ */
19
+ sourceRoot?: string;
20
+ /**
21
+ * Specifies if a spec file is generated.
22
+ */
23
+ spec?: boolean;
24
+ /**
25
+ * Flag to indicate if a directory is created.
26
+ */
27
+ flat?: boolean;
28
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "id": "SchematicsNestFilter",
4
+ "title": "Nest Filter Options Schema",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "The name of the filter.",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "What name would you like to use for the filter?"
15
+ },
16
+ "path": {
17
+ "type": "string",
18
+ "format": "path",
19
+ "description": "The path to create the filter."
20
+ },
21
+ "language": {
22
+ "type": "string",
23
+ "description": "Nest filter language (ts/js)."
24
+ },
25
+ "sourceRoot": {
26
+ "type": "string",
27
+ "description": "Nest filter source root directory."
28
+ },
29
+ "flat": {
30
+ "default": true,
31
+ "description": "Flag to indicate if a directory is created."
32
+ },
33
+ "spec": {
34
+ "default": true,
35
+ "description": "Specifies if a spec file is generated."
36
+ }
37
+ },
38
+ "required": ["name"]
39
+ }
@@ -0,0 +1,9 @@
1
+ import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';
2
+
3
+ @WebSocketGateway()
4
+ export class <%= classify(name) %>Gateway {
5
+ @SubscribeMessage('message')
6
+ handleMessage(client, payload) {
7
+ return 'Hello world!';
8
+ }
9
+ }
@@ -0,0 +1,18 @@
1
+ import { Test } from '@nestjs/testing';
2
+ import { <%= classify(name) %>Gateway } from './<%= name %>.gateway';
3
+
4
+ describe('<%= classify(name) %>Gateway', () => {
5
+ let gateway;
6
+
7
+ beforeEach(async () => {
8
+ const module = await Test.createTestingModule({
9
+ providers: [<%= classify(name) %>Gateway],
10
+ }).compile();
11
+
12
+ gateway = module.get(<%= classify(name) %>Gateway);
13
+ });
14
+
15
+ it('should be defined', () => {
16
+ expect(gateway).toBeDefined();
17
+ });
18
+ });
@@ -0,0 +1,18 @@
1
+ import { Test, TestingModule } from '@nestjs/testing';
2
+ import { <%= classify(name) %>Gateway } from './<%= name %>.gateway';
3
+
4
+ describe('<%= classify(name) %>Gateway', () => {
5
+ let gateway: <%= classify(name) %>Gateway;
6
+
7
+ beforeEach(async () => {
8
+ const module: TestingModule = await Test.createTestingModule({
9
+ providers: [<%= classify(name) %>Gateway],
10
+ }).compile();
11
+
12
+ gateway = module.get<<%= classify(name) %>Gateway>(<%= classify(name) %>Gateway);
13
+ });
14
+
15
+ it('should be defined', () => {
16
+ expect(gateway).toBeDefined();
17
+ });
18
+ });
@@ -0,0 +1,9 @@
1
+ import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';
2
+
3
+ @WebSocketGateway()
4
+ export class <%= classify(name) %>Gateway {
5
+ @SubscribeMessage('message')
6
+ handleMessage(client: any, payload: any): string {
7
+ return 'Hello world!';
8
+ }
9
+ }
@@ -10,10 +10,10 @@ const source_root_helpers_1 = require("../../utils/source-root.helpers");
10
10
  function main(options) {
11
11
  options = transform(options);
12
12
  return (tree, context) => {
13
- return schematics_1.branchAndMerge(schematics_1.chain([
14
- source_root_helpers_1.mergeSourceRoot(options),
13
+ return (0, schematics_1.branchAndMerge)((0, schematics_1.chain)([
14
+ (0, source_root_helpers_1.mergeSourceRoot)(options),
15
15
  addDeclarationToModule(options),
16
- schematics_1.mergeWith(generate(options)),
16
+ (0, schematics_1.mergeWith)(generate(options)),
17
17
  ]))(tree, context);
18
18
  };
19
19
  }
@@ -31,14 +31,14 @@ function transform(options) {
31
31
  target.language = target.language !== undefined ? target.language : 'ts';
32
32
  target.path = target.flat
33
33
  ? target.path
34
- : core_1.join(target.path, target.name);
34
+ : (0, core_1.join)(target.path, target.name);
35
35
  return target;
36
36
  }
37
37
  function generate(options) {
38
- return (context) => schematics_1.apply(schematics_1.url(core_1.join('./files', options.language)), [
39
- options.spec ? schematics_1.noop() : schematics_1.filter(path => !path.endsWith('.spec.ts')),
40
- schematics_1.template(Object.assign(Object.assign({}, core_1.strings), options)),
41
- schematics_1.move(options.path),
38
+ return (context) => (0, schematics_1.apply)((0, schematics_1.url)((0, core_1.join)('./files', options.language)), [
39
+ options.spec ? (0, schematics_1.noop)() : (0, schematics_1.filter)(path => !path.endsWith('.spec.ts')),
40
+ (0, schematics_1.template)(Object.assign(Object.assign({}, core_1.strings), options)),
41
+ (0, schematics_1.move)(options.path),
42
42
  ])(context);
43
43
  }
44
44
  function addDeclarationToModule(options) {
@@ -0,0 +1,147 @@
1
+ import {
2
+ SchematicTestRunner,
3
+ UnitTestTree,
4
+ } from '@angular-devkit/schematics/testing';
5
+ import * as path from 'path';
6
+ import { GatewayOptions } from './gateway.schema';
7
+
8
+ describe('Gateway Factory', () => {
9
+ const runner: SchematicTestRunner = new SchematicTestRunner(
10
+ '.',
11
+ path.join(process.cwd(), 'src/collection.json'),
12
+ );
13
+ it('should manage name only', () => {
14
+ const options: GatewayOptions = {
15
+ name: 'foo',
16
+ flat: false,
17
+ };
18
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
19
+ const files: string[] = tree.files;
20
+ expect(
21
+ files.find(filename => filename === '/foo/foo.gateway.ts'),
22
+ ).not.toBeUndefined();
23
+ expect(tree.readContent('/foo/foo.gateway.ts')).toEqual(
24
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
25
+ '\n' +
26
+ '@WebSocketGateway()\n' +
27
+ 'export class FooGateway {\n' +
28
+ " @SubscribeMessage('message')\n" +
29
+ ' handleMessage(client: any, payload: any): string {\n' +
30
+ " return 'Hello world!';\n" +
31
+ ' }\n' +
32
+ '}\n',
33
+ );
34
+ });
35
+ it('should manage name as a path', () => {
36
+ const options: GatewayOptions = {
37
+ name: 'bar/foo',
38
+ flat: false,
39
+ };
40
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
41
+ const files: string[] = tree.files;
42
+ expect(
43
+ files.find(filename => filename === '/bar/foo/foo.gateway.ts'),
44
+ ).not.toBeUndefined();
45
+ expect(tree.readContent('/bar/foo/foo.gateway.ts')).toEqual(
46
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
47
+ '\n' +
48
+ '@WebSocketGateway()\n' +
49
+ 'export class FooGateway {\n' +
50
+ " @SubscribeMessage('message')\n" +
51
+ ' handleMessage(client: any, payload: any): string {\n' +
52
+ " return 'Hello world!';\n" +
53
+ ' }\n' +
54
+ '}\n',
55
+ );
56
+ });
57
+ it('should manage name and path', () => {
58
+ const options: GatewayOptions = {
59
+ name: 'foo',
60
+ path: 'baz',
61
+ flat: false,
62
+ };
63
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
64
+ const files: string[] = tree.files;
65
+ expect(
66
+ files.find(filename => filename === '/baz/foo/foo.gateway.ts'),
67
+ ).not.toBeUndefined();
68
+ expect(tree.readContent('/baz/foo/foo.gateway.ts')).toEqual(
69
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
70
+ '\n' +
71
+ '@WebSocketGateway()\n' +
72
+ 'export class FooGateway {\n' +
73
+ " @SubscribeMessage('message')\n" +
74
+ ' handleMessage(client: any, payload: any): string {\n' +
75
+ " return 'Hello world!';\n" +
76
+ ' }\n' +
77
+ '}\n',
78
+ );
79
+ });
80
+ it('should manage name to dasherize', () => {
81
+ const options: GatewayOptions = {
82
+ name: 'fooBar',
83
+ flat: false,
84
+ };
85
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
86
+ const files: string[] = tree.files;
87
+ expect(
88
+ files.find(filename => filename === '/foo-bar/foo-bar.gateway.ts'),
89
+ ).not.toBeUndefined();
90
+ expect(tree.readContent('/foo-bar/foo-bar.gateway.ts')).toEqual(
91
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
92
+ '\n' +
93
+ '@WebSocketGateway()\n' +
94
+ 'export class FooBarGateway {\n' +
95
+ " @SubscribeMessage('message')\n" +
96
+ ' handleMessage(client: any, payload: any): string {\n' +
97
+ " return 'Hello world!';\n" +
98
+ ' }\n' +
99
+ '}\n',
100
+ );
101
+ });
102
+ it('should manage path to dasherize', () => {
103
+ const options: GatewayOptions = {
104
+ name: 'barBaz/foo',
105
+ flat: false,
106
+ };
107
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
108
+ const files: string[] = tree.files;
109
+ expect(
110
+ files.find(filename => filename === '/bar-baz/foo/foo.gateway.ts'),
111
+ ).not.toBeUndefined();
112
+ expect(tree.readContent('/bar-baz/foo/foo.gateway.ts')).toEqual(
113
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
114
+ '\n' +
115
+ '@WebSocketGateway()\n' +
116
+ 'export class FooGateway {\n' +
117
+ " @SubscribeMessage('message')\n" +
118
+ ' handleMessage(client: any, payload: any): string {\n' +
119
+ " return 'Hello world!';\n" +
120
+ ' }\n' +
121
+ '}\n',
122
+ );
123
+ });
124
+ it('should manage javascript file', () => {
125
+ const options: GatewayOptions = {
126
+ name: 'foo',
127
+ language: 'js',
128
+ flat: false,
129
+ };
130
+ const tree: UnitTestTree = runner.runSchematic('gateway', options);
131
+ const files: string[] = tree.files;
132
+ expect(
133
+ files.find(filename => filename === '/foo/foo.gateway.js'),
134
+ ).not.toBeUndefined();
135
+ expect(tree.readContent('/foo/foo.gateway.js')).toEqual(
136
+ "import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';\n" +
137
+ '\n' +
138
+ '@WebSocketGateway()\n' +
139
+ 'export class FooGateway {\n' +
140
+ " @SubscribeMessage('message')\n" +
141
+ ' handleMessage(client, payload) {\n' +
142
+ " return 'Hello world!';\n" +
143
+ ' }\n' +
144
+ '}\n',
145
+ );
146
+ });
147
+ });