@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,44 @@
1
+ import { Path } from '@angular-devkit/core';
2
+
3
+ export interface PluginOptions {
4
+ /**
5
+ * The name of the controller.
6
+ */
7
+ name: string;
8
+ /**
9
+ * The path to create the controller.
10
+ */
11
+ path?: string | Path;
12
+ /**
13
+ * The path to insert the controller declaration.
14
+ */
15
+ module?: Path;
16
+ /**
17
+ * Directive to insert declaration in module.
18
+ */
19
+ skipImport?: boolean;
20
+ /**
21
+ * Metadata name affected by declaration insertion.
22
+ */
23
+ metadata?: string;
24
+ /**
25
+ * Nest element type name
26
+ */
27
+ type?: string;
28
+ /**
29
+ * Application language.
30
+ */
31
+ language?: string;
32
+ /**
33
+ * The source root path
34
+ */
35
+ sourceRoot?: string;
36
+ /**
37
+ * Specifies if a spec file is generated.
38
+ */
39
+ spec?: boolean;
40
+ /**
41
+ * Flag to indicate if a directory is created.
42
+ */
43
+ flat?: boolean;
44
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "id": "SchematicsNestController",
4
+ "title": "Nest Controller Options Schema",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "The name of the controller.",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "What name would you like to use for the controller?"
15
+ },
16
+ "path": {
17
+ "type": "string",
18
+ "format": "path",
19
+ "description": "The path to create the controller."
20
+ },
21
+ "method": {
22
+ "type": "string",
23
+ "format": "path",
24
+ "description": "The path to create the controller."
25
+ },
26
+ "language": {
27
+ "type": "string",
28
+ "description": "Nest controller language (ts/js)."
29
+ },
30
+ "sourceRoot": {
31
+ "type": "string",
32
+ "description": "Nest controller source root directory."
33
+ },
34
+ "skipImport": {
35
+ "description": "Flag to skip the module import.",
36
+ "default": false
37
+ },
38
+ "module": {
39
+ "type": "string",
40
+ "description": "Allows specification of the declaring module."
41
+ },
42
+ "flat": {
43
+ "default": false,
44
+ "description": "Flag to indicate if a directory is created."
45
+ },
46
+ "spec": {
47
+ "default": true,
48
+ "description": "Specifies if a spec file is generated."
49
+ }
50
+ },
51
+ "required": ["name"]
52
+ }
@@ -0,0 +1,4 @@
1
+ import { Injectable } from '@rxdi/core';
2
+
3
+ @Injectable()
4
+ export class <%= classify(name) %> {}
@@ -0,0 +1,17 @@
1
+ import 'jest';
2
+ import { Container, createTestBed } from '@gapi/core';
3
+ import { <%= classify(name) %> } from './<%= name %>';
4
+
5
+ describe('<%= classify(name) %> Injectable', () => {
6
+ beforeAll(async () => {
7
+ await createTestBed({
8
+ imports: [],
9
+ providers: [<%= classify(name) %>]
10
+ }).toPromise();
11
+ });
12
+
13
+ it('should be defined', done => {
14
+ expect(Container.has(<%= classify(name) %>)).toBeTruthy();
15
+ done();
16
+ });
17
+ });
@@ -0,0 +1,17 @@
1
+ import 'jest';
2
+ import { Container, createTestBed } from '@gapi/core';
3
+ import { <%= classify(name) %> } from './<%= name %>';
4
+
5
+ describe('<%= classify(name) %> Injectable', () => {
6
+ beforeAll(async () => {
7
+ await createTestBed({
8
+ imports: [],
9
+ providers: [<%= classify(name) %>]
10
+ }).toPromise();
11
+ });
12
+
13
+ it('should be defined', done => {
14
+ expect(Container.has(<%= classify(name) %>)).toBeTruthy();
15
+ done();
16
+ });
17
+ });
@@ -0,0 +1,4 @@
1
+ import { Injectable } from '@rxdi/core';
2
+
3
+ @Injectable()
4
+ export class <%= classify(name) %> {}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.main = void 0;
4
3
  const core_1 = require("@angular-devkit/core");
5
4
  const schematics_1 = require("@angular-devkit/schematics");
6
5
  const module_declarator_1 = require("../../utils/module.declarator");
@@ -36,7 +35,7 @@ function transform(options) {
36
35
  function generate(options) {
37
36
  return (context) => schematics_1.apply(schematics_1.url(core_1.join('./files', options.language)), [
38
37
  options.spec ? schematics_1.noop() : schematics_1.filter(path => !path.endsWith('.spec.ts')),
39
- schematics_1.template(Object.assign(Object.assign({}, core_1.strings), options)),
38
+ schematics_1.template(Object.assign({}, core_1.strings, options)),
40
39
  schematics_1.move(options.path),
41
40
  ])(context);
42
41
  }
@@ -0,0 +1,151 @@
1
+ import { normalize } from '@angular-devkit/core';
2
+ import {
3
+ SchematicTestRunner,
4
+ UnitTestTree,
5
+ } from '@angular-devkit/schematics/testing';
6
+ import * as path from 'path';
7
+ import { ApplicationOptions } from '../application/application.schema';
8
+ import { ModuleOptions } from '../module/module.schema';
9
+ import { ProviderOptions } from './provider.schema';
10
+
11
+ describe('Provider Factory', () => {
12
+ const runner: SchematicTestRunner = new SchematicTestRunner(
13
+ '.',
14
+ path.join(process.cwd(), 'src/collection.json'),
15
+ );
16
+ it('should manage name only', () => {
17
+ const options: ProviderOptions = {
18
+ name: 'foo',
19
+ skipImport: true,
20
+ };
21
+ const tree: UnitTestTree = runner.runSchematic('provider', options);
22
+ const files: string[] = tree.files;
23
+ expect(files.find(filename => filename === '/foo.ts')).toBeDefined();
24
+ expect(files.find(filename => filename === '/foo.spec.ts')).toBeDefined();
25
+ expect(tree.readContent('/foo.ts')).toEqual(
26
+ "import { Injectable } from '@nestjs/common';\n" +
27
+ '\n' +
28
+ '@Injectable()\n' +
29
+ 'export class Foo {}\n',
30
+ );
31
+ });
32
+ it('should manage name has a path', () => {
33
+ const options: ProviderOptions = {
34
+ name: 'bar/foo',
35
+ skipImport: true,
36
+ };
37
+ const tree: UnitTestTree = runner.runSchematic('provider', options);
38
+ const files: string[] = tree.files;
39
+ expect(files.find(filename => filename === '/bar/foo.ts')).toBeDefined();
40
+ expect(
41
+ files.find(filename => filename === '/bar/foo.spec.ts'),
42
+ ).toBeDefined();
43
+ expect(tree.readContent('/bar/foo.ts')).toEqual(
44
+ "import { Injectable } from '@nestjs/common';\n" +
45
+ '\n' +
46
+ '@Injectable()\n' +
47
+ 'export class Foo {}\n',
48
+ );
49
+ });
50
+ it('should manage name and path', () => {
51
+ const options: ProviderOptions = {
52
+ name: 'foo',
53
+ path: 'bar',
54
+ skipImport: true,
55
+ };
56
+ const tree: UnitTestTree = runner.runSchematic('provider', options);
57
+ const files: string[] = tree.files;
58
+ expect(files.find(filename => filename === '/bar/foo.ts')).toBeDefined();
59
+ expect(
60
+ files.find(filename => filename === '/bar/foo.spec.ts'),
61
+ ).toBeDefined();
62
+ expect(tree.readContent('/bar/foo.ts')).toEqual(
63
+ "import { Injectable } from '@nestjs/common';\n" +
64
+ '\n' +
65
+ '@Injectable()\n' +
66
+ 'export class Foo {}\n',
67
+ );
68
+ });
69
+ it('should manage name to dasherize', () => {
70
+ const options: ProviderOptions = {
71
+ name: 'bar-foo',
72
+ skipImport: true,
73
+ };
74
+ const tree: UnitTestTree = runner.runSchematic('provider', options);
75
+ const files: string[] = tree.files;
76
+ expect(files.find(filename => filename === '/bar-foo.ts')).toBeDefined();
77
+ expect(
78
+ files.find(filename => filename === '/bar-foo.spec.ts'),
79
+ ).toBeDefined();
80
+ expect(tree.readContent('/bar-foo.ts')).toEqual(
81
+ "import { Injectable } from '@nestjs/common';\n" +
82
+ '\n' +
83
+ '@Injectable()\n' +
84
+ 'export class BarFoo {}\n',
85
+ );
86
+ });
87
+ it('should manage javascript file', () => {
88
+ const options: ProviderOptions = {
89
+ name: 'foo',
90
+ skipImport: true,
91
+ language: 'js',
92
+ };
93
+ const tree: UnitTestTree = runner.runSchematic('provider', options);
94
+ const files: string[] = tree.files;
95
+ expect(files.find(filename => filename === '/foo.js')).toBeDefined();
96
+ expect(files.find(filename => filename === '/foo.spec.js')).toBeDefined();
97
+ expect(tree.readContent('/foo.js')).toEqual(
98
+ "import { Injectable } from '@nestjs/common';\n" +
99
+ '\n' +
100
+ '@Injectable()\n' +
101
+ 'export class Foo {}\n',
102
+ );
103
+ });
104
+ it('should manage declaration in app module', () => {
105
+ const app: ApplicationOptions = {
106
+ name: '',
107
+ };
108
+ let tree: UnitTestTree = runner.runSchematic('application', app);
109
+ const options: ProviderOptions = {
110
+ name: 'foo',
111
+ };
112
+ tree = runner.runSchematic('provider', options, tree);
113
+ expect(tree.readContent(normalize('/src/app.module.ts'))).toEqual(
114
+ "import { Module } from '@nestjs/common';\n" +
115
+ "import { AppController } from './app.controller';\n" +
116
+ "import { AppService } from './app.service';\n" +
117
+ "import { Foo } from './foo';\n" +
118
+ '\n' +
119
+ '@Module({\n' +
120
+ ' imports: [],\n' +
121
+ ' controllers: [AppController],\n' +
122
+ ' providers: [AppService, Foo],\n' +
123
+ '})\n' +
124
+ 'export class AppModule {}\n',
125
+ );
126
+ });
127
+ it('should manage declaration in foo module', () => {
128
+ const app: ApplicationOptions = {
129
+ name: '',
130
+ };
131
+ let tree: UnitTestTree = runner.runSchematic('application', app);
132
+ const module: ModuleOptions = {
133
+ name: 'foo',
134
+ };
135
+ tree = runner.runSchematic('module', module, tree);
136
+ const options: ProviderOptions = {
137
+ name: 'foo',
138
+ path: 'foo',
139
+ };
140
+ tree = runner.runSchematic('provider', options, tree);
141
+ expect(tree.readContent(normalize('/src/foo/foo.module.ts'))).toEqual(
142
+ "import { Module } from '@nestjs/common';\n" +
143
+ "import { Foo } from './foo';\n" +
144
+ '\n' +
145
+ '@Module({\n' +
146
+ ' providers: [Foo]\n' +
147
+ '})\n' +
148
+ 'export class FooModule {}\n',
149
+ );
150
+ });
151
+ });
@@ -0,0 +1,89 @@
1
+ import { join, Path, strings } from '@angular-devkit/core';
2
+ import {
3
+ apply,
4
+ branchAndMerge,
5
+ chain,
6
+ filter,
7
+ mergeWith,
8
+ move,
9
+ noop,
10
+ Rule,
11
+ SchematicContext,
12
+ SchematicsException,
13
+ template,
14
+ Tree,
15
+ url,
16
+ } from '@angular-devkit/schematics';
17
+ import {
18
+ DeclarationOptions,
19
+ ModuleDeclarator,
20
+ } from '../../utils/module.declarator';
21
+ import { ModuleFinder } from '../../utils/module.finder';
22
+ import { Location, NameParser } from '../../utils/name.parser';
23
+ import { mergeSourceRoot } from '../../utils/source-root.helpers';
24
+ import { ProviderOptions } from './provider.schema';
25
+
26
+ export function main(options: ProviderOptions): Rule {
27
+ options = transform(options);
28
+ return (tree: Tree, context: SchematicContext) => {
29
+ return branchAndMerge(
30
+ chain([
31
+ mergeSourceRoot(options),
32
+ addDeclarationToModule(options),
33
+ mergeWith(generate(options)),
34
+ ]),
35
+ )(tree, context);
36
+ };
37
+ }
38
+
39
+ function transform(options: ProviderOptions): ProviderOptions {
40
+ const target: ProviderOptions = Object.assign({}, options);
41
+ target.metadata = 'providers';
42
+
43
+ if (!target.name) {
44
+ throw new SchematicsException('Option (name) is required.');
45
+ }
46
+ const location: Location = new NameParser().parse(target);
47
+ target.name = strings.dasherize(location.name);
48
+ target.path = strings.dasherize(location.path);
49
+ target.language = target.language !== undefined ? target.language : 'ts';
50
+
51
+ target.path = target.flat
52
+ ? target.path
53
+ : join(target.path as Path, target.name);
54
+ return target;
55
+ }
56
+
57
+ function generate(options: ProviderOptions) {
58
+ return (context: SchematicContext) =>
59
+ apply(url(join('./files' as Path, options.language)), [
60
+ options.spec ? noop() : filter(path => !path.endsWith('.spec.ts')),
61
+ template({
62
+ ...strings,
63
+ ...options,
64
+ }),
65
+ move(options.path),
66
+ ])(context);
67
+ }
68
+
69
+ function addDeclarationToModule(options: ProviderOptions): Rule {
70
+ return (tree: Tree) => {
71
+ if (options.skipImport !== undefined && options.skipImport) {
72
+ return tree;
73
+ }
74
+ options.module = new ModuleFinder(tree).find({
75
+ name: options.name,
76
+ path: options.path as Path,
77
+ });
78
+ if (!options.module) {
79
+ return tree;
80
+ }
81
+ const content = tree.read(options.module).toString();
82
+ const declarator: ModuleDeclarator = new ModuleDeclarator();
83
+ tree.overwrite(
84
+ options.module,
85
+ declarator.declare(content, options as DeclarationOptions),
86
+ );
87
+ return tree;
88
+ };
89
+ }
@@ -0,0 +1,44 @@
1
+ import { Path } from '@angular-devkit/core';
2
+
3
+ export interface ProviderOptions {
4
+ /**
5
+ * The name of the provider.
6
+ */
7
+ name: string;
8
+ /**
9
+ * The path to create the provider.
10
+ */
11
+ path?: string;
12
+ /**
13
+ * The path to insert the provider declaration.
14
+ */
15
+ module?: Path;
16
+ /**
17
+ * Directive to insert declaration in module.
18
+ */
19
+ skipImport?: boolean;
20
+ /**
21
+ * Metadata name affected by declaration insertion.
22
+ */
23
+ metadata?: string;
24
+ /**
25
+ * Nest element type name
26
+ */
27
+ type?: string;
28
+ /**
29
+ * Application language.
30
+ */
31
+ language?: string;
32
+ /**
33
+ * The source root path
34
+ */
35
+ sourceRoot?: string;
36
+ /**
37
+ * Specifies if a spec file is generated.
38
+ */
39
+ spec?: boolean;
40
+ /**
41
+ * Flag to indicate if a directory is created.
42
+ */
43
+ flat?: boolean;
44
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "id": "SchematicsNestProvider",
4
+ "title": "Nest Provider Options Schema",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "The name of the provider.",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "What name would you like to use for the provider?"
15
+ },
16
+ "path": {
17
+ "type": "string",
18
+ "format": "path",
19
+ "description": "The path to create the provider."
20
+ },
21
+ "language": {
22
+ "type": "string",
23
+ "description": "Nest provider language (ts/js)."
24
+ },
25
+ "sourceRoot": {
26
+ "type": "string",
27
+ "description": "Nest provider 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,4 @@
1
+ import { Resolver } from '@nestjs/graphql';
2
+
3
+ @Resolver('<%= classify(name) %>')
4
+ export class <%= classify(name) %>Resolver {}
@@ -0,0 +1,18 @@
1
+ import { Test } from '@nestjs/testing';
2
+ import { <%= classify(name) %>Resolver } from './<%= name %>.resolver';
3
+
4
+ describe('<%= classify(name) %>Resolver', () => {
5
+ let resolver;
6
+
7
+ beforeEach(async () => {
8
+ const module = await Test.createTestingModule({
9
+ providers: [<%= classify(name) %>Resolver],
10
+ }).compile();
11
+
12
+ resolver = module.get(<%= classify(name) %>Resolver);
13
+ });
14
+
15
+ it('should be defined', () => {
16
+ expect(resolver).toBeDefined();
17
+ });
18
+ });
@@ -0,0 +1,18 @@
1
+ import { Test, TestingModule } from '@nestjs/testing';
2
+ import { <%= classify(name) %>Resolver } from './<%= name %>.resolver';
3
+
4
+ describe('<%= classify(name) %>Resolver', () => {
5
+ let resolver: <%= classify(name) %>Resolver;
6
+
7
+ beforeEach(async () => {
8
+ const module: TestingModule = await Test.createTestingModule({
9
+ providers: [<%= classify(name) %>Resolver],
10
+ }).compile();
11
+
12
+ resolver = module.get<<%= classify(name) %>Resolver>(<%= classify(name) %>Resolver);
13
+ });
14
+
15
+ it('should be defined', () => {
16
+ expect(resolver).toBeDefined();
17
+ });
18
+ });
@@ -0,0 +1,4 @@
1
+ import { Resolver } from '@nestjs/graphql';
2
+
3
+ @Resolver('<%= classify(name) %>')
4
+ export class <%= classify(name) %>Resolver {}
@@ -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) {