@elsikora/nestjs-crud-automator 2.1.1-dev.1 → 2.1.2-dev.1
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/cjs/class/utility/dto/property/factory/relation.class.js +25 -2
- package/dist/cjs/class/utility/dto/property/factory/relation.class.js.map +1 -1
- package/dist/cjs/interface/entity/column.interface.d.ts +4 -0
- package/dist/cjs/utility/dto/generate/relation-response.utility.d.ts +6 -2
- package/dist/cjs/utility/dto/generate/relation-response.utility.js +15 -2
- package/dist/cjs/utility/dto/generate/relation-response.utility.js.map +1 -1
- package/dist/cjs/utility/generate-entity-information.utility.js +25 -1
- package/dist/cjs/utility/generate-entity-information.utility.js.map +1 -1
- package/dist/esm/class/utility/dto/property/factory/relation.class.js +25 -2
- package/dist/esm/class/utility/dto/property/factory/relation.class.js.map +1 -1
- package/dist/esm/interface/entity/column.interface.d.ts +4 -0
- package/dist/esm/utility/dto/generate/relation-response.utility.d.ts +6 -2
- package/dist/esm/utility/dto/generate/relation-response.utility.js +15 -2
- package/dist/esm/utility/dto/generate/relation-response.utility.js.map +1 -1
- package/dist/esm/utility/generate-entity-information.utility.js +25 -1
- package/dist/esm/utility/generate-entity-information.utility.js.map +1 -1
- package/package.json +2 -2
|
@@ -21,11 +21,34 @@ require('../../../../../enum/decorator/api/property/number-type.enum.js');
|
|
|
21
21
|
require('../../../../../enum/decorator/api/property/string-type.enum.js');
|
|
22
22
|
require('../../../../../enum/decorator/api/route-type.enum.js');
|
|
23
23
|
var relationResponse_utility = require('../../../../../utility/dto/generate/relation-response.utility.js');
|
|
24
|
+
var exception_utility = require('../../../../../utility/error/exception.utility.js');
|
|
24
25
|
|
|
25
26
|
class DtoPropertyFactoryRelation {
|
|
26
27
|
create(metadata, entity, config, method, dtoType, propertyName) {
|
|
27
|
-
const { type, ...restProperties } = metadata;
|
|
28
|
-
|
|
28
|
+
const { description, type, ...restProperties } = metadata;
|
|
29
|
+
const relationColumn = entity.columns.find((column) => column.name == propertyName);
|
|
30
|
+
const relationDescriptionCandidate = description?.trim();
|
|
31
|
+
let relationDescription = propertyName;
|
|
32
|
+
const relationName = `${String(entity.name)}.${propertyName}`;
|
|
33
|
+
if (relationDescriptionCandidate) {
|
|
34
|
+
relationDescription = relationDescriptionCandidate;
|
|
35
|
+
}
|
|
36
|
+
if (!relationColumn?.relation?.target) {
|
|
37
|
+
throw exception_utility.ErrorException(`Property ${relationName} is marked as RELATION but TypeORM relation target metadata was not found. Add a TypeORM relation decorator such as @ManyToOne(() => TargetEntity).`);
|
|
38
|
+
}
|
|
39
|
+
if (dtoType === dtoType_enum.EApiDtoType.RESPONSE) {
|
|
40
|
+
return object_decorator.ApiPropertyObject({
|
|
41
|
+
description: relationDescription,
|
|
42
|
+
entity,
|
|
43
|
+
isArray: false,
|
|
44
|
+
type: relationResponse_utility.DtoGenerateRelationResponse(entity, method, dtoType, propertyName, {
|
|
45
|
+
relationDescription,
|
|
46
|
+
}),
|
|
47
|
+
...config,
|
|
48
|
+
...restProperties,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return uuid_decorator.ApiPropertyUUID({ description: relationDescription, entity, isArray: false, ...config, ...restProperties });
|
|
29
52
|
}
|
|
30
53
|
}
|
|
31
54
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.class.js","sources":["../../../../../../../../src/class/utility/dto/property/factory/relation.class.ts"],"sourcesContent":[null],"names":["EApiDtoType","ApiPropertyObject","DtoGenerateRelationResponse","ApiPropertyUUID"],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.class.js","sources":["../../../../../../../../src/class/utility/dto/property/factory/relation.class.ts"],"sourcesContent":[null],"names":["ErrorException","EApiDtoType","ApiPropertyObject","DtoGenerateRelationResponse","ApiPropertyUUID"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAWa,0BAA0B,CAAA;IACtC,MAAM,CAAC,QAA4C,EAAE,MAAqB,EAAE,MAAyC,EAAE,MAAqB,EAAE,OAAoB,EAAE,YAAoB,EAAA;QACvL,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,GAAuC,QAAQ;AAC7F,QAAA,MAAM,cAAc,GAAoC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAA2B,KAAc,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC;AAClJ,QAAA,MAAM,4BAA4B,GAAuB,WAAW,EAAE,IAAI,EAAE;QAC5E,IAAI,mBAAmB,GAAW,YAAY;AAC9C,QAAA,MAAM,YAAY,GAAW,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE;QAErE,IAAI,4BAA4B,EAAE;YACjC,mBAAmB,GAAG,4BAA4B;QACnD;AAEA,QAAA,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE;AACtC,YAAA,MAAMA,gCAAc,CAAC,CAAA,SAAA,EAAY,YAAY,CAAA,mJAAA,CAAqJ,CAAC;QACpM;AAEA,QAAA,IAAI,OAAO,KAAKC,wBAAW,CAAC,QAAQ,EAAE;AACrC,YAAA,OAAOC,kCAAiB,CAAC;AACxB,gBAAA,WAAW,EAAE,mBAAmB;gBAChC,MAAM;AACN,gBAAA,OAAO,EAAE,KAAK;gBACd,IAAI,EAAEC,oDAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE;oBACxE,mBAAmB;iBACnB,CAAC;AACF,gBAAA,GAAG,MAAM;AACT,gBAAA,GAAG,cAAc;AACjB,aAAA,CAAC;QACH;QAEA,OAAOC,8BAAe,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACnH;AACA;;;;"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { IApiBaseEntity } from '../api-base-entity.interface';
|
|
1
2
|
import { ColumnType } from 'typeorm';
|
|
2
3
|
export interface IApiEntityColumn<E> {
|
|
3
4
|
isPrimary: boolean;
|
|
4
5
|
metadata?: Record<string, unknown>;
|
|
5
6
|
name: keyof E;
|
|
7
|
+
relation?: {
|
|
8
|
+
target: IApiBaseEntity;
|
|
9
|
+
};
|
|
6
10
|
type: ColumnType;
|
|
7
11
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { IApiEntity } from '../../../interface/entity';
|
|
1
2
|
import { Type } from '@nestjs/common';
|
|
2
3
|
import { EApiDtoType, EApiRouteType } from '../../../enum/decorator/api';
|
|
3
|
-
import { IApiEntity } from '../../../interface/entity';
|
|
4
4
|
/**
|
|
5
5
|
* Creates a simple relationship DTO containing only an ID field.
|
|
6
6
|
* Used for representing related entities in API responses with minimal information.
|
|
@@ -8,7 +8,11 @@ import { IApiEntity } from '../../../interface/entity';
|
|
|
8
8
|
* @param {EApiRouteType} method - The API route type (CREATE, DELETE, GET, etc.)
|
|
9
9
|
* @param {EApiDtoType} dtoType - The type of DTO (REQUEST, RESPONSE, etc.)
|
|
10
10
|
* @param {string} propertyName - The name of the relation property
|
|
11
|
+
* @param {{ relationDescription?: string }} [options] - Optional relation metadata used for the nested identifier schema
|
|
12
|
+
* @param {string} [options.relationDescription] - Relation-aware description to use for the nested id field.
|
|
11
13
|
* @returns {Type<unknown>} A generated DTO class for relation representation
|
|
12
14
|
* @template E - The entity type
|
|
13
15
|
*/
|
|
14
|
-
export declare function DtoGenerateRelationResponse<E>(entity: IApiEntity<E>, method: EApiRouteType, dtoType: EApiDtoType, propertyName: string
|
|
16
|
+
export declare function DtoGenerateRelationResponse<E>(entity: IApiEntity<E>, method: EApiRouteType, dtoType: EApiDtoType, propertyName: string, options?: {
|
|
17
|
+
relationDescription?: string;
|
|
18
|
+
}): Type<unknown>;
|
|
@@ -12,15 +12,28 @@ var capitalizeString_utility = require('../../capitalize-string.utility.js');
|
|
|
12
12
|
* @param {EApiRouteType} method - The API route type (CREATE, DELETE, GET, etc.)
|
|
13
13
|
* @param {EApiDtoType} dtoType - The type of DTO (REQUEST, RESPONSE, etc.)
|
|
14
14
|
* @param {string} propertyName - The name of the relation property
|
|
15
|
+
* @param {{ relationDescription?: string }} [options] - Optional relation metadata used for the nested identifier schema
|
|
16
|
+
* @param {string} [options.relationDescription] - Relation-aware description to use for the nested id field.
|
|
15
17
|
* @returns {Type<unknown>} A generated DTO class for relation representation
|
|
16
18
|
* @template E - The entity type
|
|
17
19
|
*/
|
|
18
|
-
function DtoGenerateRelationResponse(entity, method, dtoType, propertyName) {
|
|
20
|
+
function DtoGenerateRelationResponse(entity, method, dtoType, propertyName, options = {}) {
|
|
21
|
+
const entityName = (entity.name ?? "").trim();
|
|
22
|
+
const relationDescriptionCandidate = options.relationDescription?.trim();
|
|
23
|
+
let relationDescription = propertyName;
|
|
24
|
+
if (relationDescriptionCandidate) {
|
|
25
|
+
relationDescription = relationDescriptionCandidate;
|
|
26
|
+
}
|
|
27
|
+
const shouldPrefixOwnerName = !!entityName && !relationDescription.toLocaleLowerCase().startsWith(`${entityName.toLocaleLowerCase()} `);
|
|
28
|
+
const identifierEntity = {
|
|
29
|
+
...entity,
|
|
30
|
+
name: shouldPrefixOwnerName ? `${entityName} ${relationDescription}` : relationDescription,
|
|
31
|
+
};
|
|
19
32
|
class GeneratedRelationDTO {
|
|
20
33
|
id;
|
|
21
34
|
}
|
|
22
35
|
tslib_es6.__decorate([
|
|
23
|
-
uuid_decorator.ApiPropertyUUID({ entity, isResponse: true }),
|
|
36
|
+
uuid_decorator.ApiPropertyUUID({ entity: identifierEntity, isResponse: true }),
|
|
24
37
|
tslib_es6.__metadata("design:type", String)
|
|
25
38
|
], GeneratedRelationDTO.prototype, "id", void 0);
|
|
26
39
|
Object.defineProperty(GeneratedRelationDTO, "name", { value: `${String(entity.name)}${camelCaseString_utility.CamelCaseString(method)}${camelCaseString_utility.CamelCaseString(dtoType)}${capitalizeString_utility.CapitalizeString(propertyName)}DTO` });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-response.utility.js","sources":["../../../../../../src/utility/dto/generate/relation-response.utility.ts"],"sourcesContent":[null],"names":["__decorate","ApiPropertyUUID","CamelCaseString","CapitalizeString"],"mappings":";;;;;;;AAQA
|
|
1
|
+
{"version":3,"file":"relation-response.utility.js","sources":["../../../../../../src/utility/dto/generate/relation-response.utility.ts"],"sourcesContent":[null],"names":["__decorate","ApiPropertyUUID","CamelCaseString","CapitalizeString"],"mappings":";;;;;;;AAQA;;;;;;;;;;;AAWG;AACG,SAAU,2BAA2B,CAAI,MAAqB,EAAE,MAAqB,EAAE,OAAoB,EAAE,YAAoB,EAAE,OAAA,GAA4C,EAAE,EAAA;AACtL,IAAA,MAAM,UAAU,GAAW,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE;IACrD,MAAM,4BAA4B,GAAuB,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE;IAC5F,IAAI,mBAAmB,GAAW,YAAY;IAE9C,IAAI,4BAA4B,EAAE;QACjC,mBAAmB,GAAG,4BAA4B;IACnD;IAEA,MAAM,qBAAqB,GAAY,CAAC,CAAC,UAAU,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAA,EAAG,UAAU,CAAC,iBAAiB,EAAE,CAAA,CAAA,CAAG,CAAC;AAEhJ,IAAA,MAAM,gBAAgB,GAAkB;AACvC,QAAA,GAAG,MAAM;AACT,QAAA,IAAI,EAAE,qBAAqB,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAE,GAAG,mBAAmB;KAC1F;AAED,IAAA,MAAM,oBAAoB,CAAA;AAEzB,QAAA,EAAE;AACF;AADA,IAAAA,oBAAA,CAAA;QADCC,8BAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;;AACpD,KAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,IAAA,EAAA,MAAA,CAAA;AAGb,IAAA,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAGC,uCAAe,CAAC,MAAM,CAAC,CAAA,EAAGA,uCAAe,CAAC,OAAO,CAAC,CAAA,EAAGC,yCAAgB,CAAC,YAAY,CAAC,CAAA,GAAA,CAAK,EAAE,CAAC;AAEjL,IAAA,OAAO,oBAAoB;AAC5B;;;;"}
|
|
@@ -97,7 +97,7 @@ function GenerateEntityInformation(entity) {
|
|
|
97
97
|
type: options.type,
|
|
98
98
|
};
|
|
99
99
|
}),
|
|
100
|
-
...relationList.map(({ propertyName, relationType }) => {
|
|
100
|
+
...relationList.map(({ propertyName, relationType, type }) => {
|
|
101
101
|
let metadata;
|
|
102
102
|
for (const entityName of entityNames) {
|
|
103
103
|
metadata = storage.getMetadata(entityName, propertyName);
|
|
@@ -105,10 +105,34 @@ function GenerateEntityInformation(entity) {
|
|
|
105
105
|
break;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
+
let relationTarget;
|
|
109
|
+
let resolvedRelationTarget = type;
|
|
110
|
+
if (typeof type === "function") {
|
|
111
|
+
try {
|
|
112
|
+
resolvedRelationTarget = type();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
resolvedRelationTarget = type;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (typeof resolvedRelationTarget === "string") {
|
|
119
|
+
relationTarget = { name: resolvedRelationTarget };
|
|
120
|
+
}
|
|
121
|
+
else if (typeof resolvedRelationTarget === "function" && resolvedRelationTarget.name) {
|
|
122
|
+
relationTarget = resolvedRelationTarget;
|
|
123
|
+
}
|
|
124
|
+
else if (typeof resolvedRelationTarget === "object" && resolvedRelationTarget !== null && "name" in resolvedRelationTarget && typeof resolvedRelationTarget.name === "string") {
|
|
125
|
+
relationTarget = resolvedRelationTarget;
|
|
126
|
+
}
|
|
108
127
|
return {
|
|
109
128
|
isPrimary: false,
|
|
110
129
|
metadata,
|
|
111
130
|
name: propertyName,
|
|
131
|
+
relation: relationTarget
|
|
132
|
+
? {
|
|
133
|
+
target: relationTarget,
|
|
134
|
+
}
|
|
135
|
+
: undefined,
|
|
112
136
|
type: relationType,
|
|
113
137
|
};
|
|
114
138
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-entity-information.utility.js","sources":["../../../../src/utility/generate-entity-information.utility.ts"],"sourcesContent":[null],"names":["getMetadataArgsStorage","ErrorException","DefaultNamingStrategy","MetadataStorage"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-entity-information.utility.js","sources":["../../../../src/utility/generate-entity-information.utility.ts"],"sourcesContent":[null],"names":["getMetadataArgsStorage","ErrorException","DefaultNamingStrategy","MetadataStorage"],"mappings":"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"}
|
|
@@ -19,11 +19,34 @@ import '../../../../../enum/decorator/api/property/number-type.enum.js';
|
|
|
19
19
|
import '../../../../../enum/decorator/api/property/string-type.enum.js';
|
|
20
20
|
import '../../../../../enum/decorator/api/route-type.enum.js';
|
|
21
21
|
import { DtoGenerateRelationResponse } from '../../../../../utility/dto/generate/relation-response.utility.js';
|
|
22
|
+
import { ErrorException } from '../../../../../utility/error/exception.utility.js';
|
|
22
23
|
|
|
23
24
|
class DtoPropertyFactoryRelation {
|
|
24
25
|
create(metadata, entity, config, method, dtoType, propertyName) {
|
|
25
|
-
const { type, ...restProperties } = metadata;
|
|
26
|
-
|
|
26
|
+
const { description, type, ...restProperties } = metadata;
|
|
27
|
+
const relationColumn = entity.columns.find((column) => column.name == propertyName);
|
|
28
|
+
const relationDescriptionCandidate = description?.trim();
|
|
29
|
+
let relationDescription = propertyName;
|
|
30
|
+
const relationName = `${String(entity.name)}.${propertyName}`;
|
|
31
|
+
if (relationDescriptionCandidate) {
|
|
32
|
+
relationDescription = relationDescriptionCandidate;
|
|
33
|
+
}
|
|
34
|
+
if (!relationColumn?.relation?.target) {
|
|
35
|
+
throw ErrorException(`Property ${relationName} is marked as RELATION but TypeORM relation target metadata was not found. Add a TypeORM relation decorator such as @ManyToOne(() => TargetEntity).`);
|
|
36
|
+
}
|
|
37
|
+
if (dtoType === EApiDtoType.RESPONSE) {
|
|
38
|
+
return ApiPropertyObject({
|
|
39
|
+
description: relationDescription,
|
|
40
|
+
entity,
|
|
41
|
+
isArray: false,
|
|
42
|
+
type: DtoGenerateRelationResponse(entity, method, dtoType, propertyName, {
|
|
43
|
+
relationDescription,
|
|
44
|
+
}),
|
|
45
|
+
...config,
|
|
46
|
+
...restProperties,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return ApiPropertyUUID({ description: relationDescription, entity, isArray: false, ...config, ...restProperties });
|
|
27
50
|
}
|
|
28
51
|
}
|
|
29
52
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.class.js","sources":["../../../../../../../../src/class/utility/dto/property/factory/relation.class.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.class.js","sources":["../../../../../../../../src/class/utility/dto/property/factory/relation.class.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAWa,0BAA0B,CAAA;IACtC,MAAM,CAAC,QAA4C,EAAE,MAAqB,EAAE,MAAyC,EAAE,MAAqB,EAAE,OAAoB,EAAE,YAAoB,EAAA;QACvL,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,GAAuC,QAAQ;AAC7F,QAAA,MAAM,cAAc,GAAoC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAA2B,KAAc,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC;AAClJ,QAAA,MAAM,4BAA4B,GAAuB,WAAW,EAAE,IAAI,EAAE;QAC5E,IAAI,mBAAmB,GAAW,YAAY;AAC9C,QAAA,MAAM,YAAY,GAAW,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE;QAErE,IAAI,4BAA4B,EAAE;YACjC,mBAAmB,GAAG,4BAA4B;QACnD;AAEA,QAAA,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE;AACtC,YAAA,MAAM,cAAc,CAAC,CAAA,SAAA,EAAY,YAAY,CAAA,mJAAA,CAAqJ,CAAC;QACpM;AAEA,QAAA,IAAI,OAAO,KAAK,WAAW,CAAC,QAAQ,EAAE;AACrC,YAAA,OAAO,iBAAiB,CAAC;AACxB,gBAAA,WAAW,EAAE,mBAAmB;gBAChC,MAAM;AACN,gBAAA,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE;oBACxE,mBAAmB;iBACnB,CAAC;AACF,gBAAA,GAAG,MAAM;AACT,gBAAA,GAAG,cAAc;AACjB,aAAA,CAAC;QACH;QAEA,OAAO,eAAe,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACnH;AACA;;;;"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { IApiBaseEntity } from '../api-base-entity.interface';
|
|
1
2
|
import { ColumnType } from 'typeorm';
|
|
2
3
|
export interface IApiEntityColumn<E> {
|
|
3
4
|
isPrimary: boolean;
|
|
4
5
|
metadata?: Record<string, unknown>;
|
|
5
6
|
name: keyof E;
|
|
7
|
+
relation?: {
|
|
8
|
+
target: IApiBaseEntity;
|
|
9
|
+
};
|
|
6
10
|
type: ColumnType;
|
|
7
11
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { IApiEntity } from '../../../interface/entity';
|
|
1
2
|
import { Type } from '@nestjs/common';
|
|
2
3
|
import { EApiDtoType, EApiRouteType } from '../../../enum/decorator/api';
|
|
3
|
-
import { IApiEntity } from '../../../interface/entity';
|
|
4
4
|
/**
|
|
5
5
|
* Creates a simple relationship DTO containing only an ID field.
|
|
6
6
|
* Used for representing related entities in API responses with minimal information.
|
|
@@ -8,7 +8,11 @@ import { IApiEntity } from '../../../interface/entity';
|
|
|
8
8
|
* @param {EApiRouteType} method - The API route type (CREATE, DELETE, GET, etc.)
|
|
9
9
|
* @param {EApiDtoType} dtoType - The type of DTO (REQUEST, RESPONSE, etc.)
|
|
10
10
|
* @param {string} propertyName - The name of the relation property
|
|
11
|
+
* @param {{ relationDescription?: string }} [options] - Optional relation metadata used for the nested identifier schema
|
|
12
|
+
* @param {string} [options.relationDescription] - Relation-aware description to use for the nested id field.
|
|
11
13
|
* @returns {Type<unknown>} A generated DTO class for relation representation
|
|
12
14
|
* @template E - The entity type
|
|
13
15
|
*/
|
|
14
|
-
export declare function DtoGenerateRelationResponse<E>(entity: IApiEntity<E>, method: EApiRouteType, dtoType: EApiDtoType, propertyName: string
|
|
16
|
+
export declare function DtoGenerateRelationResponse<E>(entity: IApiEntity<E>, method: EApiRouteType, dtoType: EApiDtoType, propertyName: string, options?: {
|
|
17
|
+
relationDescription?: string;
|
|
18
|
+
}): Type<unknown>;
|
|
@@ -10,15 +10,28 @@ import { CapitalizeString } from '../../capitalize-string.utility.js';
|
|
|
10
10
|
* @param {EApiRouteType} method - The API route type (CREATE, DELETE, GET, etc.)
|
|
11
11
|
* @param {EApiDtoType} dtoType - The type of DTO (REQUEST, RESPONSE, etc.)
|
|
12
12
|
* @param {string} propertyName - The name of the relation property
|
|
13
|
+
* @param {{ relationDescription?: string }} [options] - Optional relation metadata used for the nested identifier schema
|
|
14
|
+
* @param {string} [options.relationDescription] - Relation-aware description to use for the nested id field.
|
|
13
15
|
* @returns {Type<unknown>} A generated DTO class for relation representation
|
|
14
16
|
* @template E - The entity type
|
|
15
17
|
*/
|
|
16
|
-
function DtoGenerateRelationResponse(entity, method, dtoType, propertyName) {
|
|
18
|
+
function DtoGenerateRelationResponse(entity, method, dtoType, propertyName, options = {}) {
|
|
19
|
+
const entityName = (entity.name ?? "").trim();
|
|
20
|
+
const relationDescriptionCandidate = options.relationDescription?.trim();
|
|
21
|
+
let relationDescription = propertyName;
|
|
22
|
+
if (relationDescriptionCandidate) {
|
|
23
|
+
relationDescription = relationDescriptionCandidate;
|
|
24
|
+
}
|
|
25
|
+
const shouldPrefixOwnerName = !!entityName && !relationDescription.toLocaleLowerCase().startsWith(`${entityName.toLocaleLowerCase()} `);
|
|
26
|
+
const identifierEntity = {
|
|
27
|
+
...entity,
|
|
28
|
+
name: shouldPrefixOwnerName ? `${entityName} ${relationDescription}` : relationDescription,
|
|
29
|
+
};
|
|
17
30
|
class GeneratedRelationDTO {
|
|
18
31
|
id;
|
|
19
32
|
}
|
|
20
33
|
__decorate([
|
|
21
|
-
ApiPropertyUUID({ entity, isResponse: true }),
|
|
34
|
+
ApiPropertyUUID({ entity: identifierEntity, isResponse: true }),
|
|
22
35
|
__metadata("design:type", String)
|
|
23
36
|
], GeneratedRelationDTO.prototype, "id", void 0);
|
|
24
37
|
Object.defineProperty(GeneratedRelationDTO, "name", { value: `${String(entity.name)}${CamelCaseString(method)}${CamelCaseString(dtoType)}${CapitalizeString(propertyName)}DTO` });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-response.utility.js","sources":["../../../../../../src/utility/dto/generate/relation-response.utility.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA
|
|
1
|
+
{"version":3,"file":"relation-response.utility.js","sources":["../../../../../../src/utility/dto/generate/relation-response.utility.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;;;;;;;;;;;AAWG;AACG,SAAU,2BAA2B,CAAI,MAAqB,EAAE,MAAqB,EAAE,OAAoB,EAAE,YAAoB,EAAE,OAAA,GAA4C,EAAE,EAAA;AACtL,IAAA,MAAM,UAAU,GAAW,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE;IACrD,MAAM,4BAA4B,GAAuB,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE;IAC5F,IAAI,mBAAmB,GAAW,YAAY;IAE9C,IAAI,4BAA4B,EAAE;QACjC,mBAAmB,GAAG,4BAA4B;IACnD;IAEA,MAAM,qBAAqB,GAAY,CAAC,CAAC,UAAU,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAA,EAAG,UAAU,CAAC,iBAAiB,EAAE,CAAA,CAAA,CAAG,CAAC;AAEhJ,IAAA,MAAM,gBAAgB,GAAkB;AACvC,QAAA,GAAG,MAAM;AACT,QAAA,IAAI,EAAE,qBAAqB,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAE,GAAG,mBAAmB;KAC1F;AAED,IAAA,MAAM,oBAAoB,CAAA;AAEzB,QAAA,EAAE;AACF;AADA,IAAA,UAAA,CAAA;QADC,eAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;;AACpD,KAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,IAAA,EAAA,MAAA,CAAA;AAGb,IAAA,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,eAAe,CAAC,MAAM,CAAC,CAAA,EAAG,eAAe,CAAC,OAAO,CAAC,CAAA,EAAG,gBAAgB,CAAC,YAAY,CAAC,CAAA,GAAA,CAAK,EAAE,CAAC;AAEjL,IAAA,OAAO,oBAAoB;AAC5B;;;;"}
|
|
@@ -95,7 +95,7 @@ function GenerateEntityInformation(entity) {
|
|
|
95
95
|
type: options.type,
|
|
96
96
|
};
|
|
97
97
|
}),
|
|
98
|
-
...relationList.map(({ propertyName, relationType }) => {
|
|
98
|
+
...relationList.map(({ propertyName, relationType, type }) => {
|
|
99
99
|
let metadata;
|
|
100
100
|
for (const entityName of entityNames) {
|
|
101
101
|
metadata = storage.getMetadata(entityName, propertyName);
|
|
@@ -103,10 +103,34 @@ function GenerateEntityInformation(entity) {
|
|
|
103
103
|
break;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
+
let relationTarget;
|
|
107
|
+
let resolvedRelationTarget = type;
|
|
108
|
+
if (typeof type === "function") {
|
|
109
|
+
try {
|
|
110
|
+
resolvedRelationTarget = type();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
resolvedRelationTarget = type;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (typeof resolvedRelationTarget === "string") {
|
|
117
|
+
relationTarget = { name: resolvedRelationTarget };
|
|
118
|
+
}
|
|
119
|
+
else if (typeof resolvedRelationTarget === "function" && resolvedRelationTarget.name) {
|
|
120
|
+
relationTarget = resolvedRelationTarget;
|
|
121
|
+
}
|
|
122
|
+
else if (typeof resolvedRelationTarget === "object" && resolvedRelationTarget !== null && "name" in resolvedRelationTarget && typeof resolvedRelationTarget.name === "string") {
|
|
123
|
+
relationTarget = resolvedRelationTarget;
|
|
124
|
+
}
|
|
106
125
|
return {
|
|
107
126
|
isPrimary: false,
|
|
108
127
|
metadata,
|
|
109
128
|
name: propertyName,
|
|
129
|
+
relation: relationTarget
|
|
130
|
+
? {
|
|
131
|
+
target: relationTarget,
|
|
132
|
+
}
|
|
133
|
+
: undefined,
|
|
110
134
|
type: relationType,
|
|
111
135
|
};
|
|
112
136
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-entity-information.utility.js","sources":["../../../../src/utility/generate-entity-information.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-entity-information.utility.js","sources":["../../../../src/utility/generate-entity-information.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elsikora/nestjs-crud-automator",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2-dev.1",
|
|
4
4
|
"description": "A library for automating the creation of CRUD operations in NestJS.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NestJS",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"@nestjs/core": "^11.1.19",
|
|
73
73
|
"@nestjs/passport": "^11.0.5",
|
|
74
74
|
"@nestjs/platform-fastify": "^11.1.19",
|
|
75
|
-
"@nestjs/swagger": "
|
|
75
|
+
"@nestjs/swagger": "11.4.2",
|
|
76
76
|
"@nestjs/testing": "^11.1.19",
|
|
77
77
|
"@nestjs/throttler": "^6.5.0",
|
|
78
78
|
"@nestjs/typeorm": "^11.0.1",
|