@rxap/plugin-nestjs 16.1.0-dev.9 → 16.1.1-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +385 -0
  2. package/README.md +127 -1
  3. package/generators.json +90 -0
  4. package/package.json +64 -42
  5. package/src/executors/package-json/executor.js +8 -0
  6. package/src/executors/package-json/executor.js.map +1 -1
  7. package/src/executors/package-json/schema.d.ts +3 -1
  8. package/src/executors/package-json/schema.json +11 -1
  9. package/src/generators/feature-microservice/generator.d.ts +4 -0
  10. package/src/generators/feature-microservice/generator.js +17 -0
  11. package/src/generators/feature-microservice/generator.js.map +1 -0
  12. package/src/generators/feature-microservice/index.d.ts +2 -0
  13. package/src/generators/feature-microservice/index.js +7 -0
  14. package/src/generators/feature-microservice/index.js.map +1 -0
  15. package/src/generators/feature-microservice/schema.d.ts +5 -0
  16. package/src/generators/feature-microservice/schema.json +23 -0
  17. package/src/generators/frontend-microservice/generator.d.ts +4 -0
  18. package/src/generators/frontend-microservice/generator.js +17 -0
  19. package/src/generators/frontend-microservice/generator.js.map +1 -0
  20. package/src/generators/frontend-microservice/index.d.ts +2 -0
  21. package/src/generators/frontend-microservice/index.js +7 -0
  22. package/src/generators/frontend-microservice/index.js.map +1 -0
  23. package/src/generators/frontend-microservice/schema.d.ts +6 -0
  24. package/src/generators/frontend-microservice/schema.json +29 -0
  25. package/src/generators/health-indicator/generator.d.ts +4 -0
  26. package/src/generators/health-indicator/generator.js +31 -0
  27. package/src/generators/health-indicator/generator.js.map +1 -0
  28. package/src/generators/health-indicator/index.d.ts +2 -0
  29. package/src/generators/health-indicator/index.js +7 -0
  30. package/src/generators/health-indicator/index.js.map +1 -0
  31. package/src/generators/health-indicator/schema.d.ts +5 -0
  32. package/src/generators/health-indicator/schema.json +32 -0
  33. package/src/generators/health-indicator-init/generator.d.ts +4 -0
  34. package/src/generators/health-indicator-init/generator.js +35 -0
  35. package/src/generators/health-indicator-init/generator.js.map +1 -0
  36. package/src/generators/health-indicator-init/index.d.ts +2 -0
  37. package/src/generators/health-indicator-init/index.js +7 -0
  38. package/src/generators/health-indicator-init/index.js.map +1 -0
  39. package/src/generators/health-indicator-init/schema.d.ts +4 -0
  40. package/src/generators/health-indicator-init/schema.json +22 -0
  41. package/src/generators/init/generator.js +8 -5
  42. package/src/generators/init/generator.js.map +1 -1
  43. package/src/generators/init/schema.d.ts +2 -0
  44. package/src/generators/init/schema.json +10 -0
  45. package/src/generators/init-application/extract-existing-config-validation.d.ts +3 -0
  46. package/src/generators/init-application/extract-existing-config-validation.js +47 -0
  47. package/src/generators/init-application/extract-existing-config-validation.js.map +1 -0
  48. package/src/generators/init-application/files/shared/Dockerfile +35 -0
  49. package/src/generators/init-application/generator.js +569 -30
  50. package/src/generators/init-application/generator.js.map +1 -1
  51. package/src/generators/init-application/schema.d.ts +5 -2
  52. package/src/generators/init-application/schema.json +36 -21
  53. package/src/generators/init-library/generator.js +36 -7
  54. package/src/generators/init-library/generator.js.map +1 -1
  55. package/src/generators/init-library/schema.d.ts +2 -0
  56. package/src/generators/init-library/schema.json +10 -0
  57. package/src/generators/jwt/generator.d.ts +4 -0
  58. package/src/generators/jwt/generator.js +76 -0
  59. package/src/generators/jwt/generator.js.map +1 -0
  60. package/src/generators/jwt/index.d.ts +2 -0
  61. package/src/generators/jwt/index.js +7 -0
  62. package/src/generators/jwt/index.js.map +1 -0
  63. package/src/generators/jwt/schema.d.ts +4 -0
  64. package/src/generators/jwt/schema.json +18 -0
  65. package/src/generators/microservice/generator.d.ts +4 -0
  66. package/src/generators/microservice/generator.js +26 -0
  67. package/src/generators/microservice/generator.js.map +1 -0
  68. package/src/generators/microservice/index.d.ts +2 -0
  69. package/src/generators/microservice/index.js +7 -0
  70. package/src/generators/microservice/index.js.map +1 -0
  71. package/src/generators/microservice/schema.d.ts +6 -0
  72. package/src/generators/microservice/schema.json +27 -0
  73. package/src/generators/open-api/generator.d.ts +4 -0
  74. package/src/generators/open-api/generator.js +74 -0
  75. package/src/generators/open-api/generator.js.map +1 -0
  76. package/src/generators/open-api/index.d.ts +2 -0
  77. package/src/generators/open-api/index.js +7 -0
  78. package/src/generators/open-api/index.js.map +1 -0
  79. package/src/generators/open-api/schema.d.ts +4 -0
  80. package/src/generators/open-api/schema.json +18 -0
  81. package/src/generators/sentry/generator.d.ts +4 -0
  82. package/src/generators/sentry/generator.js +152 -0
  83. package/src/generators/sentry/generator.js.map +1 -0
  84. package/src/generators/sentry/index.d.ts +2 -0
  85. package/src/generators/sentry/index.js +7 -0
  86. package/src/generators/sentry/index.js.map +1 -0
  87. package/src/generators/sentry/schema.d.ts +6 -0
  88. package/src/generators/sentry/schema.json +32 -0
  89. package/src/generators/swagger/files/environments/environment.swagger.ts__tmpl__ +1 -0
  90. package/src/generators/swagger/files/swagger.ts__tmpl__ +17 -15
  91. package/src/generators/swagger/generator.js +10 -17
  92. package/src/generators/swagger/generator.js.map +1 -1
  93. package/src/generators/swagger/schema.d.ts +1 -0
  94. package/src/generators/swagger/schema.json +3 -0
  95. package/src/generators/validator/generator.d.ts +4 -0
  96. package/src/generators/validator/generator.js +14 -0
  97. package/src/generators/validator/generator.js.map +1 -0
  98. package/src/generators/validator/index.d.ts +2 -0
  99. package/src/generators/validator/index.js +7 -0
  100. package/src/generators/validator/index.js.map +1 -0
  101. package/src/generators/validator/schema.d.ts +4 -0
  102. package/src/generators/validator/schema.json +22 -0
  103. package/src/lib/skip-non-nest-project.js +3 -3
  104. package/src/lib/skip-non-nest-project.js.map +1 -1
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "OpenApi",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "string",
9
+ "description": ""
10
+ },
11
+ "overwrite": {
12
+ "type": "boolean"
13
+ }
14
+ },
15
+ "required": [
16
+ "project"
17
+ ]
18
+ }
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { SentryGeneratorSchema } from './schema';
3
+ export declare function sentryGenerator(tree: Tree, options: SentryGeneratorSchema): Promise<void>;
4
+ export default sentryGenerator;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sentryGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ts_morph_1 = require("@rxap/ts-morph");
6
+ const workspace_ts_morph_1 = require("@rxap/workspace-ts-morph");
7
+ const workspace_utilities_1 = require("@rxap/workspace-utilities");
8
+ const ts_morph_2 = require("ts-morph");
9
+ function CoerceSentryModule(sourceFile, options) {
10
+ (0, ts_morph_1.CoerceNestModuleImport)(sourceFile, {
11
+ overwrite: options.overwrite,
12
+ moduleName: 'SentryModule',
13
+ structures: [
14
+ {
15
+ moduleSpecifier: '@rxap/nest-sentry',
16
+ namedImports: ['SentryModule'],
17
+ },
18
+ {
19
+ moduleSpecifier: '@nestjs/config',
20
+ namedImports: ['ConfigService', 'ConfigModule'],
21
+ },
22
+ {
23
+ namedImports: ['environment'],
24
+ moduleSpecifier: '../environments/environment',
25
+ },
26
+ {
27
+ namedImports: ['GetLogLevels'],
28
+ moduleSpecifier: '@rxap/nest-utilities',
29
+ },
30
+ {
31
+ namedImports: ['SentryOptionsFactory'],
32
+ moduleSpecifier: '@rxap/nest-sentry',
33
+ },
34
+ ],
35
+ importWriter: w => {
36
+ w.writeLine('SentryModule.forRootAsync(');
37
+ ts_morph_2.Writers.object({
38
+ imports: '[ ConfigModule ]',
39
+ inject: '[ ConfigService ]',
40
+ useFactory: 'SentryOptionsFactory(environment)',
41
+ })(w);
42
+ w.write(',');
43
+ ts_morph_2.Writers.object({
44
+ logLevels: 'GetLogLevels()',
45
+ })(w);
46
+ w.write(')');
47
+ },
48
+ });
49
+ }
50
+ function CoerceSentryInterceptorOptionsProvider(sourceFile) {
51
+ (0, ts_morph_1.CoerceNestModuleProvider)(sourceFile, {
52
+ providerObject: {
53
+ provide: 'SENTRY_INTERCEPTOR_OPTIONS',
54
+ useValue: ts_morph_2.Writers.object({
55
+ filters: w1 => {
56
+ w1.write('[');
57
+ ts_morph_2.Writers.object({
58
+ type: 'HttpException',
59
+ filter: '(exception: HttpException) => 500 > exception.getStatus()',
60
+ })(w1);
61
+ w1.write(']');
62
+ },
63
+ }),
64
+ },
65
+ structures: [
66
+ {
67
+ namedImports: ['SENTRY_INTERCEPTOR_OPTIONS'],
68
+ moduleSpecifier: '@rxap/nest-sentry',
69
+ },
70
+ {
71
+ namedImports: ['HttpException'],
72
+ moduleSpecifier: '@nestjs/common',
73
+ },
74
+ ],
75
+ });
76
+ }
77
+ function CoerceAppInterceptorProvider(sourceFile) {
78
+ (0, ts_morph_1.CoerceNestModuleProvider)(sourceFile, {
79
+ providerObject: {
80
+ provide: 'APP_INTERCEPTOR',
81
+ useClass: 'SentryInterceptor',
82
+ },
83
+ structures: [
84
+ {
85
+ namedImports: ['APP_INTERCEPTOR'],
86
+ moduleSpecifier: '@nestjs/core',
87
+ },
88
+ {
89
+ namedImports: ['SentryInterceptor'],
90
+ moduleSpecifier: '@rxap/nest-sentry',
91
+ },
92
+ ],
93
+ });
94
+ }
95
+ function UpdateAppModule(tree, options) {
96
+ (0, workspace_ts_morph_1.TsMorphNestProjectTransform)(tree, {
97
+ project: options.project,
98
+ }, (project, [sourceFile]) => {
99
+ CoerceSentryModule(sourceFile, options);
100
+ CoerceSentryInterceptorOptionsProvider(sourceFile);
101
+ CoerceAppInterceptorProvider(sourceFile);
102
+ }, ['/app/app.module.ts']);
103
+ }
104
+ function UpdateAppConfig(tree, options, projectName) {
105
+ (0, workspace_ts_morph_1.TsMorphNestProjectTransform)(tree, {
106
+ project: options.project,
107
+ }, (project, [sourceFile]) => {
108
+ (0, ts_morph_1.CoerceNestAppConfig)(sourceFile, {
109
+ itemList: [
110
+ {
111
+ name: 'SENTRY_DSN',
112
+ defaultValue: options.dsn,
113
+ },
114
+ {
115
+ name: 'SENTRY_ENABLED',
116
+ defaultValue: 'environment.sentry?.enabled ?? false',
117
+ },
118
+ {
119
+ name: 'SENTRY_ENVIRONMENT',
120
+ },
121
+ {
122
+ name: 'SENTRY_RELEASE',
123
+ },
124
+ {
125
+ name: 'SENTRY_SERVER_NAME',
126
+ defaultValue: `process.env.ROOT_DOMAIN ?? '${projectName}'`,
127
+ },
128
+ {
129
+ name: 'SENTRY_DEBUG',
130
+ defaultValue: 'environment.sentry?.debug ?? false',
131
+ },
132
+ ],
133
+ overwrite: options.overwrite,
134
+ });
135
+ (0, ts_morph_1.CoerceImports)(sourceFile, {
136
+ namedImports: ['environment'],
137
+ moduleSpecifier: '../environments/environment',
138
+ });
139
+ }, ['/app/app.config.ts?']);
140
+ }
141
+ function sentryGenerator(tree, options) {
142
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
143
+ UpdateAppModule(tree, options);
144
+ UpdateAppConfig(tree, options, options.project);
145
+ yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, '@sentry/node', 'latest', { soft: true });
146
+ yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, '@sentry/hub', 'latest', { soft: true });
147
+ yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, '@rxap/nest-sentry', 'latest', { soft: true });
148
+ });
149
+ }
150
+ exports.sentryGenerator = sentryGenerator;
151
+ exports.default = sentryGenerator;
152
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/sentry/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const schematic: (generatorOptions: import("./schema").SentryGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default schematic;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const generator_1 = require("./generator");
5
+ const schematic = (0, devkit_1.convertNxGenerator)(generator_1.default);
6
+ exports.default = schematic;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/sentry/index.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,2CAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,2BAAkB,EAAC,mBAAS,CAAC,CAAC;AAChD,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SentryGeneratorSchema {
2
+ project: string;
3
+ dsn?: string;
4
+ required?: boolean;
5
+ overwrite?: boolean;
6
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "Sentry",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "string",
9
+ "description": "The name of the project.",
10
+ "$default": {
11
+ "$source": "projectName"
12
+ },
13
+ "x-prompt": "Which project should be extend with sentry support?"
14
+ },
15
+ "dsn": {
16
+ "type": "string",
17
+ "description": "Default sentry dsn"
18
+ },
19
+ "required": {
20
+ "type": "boolean",
21
+ "description": "Whether or not the sentry dsn should be required to start the application"
22
+ },
23
+ "overwrite": {
24
+ "type": "boolean",
25
+ "default": false,
26
+ "description": "Whether to overwrite existing files"
27
+ }
28
+ },
29
+ "required": [
30
+ "project"
31
+ ]
32
+ }
@@ -2,6 +2,7 @@ import { Environment } from '@rxap/nest-utilities';
2
2
 
3
3
  export const environment: Environment = {
4
4
  name: 'swagger',
5
+ app: '<%= projectName %>',
5
6
  production: true,
6
7
  swagger: true,
7
8
  };
@@ -1,19 +1,21 @@
1
1
  import { NestFactory } from '@nestjs/core';
2
- import { AppModule } from './app/app.module';
3
- import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
2
+ import {
3
+ DocumentBuilder,
4
+ SwaggerModule,
5
+ } from '@nestjs/swagger';
4
6
  import { writeFileSync } from 'fs';
5
7
  import { join } from 'path';
8
+ import { AppModule } from './app/app.module';
6
9
 
7
- NestFactory.create(AppModule).then(app => {
8
- const options = new DocumentBuilder().build();
9
- const document = SwaggerModule.createDocument(app, options);
10
-
11
- const outputPath = join(__dirname,'openapi.json')
12
- console.log('write to: ' + outputPath);
13
-
14
- writeFileSync(outputPath, JSON.stringify(document, null, 2));
15
-
16
- return app.close();
17
- }).catch(e => console.error('failed to generate openapi: ' + e.message))
18
- .then(() => console.log('DONE'));
19
-
10
+ NestFactory
11
+ .create(AppModule)
12
+ .then(app => {
13
+ const options = new DocumentBuilder().build();
14
+ const document = SwaggerModule.createDocument(app, options);
15
+ const outputPath = join(__dirname, 'openapi.json');
16
+ console.log('write to: ' + outputPath);
17
+ writeFileSync(outputPath, JSON.stringify(document, null, 2));
18
+ return app.close();
19
+ })
20
+ .catch(e => console.error('failed to generate openapi: ' + e.message))
21
+ .then(() => console.log('DONE'));
@@ -40,7 +40,7 @@ function updateProjectTargets(project) {
40
40
  (0, workspace_utilities_1.CoerceTarget)(project, 'swagger-generate', {
41
41
  executor: '@nx/js:node',
42
42
  outputs: [
43
- `${outputPath}/open-api.json`,
43
+ `{workspaceRoot}/${outputPath}/openapi.json`,
44
44
  ],
45
45
  options: {
46
46
  buildTarget: `${project.name}:swagger-build`,
@@ -49,31 +49,24 @@ function updateProjectTargets(project) {
49
49
  });
50
50
  }
51
51
  function updateNxDefaults(tree) {
52
- var _a, _b, _c, _d;
53
- var _e, _f, _g;
54
52
  const nxJson = (0, devkit_1.readNxJson)(tree);
55
- (_a = nxJson.tasksRunnerOptions) !== null && _a !== void 0 ? _a : (nxJson.tasksRunnerOptions = {});
56
- (_b = (_e = nxJson.tasksRunnerOptions)['default']) !== null && _b !== void 0 ? _b : (_e['default'] = {
57
- runner: 'nx-cloud',
58
- options: {},
59
- });
60
- (_c = (_f = nxJson.tasksRunnerOptions['default']).options) !== null && _c !== void 0 ? _c : (_f.options = {});
61
- (_d = (_g = nxJson.tasksRunnerOptions['default'].options)['cacheableOperations']) !== null && _d !== void 0 ? _d : (_g['cacheableOperations'] = []);
62
- if (!nxJson.tasksRunnerOptions['default'].options['cacheableOperations'].includes('swagger-build')) {
63
- nxJson.tasksRunnerOptions['default'].options['cacheableOperations'].push('swagger-build');
64
- }
65
- if (!nxJson.tasksRunnerOptions['default'].options['cacheableOperations'].includes('swagger-generate')) {
66
- nxJson.tasksRunnerOptions['default'].options['cacheableOperations'].push('swagger-generate');
67
- }
53
+ (0, workspace_utilities_1.CoerceNxJsonCacheableOperation)(nxJson, 'swagger-build', 'swagger-generate');
68
54
  (0, devkit_1.updateNxJson)(tree, nxJson);
69
55
  }
70
56
  function swaggerGenerator(tree, options) {
71
57
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
72
58
  const projectRoot = (0, generator_utilities_1.GetProjectRoot)(tree, options.project);
73
- (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), (0, path_1.join)(projectRoot, 'src'), { tmpl: '' });
59
+ (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), (0, path_1.join)(projectRoot, 'src'), {
60
+ tmpl: '',
61
+ projectName: options.project,
62
+ });
74
63
  const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
75
64
  updateNxDefaults(tree);
76
65
  updateProjectTargets(project);
66
+ const projectSourceRoot = project.sourceRoot;
67
+ if (!projectSourceRoot) {
68
+ throw new Error('The selected project has no sourceRoot');
69
+ }
77
70
  (0, devkit_1.updateProjectConfiguration)(tree, options.project, project);
78
71
  yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, 'swagger-ui-express', 'latest', { soft: true });
79
72
  yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, '@nestjs/swagger', 'latest', { soft: true });
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/swagger/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/swagger/generator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export interface SwaggerGeneratorSchema {
2
+ overwrite?: boolean;
2
3
  project: string;
3
4
  }
@@ -11,6 +11,9 @@
11
11
  "$source": "projectName"
12
12
  },
13
13
  "x-prompt": "Which project should be initialized?"
14
+ },
15
+ "overwrite": {
16
+ "type": "boolean"
14
17
  }
15
18
  },
16
19
  "required": [
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { ValidatorGeneratorSchema } from './schema';
3
+ export declare function validatorGenerator(tree: Tree, options: ValidatorGeneratorSchema): Promise<void>;
4
+ export default validatorGenerator;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatorGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const workspace_utilities_1 = require("@rxap/workspace-utilities");
6
+ function validatorGenerator(tree, options) {
7
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
8
+ yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, 'class-validator', 'latest', { soft: true });
9
+ yield (0, workspace_utilities_1.AddPackageJsonDependency)(tree, 'class-transformer', 'latest', { soft: true });
10
+ });
11
+ }
12
+ exports.validatorGenerator = validatorGenerator;
13
+ exports.default = validatorGenerator;
14
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/validator/generator.ts"],"names":[],"mappings":";;;;AACA,mEAAqE;AAGrE,SAAsB,kBAAkB,CACtC,IAAU,EACV,OAAiC;;QAEjC,MAAM,IAAA,8CAAwB,EAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,IAAA,8CAAwB,EAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;CAAA;AAND,gDAMC;AAED,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const schematic: (generatorOptions: import("./schema").ValidatorGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default schematic;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const generator_1 = require("./generator");
5
+ const schematic = (0, devkit_1.convertNxGenerator)(generator_1.default);
6
+ exports.default = schematic;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/nestjs/src/generators/validator/index.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,2CAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,2BAAkB,EAAC,mBAAS,CAAC,CAAC;AAChD,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface ValidatorGeneratorSchema {
2
+ overwrite?: boolean;
3
+ project: string;
4
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "Validator",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "string",
9
+ "description": "The name of the project.",
10
+ "$default": {
11
+ "$source": "projectName"
12
+ },
13
+ "x-prompt": "Which project should be extend with sentry support?"
14
+ },
15
+ "overwrite": {
16
+ "type": "boolean"
17
+ }
18
+ },
19
+ "required": [
20
+ "project"
21
+ ]
22
+ }
@@ -2,15 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SkipNonNestProject = void 0;
4
4
  const generator_utilities_1 = require("@rxap/generator-utilities");
5
+ const workspace_utilities_1 = require("@rxap/workspace-utilities");
5
6
  function SkipNonNestProject(tree, options, project, projectName) {
6
- var _a, _b, _c, _d;
7
7
  if ((0, generator_utilities_1.SkipProject)(tree, options, project, projectName)) {
8
8
  return true;
9
9
  }
10
- if (!((_a = project.tags) === null || _a === void 0 ? void 0 : _a.includes('nest')) && !((_b = project.tags) === null || _b === void 0 ? void 0 : _b.includes('nestjs'))) {
10
+ if (!(0, workspace_utilities_1.IsNestJsProject)(project)) {
11
11
  return true;
12
12
  }
13
- if (((_c = project.tags) === null || _c === void 0 ? void 0 : _c.includes('plugin')) || ((_d = project.tags) === null || _d === void 0 ? void 0 : _d.includes('schematic'))) {
13
+ if ((0, workspace_utilities_1.IsPluginProject)(project) || (0, workspace_utilities_1.IsSchematicProject)(project)) {
14
14
  return true;
15
15
  }
16
16
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"skip-non-nest-project.js","sourceRoot":"","sources":["../../../../../../packages/plugin/nestjs/src/lib/skip-non-nest-project.ts"],"names":[],"mappings":";;;AAIA,mEAGmC;AAMnC,SAAgB,kBAAkB,CAChC,IAAU,EACV,OAA2B,EAC3B,OAA6B,EAC7B,WAAmB;;IAEnB,IAAI,IAAA,iCAAW,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;QACpD,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA,EAAE;QACxE,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,QAAQ,CAAC,MAAI,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,WAAW,CAAC,CAAA,EAAE;QAC3E,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAhBD,gDAgBC"}
1
+ {"version":3,"file":"skip-non-nest-project.js","sourceRoot":"","sources":["../../../../../../packages/plugin/nestjs/src/lib/skip-non-nest-project.ts"],"names":[],"mappings":";;;AAIA,mEAGmC;AACnC,mEAImC;AAMnC,SAAgB,kBAAkB,CAChC,IAAU,EACV,OAA2B,EAC3B,OAA6B,EAC7B,WAAmB;IAEnB,IAAI,IAAA,iCAAW,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;QACpD,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,IAAA,qCAAe,EAAC,OAAO,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,IAAI,IAAA,qCAAe,EAAC,OAAO,CAAC,IAAI,IAAA,wCAAkB,EAAC,OAAO,CAAC,EAAE;QAC3D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAhBD,gDAgBC"}