@solidstarters/solid-code-builder 1.0.20 → 1.0.22

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 (93) hide show
  1. package/dist/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.d.ts +4 -0
  2. package/dist/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.js +61 -2
  3. package/dist/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.js.map +1 -1
  4. package/dist/files/generate-model/services/__model@dasherize__.service.ts +4 -4
  5. package/files/generate-model/services/__model@dasherize__.service.ts +4 -4
  6. package/package.json +5 -2
  7. package/publish.js +16 -0
  8. package/src/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.ts +71 -2
  9. package/dto_additional_fields_duplicate_fix.diff +0 -40
  10. package/src/code-builder/index.js +0 -178
  11. package/src/code-builder/index_spec.js +0 -46
  12. package/src/code-builder/lib/field/FieldManager.js +0 -236
  13. package/src/code-builder/lib/field/decorator-managers/dto/ArrayDecoratorManager.js +0 -107
  14. package/src/code-builder/lib/field/decorator-managers/dto/BigIntDecoratorManager.js +0 -100
  15. package/src/code-builder/lib/field/decorator-managers/dto/BooleanDecoratorManager.js +0 -102
  16. package/src/code-builder/lib/field/decorator-managers/dto/DateDecoratorManager.js +0 -106
  17. package/src/code-builder/lib/field/decorator-managers/dto/DecimalDecoratorManager.js +0 -112
  18. package/src/code-builder/lib/field/decorator-managers/dto/EmailDecoratorManager.js +0 -99
  19. package/src/code-builder/lib/field/decorator-managers/dto/IntDecoratorManager.js +0 -100
  20. package/src/code-builder/lib/field/decorator-managers/dto/JsonDecoratorManager.js +0 -100
  21. package/src/code-builder/lib/field/decorator-managers/dto/LengthDecoratorManager.js +0 -104
  22. package/src/code-builder/lib/field/decorator-managers/dto/MaxDecoratorManager.js +0 -103
  23. package/src/code-builder/lib/field/decorator-managers/dto/MaxLengthDecoratorManager.js +0 -103
  24. package/src/code-builder/lib/field/decorator-managers/dto/MinDecoratorManager.js +0 -102
  25. package/src/code-builder/lib/field/decorator-managers/dto/MinLengthDecoratorManager.js +0 -103
  26. package/src/code-builder/lib/field/decorator-managers/dto/NumberDecoratorManager.js +0 -112
  27. package/src/code-builder/lib/field/decorator-managers/dto/OptionalDecoratorManager.js +0 -104
  28. package/src/code-builder/lib/field/decorator-managers/dto/RegexDecoratorManager.js +0 -102
  29. package/src/code-builder/lib/field/decorator-managers/dto/RequiredDecoratorManager.js +0 -100
  30. package/src/code-builder/lib/field/decorator-managers/dto/StringDecoratorManager.js +0 -99
  31. package/src/code-builder/lib/field/decorator-managers/dto/TransformDecoratorManager.js +0 -102
  32. package/src/code-builder/lib/field/decorator-managers/dto/ValidateNestedDecoratorManager.js +0 -140
  33. package/src/code-builder/lib/field/decorator-managers/entity/ColumnDecoratorManager.js +0 -178
  34. package/src/code-builder/lib/field/decorator-managers/entity/IndexDecoratorManager.js +0 -79
  35. package/src/code-builder/lib/field/decorator-managers/entity/JoinTableDecoratorManager.js +0 -118
  36. package/src/code-builder/lib/field/decorator-managers/entity/ManyToManyDecoratorManager.js +0 -175
  37. package/src/code-builder/lib/field/decorator-managers/entity/ManyToOneDecoratorManager.js +0 -179
  38. package/src/code-builder/lib/field/decorator-managers/entity/OneToManyDecoratorManager.js +0 -155
  39. package/src/code-builder/lib/field/decorator-managers/entity/UniqueIndexDecoratorManager.js +0 -174
  40. package/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForDto.js +0 -345
  41. package/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForEntity.js +0 -373
  42. package/src/code-builder/lib/field/field-managers/base/DeleteType.js +0 -11
  43. package/src/code-builder/lib/field/field-managers/bigint/BigIntFieldHandler.js +0 -33
  44. package/src/code-builder/lib/field/field-managers/bigint/BigIntFieldManagerForDto.js +0 -81
  45. package/src/code-builder/lib/field/field-managers/bigint/BigIntFieldManagerForEntity.js +0 -55
  46. package/src/code-builder/lib/field/field-managers/boolean/BooleanFieldHandler.js +0 -33
  47. package/src/code-builder/lib/field/field-managers/boolean/BooleanFieldManagerForDto.js +0 -75
  48. package/src/code-builder/lib/field/field-managers/boolean/BooleanFieldManagerForEntity.js +0 -51
  49. package/src/code-builder/lib/field/field-managers/computed/ComputedFieldHandler.js +0 -30
  50. package/src/code-builder/lib/field/field-managers/computed/ComputedFieldManagerForEntity.js +0 -33
  51. package/src/code-builder/lib/field/field-managers/date/DateFieldHandler.js +0 -33
  52. package/src/code-builder/lib/field/field-managers/date/DateFieldManagerForDto.js +0 -81
  53. package/src/code-builder/lib/field/field-managers/date/DateFieldManagerForEntity.js +0 -59
  54. package/src/code-builder/lib/field/field-managers/decimal/DecimalFieldHandler.js +0 -33
  55. package/src/code-builder/lib/field/field-managers/decimal/DecimalFieldManagerForDto.js +0 -77
  56. package/src/code-builder/lib/field/field-managers/decimal/DecimalFieldManagerForEntity.js +0 -53
  57. package/src/code-builder/lib/field/field-managers/email/EmailFieldHandler.js +0 -34
  58. package/src/code-builder/lib/field/field-managers/email/EmailFieldManagerForDto.js +0 -72
  59. package/src/code-builder/lib/field/field-managers/email/EmailFieldManagerForEntity.js +0 -44
  60. package/src/code-builder/lib/field/field-managers/int/IntFieldHandler.js +0 -33
  61. package/src/code-builder/lib/field/field-managers/int/IntFieldManagerForDto.js +0 -76
  62. package/src/code-builder/lib/field/field-managers/int/IntFieldManagerForEntity.js +0 -52
  63. package/src/code-builder/lib/field/field-managers/json/JsonFieldHandler.js +0 -34
  64. package/src/code-builder/lib/field/field-managers/json/JsonFieldManagerForDto.js +0 -57
  65. package/src/code-builder/lib/field/field-managers/json/JsonFieldManagerForEntity.js +0 -21
  66. package/src/code-builder/lib/field/field-managers/long-text/LongTextFieldHandler.js +0 -34
  67. package/src/code-builder/lib/field/field-managers/long-text/LongTextFieldManagerForDto.js +0 -63
  68. package/src/code-builder/lib/field/field-managers/long-text/LongTextFieldManagerForEntity.js +0 -34
  69. package/src/code-builder/lib/field/field-managers/media/MediaFieldHandler.js +0 -33
  70. package/src/code-builder/lib/field/field-managers/media/MediaFieldManagerForDto.js +0 -72
  71. package/src/code-builder/lib/field/field-managers/media/MediaFieldManagerForEntity.js +0 -57
  72. package/src/code-builder/lib/field/field-managers/no-ops/NoOpsFieldHandler.js +0 -27
  73. package/src/code-builder/lib/field/field-managers/no-ops/NoOpsFieldManagerForDto.js +0 -75
  74. package/src/code-builder/lib/field/field-managers/no-ops/NoOpsFieldManagerForEntity.js +0 -35
  75. package/src/code-builder/lib/field/field-managers/password/PasswordFieldHandler.js +0 -34
  76. package/src/code-builder/lib/field/field-managers/password/PasswordFieldManagerForDto.js +0 -121
  77. package/src/code-builder/lib/field/field-managers/password/PasswordFieldManagerForEntity.js +0 -37
  78. package/src/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldHandler.js +0 -33
  79. package/src/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForDto.js +0 -366
  80. package/src/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForEntity.js +0 -158
  81. package/src/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldHandler.js +0 -33
  82. package/src/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForDto.js +0 -294
  83. package/src/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForEntity.js +0 -177
  84. package/src/code-builder/lib/field/field-managers/rich-text/RichTextFieldHandler.js +0 -34
  85. package/src/code-builder/lib/field/field-managers/rich-text/RichTextFieldManagerForDto.js +0 -63
  86. package/src/code-builder/lib/field/field-managers/rich-text/RichTextFieldManagerForEntity.js +0 -34
  87. package/src/code-builder/lib/field/field-managers/short-text/ShortTextFieldHandler.js +0 -34
  88. package/src/code-builder/lib/field/field-managers/short-text/ShortTextFieldManagerForDto.js +0 -63
  89. package/src/code-builder/lib/field/field-managers/short-text/ShortTextFieldManagerForEntity.js +0 -37
  90. package/src/code-builder/lib/field/field-managers/uuid/UUIDFieldHandler.js +0 -34
  91. package/src/code-builder/lib/field/field-managers/uuid/UUIDFieldManagerForDto.js +0 -15
  92. package/src/code-builder/lib/field/field-managers/uuid/UUIDFieldManagerForEntity.js +0 -33
  93. package/src/code-builder/lib/model/helpers.js +0 -407
@@ -17,8 +17,12 @@ export declare class ApiPropertyDecoratorManager implements DecoratorManager {
17
17
  decoratorImports(): Change[];
18
18
  updateDecorator(): [PropertyDeclaration, Change[]];
19
19
  createDecorator(existingDecorator: ts.Decorator | undefined): ts.Decorator;
20
+ private createDecoratorArguments;
21
+ private existingDecoratorOptions;
20
22
  private findDecorator;
21
23
  private filterOtherDecorators;
22
24
  private filterNonDecorators;
23
25
  private containsIdentifierName;
26
+ private buildApiPropertyDecoratorOptions;
27
+ private buildApiPropertyOptionsCode;
24
28
  }
@@ -20,7 +20,7 @@ class ApiPropertyDecoratorManager {
20
20
  buildDecorator() {
21
21
  const fieldSourceLines = [];
22
22
  const changes = [];
23
- fieldSourceLines.push(`@${this.decoratorName()}()`);
23
+ fieldSourceLines.push(`@${this.decoratorName()}(${this.buildApiPropertyOptionsCode()})`);
24
24
  changes.push(...this.decoratorImports());
25
25
  return {
26
26
  filePath: this.options.source.fileName,
@@ -58,6 +58,7 @@ class ApiPropertyDecoratorManager {
58
58
  return [updatedProperty, changes];
59
59
  }
60
60
  createDecorator(existingDecorator) {
61
+ var _a;
61
62
  // Capture the existing validation options
62
63
  let validationOptions = [];
63
64
  if (existingDecorator !== undefined) {
@@ -72,9 +73,18 @@ class ApiPropertyDecoratorManager {
72
73
  validationOptions.push(...existingObjectLiteralExpression.properties);
73
74
  }
74
75
  }
76
+ const existingOptions = this.existingDecoratorOptions(existingDecorator);
77
+ const newOptions = [];
78
+ if (this.options.field.description) {
79
+ newOptions.push(typescript_1.default.factory.createPropertyAssignment('description', typescript_1.default.factory.createStringLiteral((_a = this.options.field) === null || _a === void 0 ? void 0 : _a.description)));
80
+ }
81
+ const mergedOptions = [
82
+ ...existingOptions.filter((option) => !(typescript_1.default.isPropertyAssignment(option) && option.name.getText() === 'description')),
83
+ ...newOptions,
84
+ ];
75
85
  // Re-create the column decorator with the merged column decorator options
76
86
  const decoratorIdentifier = typescript_1.default.factory.createIdentifier(this.decoratorName());
77
- const argumentsArray = [];
87
+ const argumentsArray = this.createDecoratorArguments(mergedOptions);
78
88
  // const length = ts.factory.createNumericLiteral(this.options.length);
79
89
  // argumentsArray.push(length);
80
90
  if (validationOptions.length > 0) {
@@ -84,6 +94,28 @@ class ApiPropertyDecoratorManager {
84
94
  const call = typescript_1.default.factory.createCallExpression(decoratorIdentifier, undefined, argumentsArray);
85
95
  return typescript_1.default.factory.createDecorator(call);
86
96
  }
97
+ createDecoratorArguments(options) {
98
+ const argumentsArray = [];
99
+ if (options.length > 0) {
100
+ const optionsObjectLiteral = typescript_1.default.factory.createObjectLiteralExpression(options);
101
+ argumentsArray.push(optionsObjectLiteral);
102
+ }
103
+ return argumentsArray;
104
+ }
105
+ existingDecoratorOptions(existingDecorator) {
106
+ const options = [];
107
+ if (existingDecorator) {
108
+ const existingCallExpression = existingDecorator.expression;
109
+ if (existingCallExpression.arguments.length > 0) {
110
+ const firstArgument = existingCallExpression.arguments[0];
111
+ if (!typescript_1.default.isObjectLiteralExpression(firstArgument)) {
112
+ throw new Error('Api Property decorator 1st argument must be an object literal');
113
+ }
114
+ options.push(...firstArgument.properties);
115
+ }
116
+ }
117
+ return options;
118
+ }
87
119
  findDecorator(name, existingModifiers) {
88
120
  return existingModifiers ? existingModifiers.filter((m) => (m.kind === typescript_1.default.SyntaxKind.Decorator)).map(m => m).filter(m => this.containsIdentifierName(m, name)).pop() : undefined;
89
121
  }
@@ -98,6 +130,33 @@ class ApiPropertyDecoratorManager {
98
130
  const identifier = callExpression.expression;
99
131
  return identifier.text === identifierName;
100
132
  }
133
+ buildApiPropertyDecoratorOptions() {
134
+ var _a;
135
+ const options = new Map();
136
+ if (this.options.field.description) {
137
+ options.set('description', (_a = this.options.field) === null || _a === void 0 ? void 0 : _a.description);
138
+ }
139
+ return options;
140
+ }
141
+ buildApiPropertyOptionsCode() {
142
+ const options = this.buildApiPropertyDecoratorOptions();
143
+ const keys = Array.from(options.keys());
144
+ if (keys.length === 0) {
145
+ return '';
146
+ }
147
+ const optionsString = keys
148
+ .filter((key) => options.get(key) !== null)
149
+ .map((key) => {
150
+ if (typeof options.get(key) === 'string') {
151
+ return `${key}: "${options.get(key)}"`;
152
+ }
153
+ else {
154
+ return `${key}: ${options.get(key)}`;
155
+ }
156
+ })
157
+ .join(', ');
158
+ return `{ ${optionsString} }`;
159
+ }
101
160
  }
102
161
  exports.ApiPropertyDecoratorManager = ApiPropertyDecoratorManager;
103
162
  //# sourceMappingURL=ApiPropertyDecoratorManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiPropertyDecoratorManager.js","sourceRoot":"","sources":["../../../../../../src/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiPropertyDecoratorManager.js","sourceRoot":"","sources":["../../../../../../src/code-builder/lib/field/decorator-managers/dto/ApiPropertyDecoratorManager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
3
- import { DiscoveryService } from "@nestjs/core";
3
+ import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
4
  import { EntityManager, Repository } from 'typeorm';
5
5
 
6
6
  import { CRUDService } from '<%= calculateModuleFileImportPath(module,"src/services/crud.service") %>';
@@ -20,17 +20,17 @@ export class <%= classify(model) %>Service extends CRUDService<<%= classify(mode
20
20
  constructor(
21
21
  readonly modelMetadataService: ModelMetadataService,
22
22
  readonly moduleMetadataService: ModuleMetadataService,
23
- readonly mediaStorageProviderService: MediaStorageProviderMetadataService,
24
23
  readonly configService: ConfigService,
25
24
  readonly fileService: FileService,
26
- readonly mediaService: MediaService,
27
25
  readonly discoveryService: DiscoveryService,
28
26
  readonly crudHelperService: CrudHelperService,
29
27
  @InjectEntityManager()
30
28
  readonly entityManager: EntityManager,
31
29
  @InjectRepository(<%= classify(model) %>, '<%= dataSource %>')
32
30
  readonly repo: Repository<<%= classify(model) %>>,
31
+ readonly moduleRef: ModuleRef
32
+
33
33
  ) {
34
- super(modelMetadataService, moduleMetadataService, mediaStorageProviderService, configService, fileService, mediaService, discoveryService, crudHelperService,entityManager, repo, '<%= model %>', '<%= module %>');
34
+ super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, '<%= model %>', '<%= module %>', moduleRef);
35
35
  }
36
36
  }
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
3
- import { DiscoveryService } from "@nestjs/core";
3
+ import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
4
  import { EntityManager, Repository } from 'typeorm';
5
5
 
6
6
  import { CRUDService } from '<%= calculateModuleFileImportPath(module,"src/services/crud.service") %>';
@@ -20,17 +20,17 @@ export class <%= classify(model) %>Service extends CRUDService<<%= classify(mode
20
20
  constructor(
21
21
  readonly modelMetadataService: ModelMetadataService,
22
22
  readonly moduleMetadataService: ModuleMetadataService,
23
- readonly mediaStorageProviderService: MediaStorageProviderMetadataService,
24
23
  readonly configService: ConfigService,
25
24
  readonly fileService: FileService,
26
- readonly mediaService: MediaService,
27
25
  readonly discoveryService: DiscoveryService,
28
26
  readonly crudHelperService: CrudHelperService,
29
27
  @InjectEntityManager()
30
28
  readonly entityManager: EntityManager,
31
29
  @InjectRepository(<%= classify(model) %>, '<%= dataSource %>')
32
30
  readonly repo: Repository<<%= classify(model) %>>,
31
+ readonly moduleRef: ModuleRef
32
+
33
33
  ) {
34
- super(modelMetadataService, moduleMetadataService, mediaStorageProviderService, configService, fileService, mediaService, discoveryService, crudHelperService,entityManager, repo, '<%= model %>', '<%= module %>');
34
+ super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, '<%= model %>', '<%= module %>', moduleRef);
35
35
  }
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-code-builder",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "This package is use to generate code for the @solidstarters projects",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -12,7 +12,10 @@
12
12
  "test": "npm run build && jasmine src/**/*_spec.js",
13
13
  "postbuild": "copyfiles './files/**/*' dist/",
14
14
  "clean": "rimraf dist",
15
- "prepare": "npm run build"
15
+ "prepare": "npm run build",
16
+ "publish:patch": "node publish.js patch",
17
+ "publish:minor": "node publish.js minor",
18
+ "publish:major": "node publish.js major"
16
19
  },
17
20
  "keywords": [
18
21
  "schematics"
package/publish.js ADDED
@@ -0,0 +1,16 @@
1
+ const { execSync } = require("child_process");
2
+
3
+ const versionType = process.argv[2] || "patch"; // Default to patch if not specified
4
+
5
+ try {
6
+ console.log(`🔄 Updating package version (${versionType})...`);
7
+ execSync(`npm version ${versionType}`, { stdio: "inherit" });
8
+
9
+ console.log("📦 Publishing package...");
10
+ execSync("npm publish", { stdio: "inherit" });
11
+
12
+ console.log("✅ Published successfully!");
13
+ } catch (error) {
14
+ console.error("❌ Error:", error.message);
15
+ process.exit(1);
16
+ }
@@ -22,7 +22,7 @@ export class ApiPropertyDecoratorManager implements DecoratorManager {
22
22
  buildDecorator(): PartialAddFieldChange {
23
23
  const fieldSourceLines = [];
24
24
  const changes: Change[] = [];
25
- fieldSourceLines.push(`@${this.decoratorName()}()`);
25
+ fieldSourceLines.push(`@${this.decoratorName()}(${this.buildApiPropertyOptionsCode()})`);
26
26
  changes.push(...this.decoratorImports());
27
27
  return {
28
28
  filePath: this.options.source.fileName,
@@ -92,9 +92,27 @@ export class ApiPropertyDecoratorManager implements DecoratorManager {
92
92
  }
93
93
  }
94
94
 
95
+ const existingOptions: ts.ObjectLiteralElementLike[] = this.existingDecoratorOptions(existingDecorator);
96
+
97
+ const newOptions: ts.ObjectLiteralElementLike[] = [];
98
+ if (this.options.field.description) {
99
+ newOptions.push(
100
+ ts.factory.createPropertyAssignment(
101
+ 'description',
102
+ ts.factory.createStringLiteral(this.options.field?.description)
103
+ )
104
+ );
105
+ }
106
+ const mergedOptions = [
107
+ ...existingOptions.filter(
108
+ (option) => !(ts.isPropertyAssignment(option) && option.name.getText() === 'description')
109
+ ),
110
+ ...newOptions,
111
+ ];
112
+
95
113
  // Re-create the column decorator with the merged column decorator options
96
114
  const decoratorIdentifier = ts.factory.createIdentifier(this.decoratorName());
97
- const argumentsArray: ts.Expression[] = [];
115
+ const argumentsArray: ts.Expression[] = this.createDecoratorArguments(mergedOptions);
98
116
  // const length = ts.factory.createNumericLiteral(this.options.length);
99
117
  // argumentsArray.push(length);
100
118
  if (validationOptions.length > 0) {
@@ -106,6 +124,30 @@ export class ApiPropertyDecoratorManager implements DecoratorManager {
106
124
 
107
125
  }
108
126
 
127
+ private createDecoratorArguments(options: ts.ObjectLiteralElementLike[]) {
128
+ const argumentsArray: ts.Expression[] = [];
129
+ if (options.length > 0) {
130
+ const optionsObjectLiteral = ts.factory.createObjectLiteralExpression(options);
131
+ argumentsArray.push(optionsObjectLiteral);
132
+ }
133
+ return argumentsArray;
134
+ }
135
+
136
+ private existingDecoratorOptions(existingDecorator: ts.Decorator | undefined): ts.ObjectLiteralElementLike[] {
137
+ const options: ts.ObjectLiteralElementLike[] = [];
138
+ if (existingDecorator) {
139
+ const existingCallExpression = existingDecorator.expression as ts.CallExpression;
140
+ if (existingCallExpression.arguments.length > 0) {
141
+ const firstArgument = existingCallExpression.arguments[0];
142
+ if (!ts.isObjectLiteralExpression(firstArgument)) {
143
+ throw new Error('Api Property decorator 1st argument must be an object literal');
144
+ }
145
+ options.push(...firstArgument.properties);
146
+ }
147
+ }
148
+ return options;
149
+ }
150
+
109
151
  private findDecorator(name: string, existingModifiers: ts.NodeArray<ts.ModifierLike> | undefined): ts.Decorator | undefined {
110
152
  return existingModifiers ? existingModifiers.filter((m) => (m.kind === ts.SyntaxKind.Decorator)).map(m => m as ts.Decorator).filter(m => this.containsIdentifierName(m, name)).pop() : undefined;
111
153
  }
@@ -124,4 +166,31 @@ export class ApiPropertyDecoratorManager implements DecoratorManager {
124
166
  return identifier.text === identifierName;
125
167
  }
126
168
 
169
+ private buildApiPropertyDecoratorOptions(): Map<string, any> {
170
+ const options: Map<string, any> = new Map<string, any>();
171
+ if (this.options.field.description) {
172
+ options.set('description', this.options.field?.description);
173
+ }
174
+ return options;
175
+ }
176
+
177
+ private buildApiPropertyOptionsCode(): string {
178
+ const options = this.buildApiPropertyDecoratorOptions();
179
+ const keys = Array.from(options.keys());
180
+ if (keys.length === 0) {
181
+ return '';
182
+ }
183
+ const optionsString = keys
184
+ .filter((key) => options.get(key) !== null)
185
+ .map((key) => {
186
+ if (typeof options.get(key) === 'string') {
187
+ return `${key}: "${options.get(key)}"`;
188
+ } else {
189
+ return `${key}: ${options.get(key)}`;
190
+ }
191
+ })
192
+ .join(', ');
193
+ return `{ ${optionsString} }`;
194
+ }
195
+
127
196
  }
@@ -1,40 +0,0 @@
1
- diff --git a/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForDto.ts b/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForDto.ts
2
- index 7809d32..3ca4f0b 100644
3
- --- a/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForDto.ts
4
- +++ b/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForDto.ts
5
- @@ -88,7 +88,7 @@ export abstract class BaseFieldManagerForDto implements FieldManager {
6
-
7
- removeField(): FieldChange[] {
8
- const fieldChanges: FieldChange[] = [];
9
- - console.log(`Dto removeField ${this.fieldName()} called ...`);
10
- + console.log(`${this.options.sourceType} Dto removeField ${this.fieldName()} called ...`);
11
- fieldChanges.push(this.removeFieldFor(this.fieldName(), this.source));
12
- if (this.isAdditionalFieldRequired()) {
13
- fieldChanges.push(...this.removeAdditionalField());
14
- @@ -288,7 +288,7 @@ export abstract class BaseFieldManagerForDto implements FieldManager {
15
- updateField(): FieldChange[] {
16
- const fieldChanges: FieldChange[] = [];
17
-
18
- - console.log(`\ncreate Dto updateField ${this.fieldName()} called ...`);
19
- + console.log(`\n${this.options.sourceType} Dto updateField ${this.fieldName()} called ...`);
20
-
21
- const fieldName = this.fieldName();
22
- const fieldType = this.fieldType().node(this.field);
23
- @@ -307,11 +307,13 @@ export abstract class BaseFieldManagerForDto implements FieldManager {
24
- // Get the related field property declaration node
25
- fieldChanges.push(...this.addOrUpdateAdditionalField()); // TODO This needs to be refactored and renamed to updateAdditionalField, since it is confusing
26
- }
27
- - else {
28
- - // fieldChanges.push(this.removeAdditionalField()); //FIXME temporary fix, to check update module command
29
- - }
30
-
31
- - return fieldChanges;
32
- + // Since updateFieldInternal updates the class node, and additional field updates are done on the updated class node, need to only use the latest field change
33
- + const latestFieldChange = fieldChanges.pop();
34
- + if (!latestFieldChange) {
35
- + throw new Error(`Field change not found for field ${this.fieldName()}`);
36
- + }
37
- + return [latestFieldChange];
38
- }
39
-
40
- protected addAdditionalField(): FieldChange[] {
@@ -1,178 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.updateChecksum = exports.showAST = exports.removeFields = exports.updateFields = exports.addFields = exports.addModel = exports.refreshModel = exports.addModule = void 0;
30
- const strings_1 = require("@angular-devkit/core/src/utils/strings");
31
- const schematics_1 = require("@angular-devkit/schematics");
32
- const generateModelHelpers = __importStar(require("./lib/model/helpers"));
33
- const helpers_1 = require("./lib/model/helpers");
34
- const helpers_2 = require("./lib/model/helpers");
35
- const typescript_1 = __importDefault(require("@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript"));
36
- const generateModelUtils = Object.assign({ dasherize: strings_1.dasherize, classify: strings_1.classify }, generateModelHelpers);
37
- // You don't have to export the function as default. You can also have more than one rule factory
38
- // per file.
39
- function addModule(options) {
40
- return (_tree, _context) => {
41
- //Link to nestjs schematic
42
- return (0, schematics_1.chain)([
43
- (0, schematics_1.externalSchematic)('@nestjs/schematics', 'module', {
44
- name: options === null || options === void 0 ? void 0 : options.module,
45
- }),
46
- updateChecksum(options === null || options === void 0 ? void 0 : options.module, options === null || options === void 0 ? void 0 : options.generateChecksum, ...generateModelHelpers.getSourceFilePathsAffected(generateModelHelpers.Command.AddModule, options)),
47
- ]);
48
- };
49
- }
50
- exports.addModule = addModule;
51
- function refreshModel(options) {
52
- return (tree, _context) => {
53
- // If the model related code is not present, then add it by call addModel, else call update field with the fields provided
54
- const modelEntityFilePath = `src/${options.module}/entities/${(0, strings_1.dasherize)(options.model)}.entity.ts`;
55
- // console.log('Model Entity File Path: ', modelEntityFilePath);
56
- if (!tree.exists(modelEntityFilePath)) {
57
- // console.log('Model does not exist, adding model');
58
- return addModel(options)(tree, _context);
59
- }
60
- else {
61
- // console.log('Model does not exist, updating fields');
62
- return updateFields(options)(tree, _context);
63
- }
64
- };
65
- }
66
- exports.refreshModel = refreshModel;
67
- function addModel(options) {
68
- return (tree, context) => {
69
- //Link to a templates folder
70
- const sourceTemplates = (0, schematics_1.apply)((0, schematics_1.url)('../../files/generate-model'), [
71
- (0, schematics_1.template)(Object.assign(Object.assign({}, generateModelUtils), options)),
72
- (0, schematics_1.move)(`src/${options.module}`),
73
- ]);
74
- return (0, schematics_1.branchAndMerge)((0, schematics_1.chain)([
75
- addModuleImportsAndMetadata(options),
76
- (0, schematics_1.mergeWith)(sourceTemplates, schematics_1.MergeStrategy.Overwrite),
77
- updateChecksum(options === null || options === void 0 ? void 0 : options.module, options === null || options === void 0 ? void 0 : options.generateChecksum, ...generateModelHelpers.getSourceFilePathsAffected(generateModelHelpers.Command.AddModel, options)),
78
- addFields(options),
79
- // removeFields(options),
80
- ]))(tree, context);
81
- };
82
- }
83
- exports.addModel = addModel;
84
- function normalizeFieldType(fields) {
85
- // if field is a string, convert it to an array
86
- if (typeof fields === 'string') {
87
- fields = [fields];
88
- }
89
- return fields;
90
- }
91
- function addFields(options) {
92
- return (tree, _context) => {
93
- const normalizedFields = normalizeFieldType(options.fields);
94
- const fields = normalizedFields.map((f) => JSON.parse(f));
95
- fields.forEach((field) => {
96
- (0, helpers_1.addField)(tree, options, field);
97
- });
98
- return tree;
99
- };
100
- }
101
- exports.addFields = addFields;
102
- function updateFields(options) {
103
- return (tree, _context) => {
104
- const normalizedFields = normalizeFieldType(options.fields);
105
- const fields = normalizedFields.map((f) => JSON.parse(f));
106
- (options === null || options === void 0 ? void 0 : options.generateChecksum) ? generateModelHelpers.takeBackupIfChecksumsMismatch(tree, options.module) : "no-ops";
107
- fields.forEach((field) => {
108
- generateModelHelpers.updateField(tree, options, field);
109
- });
110
- return tree;
111
- };
112
- }
113
- exports.updateFields = updateFields;
114
- function removeFields(options) {
115
- return (tree, _context) => {
116
- const normalizedFields = normalizeFieldType(options.fields);
117
- const fields = normalizedFields.map((f) => JSON.parse(f));
118
- (options === null || options === void 0 ? void 0 : options.generateChecksum) ? generateModelHelpers.takeBackupIfChecksumsMismatch(tree, options.module) : "no-ops";
119
- fields.forEach((field) => {
120
- (0, helpers_2.removeField)(tree, options, field);
121
- });
122
- return tree;
123
- };
124
- }
125
- exports.removeFields = removeFields;
126
- function addModuleImportsAndMetadata(options) {
127
- return (tree, _context) => {
128
- // Handle the module imports
129
- const moduleFilePath = `src/${(0, strings_1.dasherize)(options.module)}/${(0, strings_1.dasherize)(options.module)}.module.ts`;
130
- const moduleImports = [
131
- { symbolName: `TypeOrmModule`, importPath: `@nestjs/typeorm` },
132
- generateModelHelpers.getSolidImports(options.model, generateModelHelpers.SolidProviderType.Entity),
133
- generateModelHelpers.getSolidImports(options.model, generateModelHelpers.SolidProviderType.Service),
134
- generateModelHelpers.getSolidImports(options.model, generateModelHelpers.SolidProviderType.Controller),
135
- ];
136
- generateModelHelpers.addImports(tree, moduleFilePath, moduleImports);
137
- // Handle the module metadata
138
- const moduleMetadata = [
139
- generateModelHelpers.getModuleMetadata(options.model, generateModelHelpers.ModuleMetadataType.TypeOrmImports),
140
- generateModelHelpers.getModuleMetadata(options.model, generateModelHelpers.ModuleMetadataType.Controllers),
141
- generateModelHelpers.getModuleMetadata(options.model, generateModelHelpers.ModuleMetadataType.Providers),
142
- ];
143
- generateModelHelpers.addModuleMetadata(tree, moduleFilePath, moduleMetadata);
144
- return tree;
145
- };
146
- }
147
- function showAST(options) {
148
- return (tree, _context) => {
149
- showASTinfo(tree, options.name);
150
- return tree;
151
- };
152
- }
153
- exports.showAST = showAST;
154
- function showASTinfo(tree, filePath) {
155
- //Show the source tree of the target file
156
- const sourceNode = typescript_1.default.createSourceFile(filePath, tree.readText(filePath), typescript_1.default.ScriptTarget.ES2015, true);
157
- showTree(sourceNode);
158
- }
159
- function showTree(sourceNode) {
160
- function printAllChildren(node, depth) {
161
- console.log(`${depth}.`.repeat(depth), typescript_1.default.SyntaxKind[node.kind]);
162
- if (node.getChildCount() === 0) {
163
- console.log(`${depth}.`.repeat(depth) + ' Text: ' + node.getText());
164
- }
165
- node.getChildren().forEach(child => printAllChildren(child, depth + 1));
166
- }
167
- printAllChildren(sourceNode, 0);
168
- }
169
- function updateChecksum(moduleName, generateChecksum = false, ...filePaths) {
170
- return (tree, _context) => {
171
- if (!generateChecksum) {
172
- return tree;
173
- }
174
- return generateModelHelpers.handleUpdateChecksums(tree, moduleName, ...filePaths);
175
- };
176
- }
177
- exports.updateChecksum = updateChecksum;
178
- //# sourceMappingURL=index.js.map
@@ -1,46 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- const schematics_1 = require("@angular-devkit/schematics");
36
- const testing_1 = require("@angular-devkit/schematics/testing");
37
- const path = __importStar(require("path"));
38
- const collectionPath = path.join(__dirname, '../collection.json');
39
- describe('code-builder', () => {
40
- it('works', () => __awaiter(void 0, void 0, void 0, function* () {
41
- const runner = new testing_1.SchematicTestRunner('schematics', collectionPath);
42
- const tree = yield runner.runSchematic('code-builder', {}, schematics_1.Tree.empty());
43
- expect(tree.files).toEqual([]);
44
- }));
45
- });
46
- //# sourceMappingURL=index_spec.js.map