@solidstarters/solid-code-builder 1.0.11 → 1.0.12
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.
- package/dist/code-builder/lib/field/FieldManager.d.ts +2 -1
- package/dist/code-builder/lib/field/FieldManager.js +18 -5
- package/dist/code-builder/lib/field/FieldManager.js.map +1 -1
- package/dist/code-builder/lib/field/decorator-managers/entity/IndexDecoratorManager.js +1 -1
- package/dist/code-builder/lib/field/decorator-managers/entity/IndexDecoratorManager.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/base/BaseFieldManagerForEntity.d.ts +3 -0
- package/dist/code-builder/lib/field/field-managers/base/BaseFieldManagerForEntity.js +15 -3
- package/dist/code-builder/lib/field/field-managers/base/BaseFieldManagerForEntity.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldHandler.d.ts +13 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldHandler.js +33 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldHandler.js.map +1 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForDto.d.ts +4 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForDto.js +9 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForDto.js.map +1 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForEntity.d.ts +4 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForEntity.js +8 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForEntity.js.map +1 -0
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForDto.d.ts +1 -16
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForDto.js +15 -156
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForDto.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForEntity.d.ts +1 -20
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForEntity.js +0 -109
- package/dist/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForEntity.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForDto.d.ts +2 -17
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForDto.js +4 -175
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForDto.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForEntity.d.ts +1 -22
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForEntity.js +1 -133
- package/dist/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForEntity.js.map +1 -1
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldHandler.d.ts +13 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldHandler.js +33 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldHandler.js.map +1 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.d.ts +34 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.js +202 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.js.map +1 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForEntity.d.ts +9 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForEntity.js +43 -0
- package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForEntity.js.map +1 -0
- package/package.json +1 -1
- package/src/code-builder/lib/field/FieldManager.ts +19 -6
- package/src/code-builder/lib/field/decorator-managers/entity/IndexDecoratorManager.ts +1 -1
- package/src/code-builder/lib/field/field-managers/base/BaseFieldManagerForEntity.ts +19 -3
- package/src/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldHandler.ts +52 -0
- package/src/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForDto.ts +8 -0
- package/src/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldManagerForEntity.ts +8 -0
- package/src/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForDto.ts +16 -189
- package/src/code-builder/lib/field/field-managers/relation/ManyToManyRelationFieldManagerForEntity.ts +2 -147
- package/src/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForDto.ts +6 -215
- package/src/code-builder/lib/field/field-managers/relation/ManyToOneRelationFieldManagerForEntity.ts +3 -174
- package/src/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldHandler.ts +52 -0
- package/src/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.ts +247 -0
- package/src/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForEntity.ts +51 -0
package/dist/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OneToManyRelationFieldManagerForDto = void 0;
|
|
7
|
+
const strings_1 = require("@angular-devkit/core/src/utils/strings");
|
|
8
|
+
const typescript_1 = __importDefault(require("@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript"));
|
|
9
|
+
const ArrayDecoratorManager_1 = require("../../decorator-managers/dto/ArrayDecoratorManager");
|
|
10
|
+
const OptionalDecoratorManager_1 = require("../../decorator-managers/dto/OptionalDecoratorManager");
|
|
11
|
+
const StringDecoratorManager_1 = require("../../decorator-managers/dto/StringDecoratorManager");
|
|
12
|
+
const TransformDecoratorManager_1 = require("../../decorator-managers/dto/TransformDecoratorManager");
|
|
13
|
+
const FieldManager_1 = require("../../FieldManager");
|
|
14
|
+
const BaseFieldManagerForDto_1 = require("../base/BaseFieldManagerForDto");
|
|
15
|
+
class OneToManyRelationFieldManagerForDto extends BaseFieldManagerForDto_1.BaseFieldManagerForDto {
|
|
16
|
+
isJson() {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
isBoolean() {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
constructor(tree, moduleName, modelName, field, options) {
|
|
23
|
+
super(tree, moduleName, modelName, Object.assign(Object.assign({}, field), { required: false }), options);
|
|
24
|
+
this.decoratorManagers = [...this.decoratorManagers, ...this.getFieldDecoratorManagers(this.field, this.source, FieldManager_1.DecoratorType.Array, FieldManager_1.DecoratorType.ValidateNested)];
|
|
25
|
+
this.decoratorManagers.push(new TransformDecoratorManager_1.TransformDecoratorManager({ isTransform: true, type: this.transformType(), source: this.source, field: field }));
|
|
26
|
+
}
|
|
27
|
+
isString() {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
isNumber() {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
isInt() {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
isDecimal() {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
isApplyRegex() {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
isApplyRequired() {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
isApplyMin() {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
isApplyMax() {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
isDate() {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
isTransform() {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
// This field type is used in the case of one-to-many relation, when we generate the inverse field in the related entity
|
|
58
|
+
fieldType() {
|
|
59
|
+
const type = this.transformType(); //TODO Discuss if this needs to be Create Or Update DTO
|
|
60
|
+
const text = `${type}[]`;
|
|
61
|
+
return {
|
|
62
|
+
text: text,
|
|
63
|
+
node: (_field) => typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier(type), undefined)),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
transformType() {
|
|
67
|
+
return `Update${(0, strings_1.classify)(this.field.relationModelSingularName)}Dto`;
|
|
68
|
+
}
|
|
69
|
+
addField() {
|
|
70
|
+
const fieldChanges = super.addField();
|
|
71
|
+
if (fieldChanges.length > 0 && this.modelName !== this.field.relationModelSingularName) {
|
|
72
|
+
const mainField = fieldChanges[0];
|
|
73
|
+
mainField.changes.push(this.relatedFieldImport());
|
|
74
|
+
}
|
|
75
|
+
return fieldChanges;
|
|
76
|
+
}
|
|
77
|
+
addAdditionalField() {
|
|
78
|
+
const fieldChanges = [];
|
|
79
|
+
// Add the ids field to the main entity
|
|
80
|
+
fieldChanges.push(this.addAdditionalIdsField());
|
|
81
|
+
// Add the command field to the main entity
|
|
82
|
+
fieldChanges.push(this.addAdditionalCommandField());
|
|
83
|
+
return fieldChanges;
|
|
84
|
+
}
|
|
85
|
+
addAdditionalIdsField() {
|
|
86
|
+
const fieldName = `${this.field.name}Ids`;
|
|
87
|
+
const fieldType = "number[]";
|
|
88
|
+
const source = this.source;
|
|
89
|
+
const field = this.field;
|
|
90
|
+
const modelName = this.modelName;
|
|
91
|
+
const decoratorManagers = [
|
|
92
|
+
new OptionalDecoratorManager_1.OptionalDecoratorManager({ isApplyOptional: true, optional: true, source: source, field: field }),
|
|
93
|
+
new ArrayDecoratorManager_1.ArrayDecoratorManager({ isArray: true, source: source, field: field })
|
|
94
|
+
];
|
|
95
|
+
return this.addFieldInternal(fieldName, fieldType, decoratorManagers, field, modelName, source);
|
|
96
|
+
}
|
|
97
|
+
addAdditionalCommandField() {
|
|
98
|
+
const fieldName = `${this.field.name}Command`;
|
|
99
|
+
const fieldType = "string";
|
|
100
|
+
const source = this.source;
|
|
101
|
+
const field = this.field;
|
|
102
|
+
const modelName = this.modelName;
|
|
103
|
+
const decoratorManagers = [
|
|
104
|
+
new StringDecoratorManager_1.StringDecoratorManager({ isString: true, source: source, field: field }),
|
|
105
|
+
new OptionalDecoratorManager_1.OptionalDecoratorManager({ isApplyOptional: true, optional: true, source: source, field: field }),
|
|
106
|
+
// TODO pending @IsEnum(RelationFieldsCommand)
|
|
107
|
+
];
|
|
108
|
+
return this.addFieldInternal(fieldName, fieldType, decoratorManagers, field, modelName, source);
|
|
109
|
+
}
|
|
110
|
+
updateField() {
|
|
111
|
+
const fieldChanges = super.updateField();
|
|
112
|
+
//FIXME This might not be required, since addField might never be called from within updateField
|
|
113
|
+
// const containsAddFieldChanges = fieldChanges.filter((change) => !(change instanceof InsertChange));
|
|
114
|
+
// if (containsAddFieldChanges) return fieldChanges;
|
|
115
|
+
//This line is required to add import changes in the update context
|
|
116
|
+
// if (fieldChanges.length > 0 && this.modelName !== this.field.relationModelSingularName) {
|
|
117
|
+
const mainField = fieldChanges[0];
|
|
118
|
+
mainField.changes.push(this.relatedFieldImport());
|
|
119
|
+
// }
|
|
120
|
+
return fieldChanges;
|
|
121
|
+
}
|
|
122
|
+
addOrUpdateAdditionalField() {
|
|
123
|
+
const fieldChanges = [];
|
|
124
|
+
// Add or update the ids field
|
|
125
|
+
fieldChanges.push(this.updateAdditionalIdsField());
|
|
126
|
+
// Add or update the command field
|
|
127
|
+
fieldChanges.push(this.updateAdditionalCommandField());
|
|
128
|
+
return fieldChanges;
|
|
129
|
+
}
|
|
130
|
+
updateAdditionalIdsField() {
|
|
131
|
+
var _a;
|
|
132
|
+
const idsFieldName = `${this.field.name}Ids`;
|
|
133
|
+
const source = this.source;
|
|
134
|
+
const field = this.field;
|
|
135
|
+
// Handle the main source additional fields
|
|
136
|
+
// Add or update the ids field
|
|
137
|
+
const idsField = (_a = this.getFieldIdentifierNode(idsFieldName, source)) === null || _a === void 0 ? void 0 : _a.parent;
|
|
138
|
+
if (idsField == null) {
|
|
139
|
+
return this.addAdditionalIdsField();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
//Update the ids field
|
|
143
|
+
const fieldType = typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.NumberKeyword));
|
|
144
|
+
const decoratorManagers = [
|
|
145
|
+
new OptionalDecoratorManager_1.OptionalDecoratorManager({ isApplyOptional: true, optional: true, source: source, field: field }),
|
|
146
|
+
new ArrayDecoratorManager_1.ArrayDecoratorManager({ isArray: true, source: source, field: field })
|
|
147
|
+
];
|
|
148
|
+
return this.updateFieldInternal(idsFieldName, fieldType, decoratorManagers, field, source);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
updateAdditionalCommandField() {
|
|
152
|
+
var _a;
|
|
153
|
+
const commandFieldName = `${this.field.name}Command`;
|
|
154
|
+
const source = this.source;
|
|
155
|
+
const field = this.field;
|
|
156
|
+
// Handle the main source additional fields
|
|
157
|
+
// Add or update the command field
|
|
158
|
+
const commandField = (_a = this.getFieldIdentifierNode(commandFieldName, source)) === null || _a === void 0 ? void 0 : _a.parent;
|
|
159
|
+
if (commandField == null) {
|
|
160
|
+
return this.addAdditionalCommandField();
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
//Update the command field
|
|
164
|
+
const fieldType = typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword);
|
|
165
|
+
const decoratorManagers = [
|
|
166
|
+
new StringDecoratorManager_1.StringDecoratorManager({ isString: true, source: source, field: field }),
|
|
167
|
+
new OptionalDecoratorManager_1.OptionalDecoratorManager({ isApplyOptional: true, optional: true, source: source, field: field }),
|
|
168
|
+
// TODO pending @IsEnum(RelationFieldsCommand)
|
|
169
|
+
];
|
|
170
|
+
return this.updateFieldInternal(commandFieldName, fieldType, decoratorManagers, field, source);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
removeAdditionalField() {
|
|
174
|
+
const fieldChanges = [];
|
|
175
|
+
// Add the ids field to the main entity
|
|
176
|
+
fieldChanges.push(this.removeAdditionalIdsField());
|
|
177
|
+
// Add the command field to the main entity
|
|
178
|
+
fieldChanges.push(this.removeAdditionalCommandField());
|
|
179
|
+
return fieldChanges;
|
|
180
|
+
}
|
|
181
|
+
removeAdditionalIdsField() {
|
|
182
|
+
const fieldName = `${this.field.name}Ids`;
|
|
183
|
+
const source = this.source;
|
|
184
|
+
return this.removeFieldFor(fieldName, source);
|
|
185
|
+
}
|
|
186
|
+
removeAdditionalCommandField() {
|
|
187
|
+
const fieldName = `${this.field.name}Command`;
|
|
188
|
+
const source = this.source;
|
|
189
|
+
return this.removeFieldFor(fieldName, source);
|
|
190
|
+
}
|
|
191
|
+
isAdditionalFieldRequired() {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
relatedFieldImport() {
|
|
195
|
+
const relatedEntityImportName = `update-${(0, strings_1.dasherize)(this.field.relationModelSingularName)}.dto`;
|
|
196
|
+
const relatedEntityPath = this.field.relationModelModuleName ? `src/${this.field.relationModelModuleName}/dtos/${relatedEntityImportName}` : `./${relatedEntityImportName}`;
|
|
197
|
+
return (0, FieldManager_1.safeInsertImport)(this.source, `Update${(0, strings_1.classify)(this.field.relationModelSingularName)}Dto`, relatedEntityPath, this.moduleName);
|
|
198
|
+
// return insertImport(this.source, this.source.fileName, `Update${classify(this.field.relationModelSingularName)}Dto`, relatedEntityPath);
|
|
199
|
+
} //Uncomment this method while implementing many-to-many relation changes
|
|
200
|
+
}
|
|
201
|
+
exports.OneToManyRelationFieldManagerForDto = OneToManyRelationFieldManagerForDto;
|
|
202
|
+
//# sourceMappingURL=OneToManyRelationFieldManagerForDto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OneToManyRelationFieldManagerForDto.js","sourceRoot":"","sources":["../../../../../../src/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForDto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Change } from '@schematics/angular/utility/change';
|
|
2
|
+
import { FieldChange, FieldManager, FieldType } from '../../FieldManager';
|
|
3
|
+
import { BaseFieldManagerForEntity } from '../base/BaseFieldManagerForEntity';
|
|
4
|
+
export declare class OneToManyRelationFieldManagerForEntity extends BaseFieldManagerForEntity implements FieldManager {
|
|
5
|
+
addField(): FieldChange[];
|
|
6
|
+
updateField(): FieldChange[];
|
|
7
|
+
relatedFieldImport(): Change;
|
|
8
|
+
fieldType(): FieldType;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OneToManyRelationFieldManagerForEntity = void 0;
|
|
7
|
+
const strings_1 = require("@angular-devkit/core/src/utils/strings");
|
|
8
|
+
const typescript_1 = __importDefault(require("@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript"));
|
|
9
|
+
const FieldManager_1 = require("../../FieldManager");
|
|
10
|
+
const BaseFieldManagerForEntity_1 = require("../base/BaseFieldManagerForEntity");
|
|
11
|
+
class OneToManyRelationFieldManagerForEntity extends BaseFieldManagerForEntity_1.BaseFieldManagerForEntity {
|
|
12
|
+
addField() {
|
|
13
|
+
const fieldChanges = super.addField();
|
|
14
|
+
if (fieldChanges.length > 0 && this.modelName !== this.field.relationModelSingularName) {
|
|
15
|
+
const mainField = fieldChanges[0]; // The 1st field change is the main field change, related to the entity source file
|
|
16
|
+
mainField.changes.push(this.relatedFieldImport());
|
|
17
|
+
}
|
|
18
|
+
return fieldChanges;
|
|
19
|
+
}
|
|
20
|
+
updateField() {
|
|
21
|
+
const fieldChanges = super.updateField();
|
|
22
|
+
if (fieldChanges.length > 0 && this.modelName !== this.field.relationModelSingularName) {
|
|
23
|
+
const mainField = fieldChanges[0]; // The 1st field change is the main field change, related to the entity source file
|
|
24
|
+
mainField.changes.push(this.relatedFieldImport());
|
|
25
|
+
}
|
|
26
|
+
return fieldChanges;
|
|
27
|
+
}
|
|
28
|
+
relatedFieldImport() {
|
|
29
|
+
const relatedEntityImportName = `${(0, strings_1.dasherize)(this.field.relationModelSingularName)}.entity`;
|
|
30
|
+
const relatedEntityPath = this.field.relationModelModuleName ? `src/${(0, strings_1.dasherize)(this.field.relationModelModuleName)}/entities/${relatedEntityImportName}` : `./${relatedEntityImportName}`;
|
|
31
|
+
return (0, FieldManager_1.safeInsertImport)(this.source, (0, strings_1.classify)(this.field.relationModelSingularName), relatedEntityPath, this.moduleName);
|
|
32
|
+
}
|
|
33
|
+
fieldType() {
|
|
34
|
+
const type = `${(0, strings_1.classify)(this.field.relationModelSingularName)}`;
|
|
35
|
+
const text = `${type}[]`;
|
|
36
|
+
return {
|
|
37
|
+
text: text,
|
|
38
|
+
node: (_field) => typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier(type), undefined)),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.OneToManyRelationFieldManagerForEntity = OneToManyRelationFieldManagerForEntity;
|
|
43
|
+
//# sourceMappingURL=OneToManyRelationFieldManagerForEntity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OneToManyRelationFieldManagerForEntity.js","sourceRoot":"","sources":["../../../../../../src/code-builder/lib/field/field-managers/relation/OneToManyRelationFieldManagerForEntity.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA6E;AAC7E,gIAAgG;AAEhG,qDAA4F;AAC5F,iFAE2C;AAE3C,MAAa,sCACX,SAAQ,qDAAyB;IAGxB,QAAQ;QACf,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACvF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,mFAAmF;YACtH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;IAEQ,WAAW;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACvF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,mFAAmF;YACtH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,kBAAkB;QAChB,MAAM,uBAAuB,GAAG,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,SAAS,CAAC;QAC5F,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,aAAa,uBAAuB,EAAE,CAAC,CAAC,CAAC,KAAK,uBAAuB,EAAE,CAAC;QAC3L,OAAO,IAAA,+BAAgB,EAAC,IAAI,CAAC,MAAM,EAAE,IAAA,kBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3H,CAAC;IAGD,SAAS;QACP,MAAM,IAAI,GAAG,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAA;QAChE,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,CAAA;QACxB,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,CAAC,MAAW,EAAE,EAAE,CACpB,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAC/D,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACjC,SAAS,CACV,CAAC;SACL,CAAC;IACJ,CAAC;CAEF;AA1CD,wFA0CC"}
|
package/package.json
CHANGED
|
@@ -20,6 +20,8 @@ import { RichTextFieldHandler } from './field-managers/rich-text/RichTextFieldHa
|
|
|
20
20
|
import { ShortTextFieldHandler } from './field-managers/short-text/ShortTextFieldHandler';
|
|
21
21
|
import { UUIDFieldHandler } from './field-managers/uuid/UUIDFieldHandler';
|
|
22
22
|
import { SOLID_CORE_MODULE_NAME, SOLID_CORE_MODULE_NPM_PACKAGE_NAME } from '../model/helpers';
|
|
23
|
+
import { OneToManyRelationFieldHandler } from './field-managers/relation/OneToManyRelationFieldHandler';
|
|
24
|
+
import { ManyToManyInverseRelationFieldHandler } from './field-managers/relation/ManyToManyInverseRelationFieldHandler';
|
|
23
25
|
|
|
24
26
|
export const MAX_EMAIL_LENGTH = 254;
|
|
25
27
|
export const UUID_REGEX = `^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`;
|
|
@@ -212,13 +214,23 @@ export function getFieldHandler(
|
|
|
212
214
|
case SolidFieldType.datetime:
|
|
213
215
|
case SolidFieldType.time:
|
|
214
216
|
return new DateFieldHandler(tree, moduleName, modelName, field);
|
|
215
|
-
case SolidFieldType.relation:
|
|
216
|
-
if (field.relationType === RelationType.
|
|
217
|
-
return new ManyToManyRelationFieldHandler(tree, moduleName, modelName, field);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
217
|
+
case SolidFieldType.relation: {
|
|
218
|
+
if (field.relationType === RelationType.ManyToOne) {
|
|
220
219
|
return new ManyToOneRelationFieldHandler(tree, moduleName, modelName, field);
|
|
221
220
|
}
|
|
221
|
+
else if (field.relationType === RelationType.OneToMany) {
|
|
222
|
+
return new OneToManyRelationFieldHandler(tree, moduleName, modelName, field);
|
|
223
|
+
}
|
|
224
|
+
else if (field.relationType === RelationType.ManyToMany) {
|
|
225
|
+
if (field.isRelationManyToManyOwner) {
|
|
226
|
+
return new ManyToManyRelationFieldHandler(tree, moduleName, modelName, field);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return new ManyToManyInverseRelationFieldHandler(tree, moduleName, modelName, field);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return new NoOpsFieldHandler(tree, moduleName, modelName, field);
|
|
233
|
+
}
|
|
222
234
|
case SolidFieldType.mediaSingle:
|
|
223
235
|
case SolidFieldType.mediaMultiple:
|
|
224
236
|
return new NoOpsFieldHandler(tree, moduleName, modelName, field);
|
|
@@ -269,7 +281,8 @@ export function getClassExportKeywordNode (className: string, sourceFile: ts.Sou
|
|
|
269
281
|
|
|
270
282
|
export enum RelationType {
|
|
271
283
|
ManyToOne = 'many-to-one',
|
|
272
|
-
ManyToMany = 'many-to-many'
|
|
284
|
+
ManyToMany = 'many-to-many',
|
|
285
|
+
OneToMany = "one-to-many"
|
|
273
286
|
}
|
|
274
287
|
|
|
275
288
|
export enum DtoSourceType {
|
|
@@ -13,7 +13,7 @@ export class IndexDecoratorManager implements DecoratorManager {
|
|
|
13
13
|
|
|
14
14
|
constructor(public options: IndexDecoratorOptions, public fieldNode?: PropertyDeclaration) { }
|
|
15
15
|
isApplyDecorator(): boolean {
|
|
16
|
-
return this.options.index && this.options.field.relationType !== RelationType.ManyToMany;
|
|
16
|
+
return this.options.index && this.options.field.relationType !== RelationType.ManyToMany && this.options.field.relationType !== RelationType.OneToMany;
|
|
17
17
|
}
|
|
18
18
|
decoratorName(): string {
|
|
19
19
|
return 'Index';
|
|
@@ -28,6 +28,7 @@ import { JoinTableDecoratorManager } from '../../decorator-managers/entity/JoinT
|
|
|
28
28
|
import { RelationType } from "../../FieldManager";
|
|
29
29
|
import { UniqueIndexDecoratorManager } from '../../decorator-managers/entity/UniqueIndexDecoratorManager';
|
|
30
30
|
import { JoinColumnDecoratorManager } from '../../decorator-managers/entity/JoinColumnDecoratorManager';
|
|
31
|
+
import { OneToManyDecoratorManager } from '../../decorator-managers/entity/OneToManyDecoratorManager';
|
|
31
32
|
|
|
32
33
|
export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
33
34
|
source: SourceFile;
|
|
@@ -38,6 +39,7 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
38
39
|
manyToManyDecoratorManager: DecoratorManager;
|
|
39
40
|
joinTableDecoratorManager: DecoratorManager;
|
|
40
41
|
uniqueIndexDecoratorManager: UniqueIndexDecoratorManager;
|
|
42
|
+
oneToManyDecoratorManager: OneToManyDecoratorManager;
|
|
41
43
|
constructor(
|
|
42
44
|
tree: Tree,
|
|
43
45
|
protected readonly moduleName: string,
|
|
@@ -88,7 +90,7 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
88
90
|
);
|
|
89
91
|
this.joinColumnDecoratorManager = new JoinColumnDecoratorManager(
|
|
90
92
|
{
|
|
91
|
-
isManyToOneRelationOwner: this.
|
|
93
|
+
isManyToOneRelationOwner: this.isManyToOne(),
|
|
92
94
|
source: this.source,
|
|
93
95
|
field: this.field,
|
|
94
96
|
fieldName: this.fieldName(),
|
|
@@ -101,7 +103,7 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
101
103
|
relationModelName: this.field.relationModelSingularName,
|
|
102
104
|
relationInverseFieldName: this.field.relationModelFieldName,
|
|
103
105
|
relationCascade: this.field.relationCascade,
|
|
104
|
-
owner:
|
|
106
|
+
owner: this.field.isRelationManyToManyOwner,
|
|
105
107
|
source: this.source,
|
|
106
108
|
field: this.field,
|
|
107
109
|
fieldName: this.fieldName(),
|
|
@@ -110,7 +112,7 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
110
112
|
);
|
|
111
113
|
this.joinTableDecoratorManager = new JoinTableDecoratorManager(
|
|
112
114
|
{
|
|
113
|
-
isManyToManyRelationOwner: this.
|
|
115
|
+
isManyToManyRelationOwner: this.isManyToMany() && this.field.isRelationManyToManyOwner,
|
|
114
116
|
source: this.source,
|
|
115
117
|
field: this.field,
|
|
116
118
|
fieldName: this.fieldName(),
|
|
@@ -124,6 +126,17 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
124
126
|
{ unique: this.field.unique, fieldName: this.fieldName(), source: this.source, field: this.field },
|
|
125
127
|
this.getClassNode(this.modelName, this.source)
|
|
126
128
|
);
|
|
129
|
+
this.oneToManyDecoratorManager = new OneToManyDecoratorManager(
|
|
130
|
+
{
|
|
131
|
+
isOneToMany: this.isOneToMany(),
|
|
132
|
+
relationCascade: this.field.relationCascade,
|
|
133
|
+
source: this.source,
|
|
134
|
+
field: this.field,
|
|
135
|
+
fieldName: this.fieldName(),
|
|
136
|
+
modelName: this.modelName,
|
|
137
|
+
},
|
|
138
|
+
);
|
|
139
|
+
|
|
127
140
|
}
|
|
128
141
|
|
|
129
142
|
protected addFieldInternal(fieldName: string, fieldType: string, decoratorManagers: DecoratorManager[], field: any, modelName: any, source: ts.SourceFile): FieldChange {
|
|
@@ -452,6 +465,9 @@ export abstract class BaseFieldManagerForEntity implements FieldManager {
|
|
|
452
465
|
return (this.field.type === 'relation' && this.field.relationType === RelationType.ManyToOne);
|
|
453
466
|
}
|
|
454
467
|
|
|
468
|
+
private isOneToMany(): boolean {
|
|
469
|
+
return (this.field.type === 'relation' && this.field.relationType === RelationType.OneToMany);
|
|
470
|
+
}
|
|
455
471
|
|
|
456
472
|
|
|
457
473
|
protected isAdditionalFieldRequired(): boolean {
|
package/src/code-builder/lib/field/field-managers/relation/ManyToManyInverseRelationFieldHandler.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DtoSourceType, FieldChange, FieldHandler, FieldManager, ManagerForDtoOptions } from '../../FieldManager';
|
|
2
|
+
import { ManyToManyInverseRelationFieldManagerForDto } from './ManyToManyInverseRelationFieldManagerForDto';
|
|
3
|
+
import { ManyToManyInverseRelationFieldManagerForEntity } from './ManyToManyInverseRelationFieldManagerForEntity';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export class ManyToManyInverseRelationFieldHandler implements FieldHandler {
|
|
7
|
+
entityFieldManager: FieldManager;
|
|
8
|
+
createDtoFieldManager: FieldManager;
|
|
9
|
+
updateDtoFieldManager: FieldManager;
|
|
10
|
+
constructor(tree: any, moduleName: string, modelName: string, field: any) {
|
|
11
|
+
this.entityFieldManager = new ManyToManyInverseRelationFieldManagerForEntity(
|
|
12
|
+
tree,
|
|
13
|
+
moduleName,
|
|
14
|
+
modelName,
|
|
15
|
+
field,
|
|
16
|
+
);
|
|
17
|
+
this.createDtoFieldManager = new ManyToManyInverseRelationFieldManagerForDto(
|
|
18
|
+
tree,
|
|
19
|
+
moduleName,
|
|
20
|
+
modelName,
|
|
21
|
+
field,
|
|
22
|
+
new ManagerForDtoOptions(DtoSourceType.Create),
|
|
23
|
+
);
|
|
24
|
+
this.updateDtoFieldManager = new ManyToManyInverseRelationFieldManagerForDto(
|
|
25
|
+
tree,
|
|
26
|
+
moduleName,
|
|
27
|
+
modelName,
|
|
28
|
+
field,
|
|
29
|
+
new ManagerForDtoOptions(DtoSourceType.Update),
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
updateEntityField(): FieldChange[] {
|
|
33
|
+
return this.entityFieldManager.updateField();
|
|
34
|
+
}
|
|
35
|
+
updateDtoField(): FieldChange[] {
|
|
36
|
+
return [...this.createDtoFieldManager.updateField(), ...this.updateDtoFieldManager.updateField()];
|
|
37
|
+
}
|
|
38
|
+
removeEntityField(): FieldChange[] {
|
|
39
|
+
return this.entityFieldManager.removeField();
|
|
40
|
+
}
|
|
41
|
+
removeDtoField(): FieldChange[] {
|
|
42
|
+
return [...this.createDtoFieldManager.removeField(), ...this.updateDtoFieldManager.removeField()];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
addEntityField(): FieldChange[] {
|
|
46
|
+
return this.entityFieldManager.addField();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
addDtoField(): FieldChange[] {
|
|
50
|
+
return [...this.createDtoFieldManager.addField(), ...this.updateDtoFieldManager.addField()];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FieldManager } from '../../FieldManager';
|
|
2
|
+
import { ManyToManyRelationFieldManagerForDto } from './ManyToManyRelationFieldManagerForDto';
|
|
3
|
+
|
|
4
|
+
// For DTO's, the inverse relation behaivour is the same as the normal relation
|
|
5
|
+
export class ManyToManyInverseRelationFieldManagerForDto
|
|
6
|
+
extends ManyToManyRelationFieldManagerForDto
|
|
7
|
+
implements FieldManager {
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FieldManager } from '../../FieldManager';
|
|
2
|
+
import { ManyToManyRelationFieldManagerForEntity } from './ManyToManyRelationFieldManagerForEntity';
|
|
3
|
+
|
|
4
|
+
export class ManyToManyInverseRelationFieldManagerForEntity
|
|
5
|
+
extends ManyToManyRelationFieldManagerForEntity
|
|
6
|
+
implements FieldManager {
|
|
7
|
+
|
|
8
|
+
}
|