nicot 1.1.8 → 1.1.10
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/README.md +176 -14
- package/dist/src/decorators/property.d.ts +2 -0
- package/dist/src/decorators/property.js +14 -1
- package/dist/src/decorators/property.js.map +1 -1
- package/dist/src/decorators/restful.d.ts +2 -0
- package/dist/src/decorators/restful.js +57 -9
- package/dist/src/decorators/restful.js.map +1 -1
- package/dist/src/utility/get-typeorm-relations.js +17 -1
- package/dist/src/utility/get-typeorm-relations.js.map +1 -1
- package/dist/src/utility/metadata.d.ts +5 -0
- package/dist/src/utility/metadata.js.map +1 -1
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
## 📦 安装
|
|
15
15
|
|
|
16
|
+
在你的 Nest.js 项目中:
|
|
17
|
+
|
|
16
18
|
```bash
|
|
17
|
-
npm install nicot typeorm @nestjs/typeorm class-validator class-transformer reflect-metadata @nestjs/swagger
|
|
19
|
+
npm install nicot @nestjs/config typeorm @nestjs/typeorm class-validator class-transformer reflect-metadata @nestjs/swagger
|
|
18
20
|
```
|
|
19
21
|
|
|
20
22
|
---
|
|
@@ -159,13 +161,14 @@ name: string;
|
|
|
159
161
|
|
|
160
162
|
NICOT 提供以下装饰器用于控制字段在不同接口中的表现:
|
|
161
163
|
|
|
162
|
-
| 装饰器名
|
|
163
|
-
|
|
164
|
-
| `@NotWritable()`
|
|
165
|
-
| `@NotChangeable()`
|
|
166
|
-
| `@NotQueryable()`
|
|
167
|
-
| `@NotInResult()`
|
|
168
|
-
| `@NotColumn()`
|
|
164
|
+
| 装饰器名 | 行为控制说明 |
|
|
165
|
+
|----------------------------------------|-------------------------------|
|
|
166
|
+
| `@NotWritable()` | 不允许在创建(POST)或修改(PATCH)时传入 |
|
|
167
|
+
| `@NotChangeable()` | 不允许在修改(PATCH)时更新(只可创建) |
|
|
168
|
+
| `@NotQueryable()` | 不允许在 GET 查询参数中使用该字段 |
|
|
169
|
+
| `@NotInResult()` | 不会出现在任何返回结果中(如密码字段) |
|
|
170
|
+
| `@NotColumn()` | 不是数据库字段(仅逻辑字段,如计算用字段) |
|
|
171
|
+
| `@RelationComputed(() => EntityClass)` | 标识该字段依赖关系字段推导而来(通常在 afterGet) |
|
|
169
172
|
|
|
170
173
|
RestfulFactory 处理 Entity 类的时候,会以这些装饰器为依据,裁剪生成的 DTO 和查询参数。
|
|
171
174
|
|
|
@@ -430,7 +433,7 @@ isActive: boolean;
|
|
|
430
433
|
### 示例 Controller
|
|
431
434
|
|
|
432
435
|
```ts
|
|
433
|
-
const factory = new RestfulFactory(User);
|
|
436
|
+
const factory = new RestfulFactory(User, { relations: ['articles'] });
|
|
434
437
|
class CreateUserDto extends factory.createDto {}
|
|
435
438
|
class UpdateUserDto extends factory.updateDto {}
|
|
436
439
|
class FindAllUserDto extends factory.findAllDto {}
|
|
@@ -480,6 +483,133 @@ export class UserController {
|
|
|
480
483
|
|
|
481
484
|
---
|
|
482
485
|
|
|
486
|
+
### 导出 DTO 类
|
|
487
|
+
|
|
488
|
+
`RestfulFactory` 会自动生成以下 DTO 类:供你导出并在其他的 OpenAPI 装饰器中使用。
|
|
489
|
+
|
|
490
|
+
```ts
|
|
491
|
+
const factory = new RestfulFactory(User, {
|
|
492
|
+
relations: ['articles'],
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
class CreateUserDto extends factory.createDto {} // 创建用 DTO,在 POST /user 中使用
|
|
496
|
+
class UpdateUserDto extends factory.updateDto {} // 更新用 DTO,在 PATCH /user/:id 中使用
|
|
497
|
+
class FindAllUserDto extends factory.findAllDto {} // 查询用 DTO,在 GET /user 中使用
|
|
498
|
+
class UserResultDto extends factory.entityResultDto {} // 查询结果 DTO,在 GET /user/:id 和 GET /user 中返回
|
|
499
|
+
class UserCreateResultDto extends factory.entityCreateResultDto {} // 创建结果 DTO,在 POST /user 中返回。相比 entityResultDto 省略了间接字段和关系字段
|
|
500
|
+
class UserReturnMessageDto extends factory.entityReturnMessageDto {} // 相当于 ReturnMessageDto(UserResultDto),在 GET /user 中返回
|
|
501
|
+
class UserCreateReturnMessageDto extends factory.entityCreateReturnMessageDto {} // 相当于 ReturnMessageDto(UserCreateResultDto),在 POST /user 中返回
|
|
502
|
+
class UserArrayResultDto extends factory.entityArrayResultDto {} // 相当于 PaginatedReturnMessageDto(UserResultDto),在 GET /user 中返回
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
### 关系定义
|
|
508
|
+
|
|
509
|
+
类似于 `CrudService`,`RestfulFactory` 也需要在配置中定义关系字段。语法和 `CrudService` 的 `relations` 参数完全一致。
|
|
510
|
+
|
|
511
|
+
```ts
|
|
512
|
+
class User extends IdBase() {
|
|
513
|
+
@OneToMany(() => Article, article => article.user)
|
|
514
|
+
articles: Article[];
|
|
515
|
+
|
|
516
|
+
@OneToMany(() => Comment, comment => comment.user)
|
|
517
|
+
comments: Comment[];
|
|
518
|
+
|
|
519
|
+
@OneToMany(() => Like, like => like.users)
|
|
520
|
+
likes: Like[];
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
class Article extends IdBase() {
|
|
524
|
+
@ManyToOne(() => User, user => user.articles)
|
|
525
|
+
user: User;
|
|
526
|
+
|
|
527
|
+
@OneToMany(() => Comment, comment => comment.article)
|
|
528
|
+
comments: Comment[];
|
|
529
|
+
|
|
530
|
+
@OneToMany(() => Like, like => like.article)
|
|
531
|
+
likes: Like[];
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
class Like extends IdBase() {
|
|
535
|
+
@ManyToOne(() => User, user => user.likes)
|
|
536
|
+
user: User;
|
|
537
|
+
|
|
538
|
+
@ManyToOne(() => Article, article => article.likes)
|
|
539
|
+
article: Article;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
class Comment extends IdBase() {
|
|
543
|
+
@ManyToOne(() => Article, article => article.comments)
|
|
544
|
+
article: Article;
|
|
545
|
+
|
|
546
|
+
@ManyToOne(() => User, user => user.articles)
|
|
547
|
+
user: User;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
const factory = new RestfulFactory(User, {
|
|
551
|
+
relations: ['comments', 'articles', 'articles.comments'], // 生成的 DTO 类中,只含有标明的关系字段,而 articles.user 不会被包含
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
class UserResultDto extends factory.entityResultDto {
|
|
555
|
+
// 生成的 DTO 类中包含 comments, articles, articles.comments 字段
|
|
556
|
+
// 但是不包含 likes, articles.user, articles.likes 等未声明关系字段
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
如果你的配套 `CrudService` 不准备加载任何关系,那么可以传入空数组:
|
|
561
|
+
|
|
562
|
+
```ts
|
|
563
|
+
const factory = new RestfulFactory(User, {
|
|
564
|
+
relations: [], // DTO 不包含任何关系字段
|
|
565
|
+
});
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
如果不写 `relations`,则默认会尽可能加载所有非 `@NotInResult()` 的关系字段。但现在推荐显式声明需要加载的关系,以避免不必要的 OpenAPI 文档杂乱。
|
|
569
|
+
|
|
570
|
+
> 这是曾经版本的 nicot (<1.1.9) 的做法。
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
### 依赖关系的间接字段
|
|
575
|
+
|
|
576
|
+
如果你有实体类,某一间接字段(`@NotColumn()`),依赖某个关系字段,那么需要显示声明这个字段。
|
|
577
|
+
|
|
578
|
+
```ts
|
|
579
|
+
export class Participant extends IdBase() {
|
|
580
|
+
@OneToMany(() => Match, match => match.player1)
|
|
581
|
+
matches1: Match[];
|
|
582
|
+
|
|
583
|
+
@OneToMany(() => Match, match => match.player2)
|
|
584
|
+
matches2: Match[];
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
export class Match extends IdBase() {
|
|
588
|
+
@ManyToOne(() => Participant, participant => participant.matches1)
|
|
589
|
+
player1: Participant;
|
|
590
|
+
@ManyToOne(() => Participant, participant => participant.matches2)
|
|
591
|
+
player2: Participant;
|
|
592
|
+
|
|
593
|
+
@NotColumn()
|
|
594
|
+
@RelationComputed(() => Participant) // 声明这个字段依赖于 player1 和 player2 生成,当作关系参与裁剪,避免被拖入 Participant 属性黑洞
|
|
595
|
+
players: Participant[];
|
|
596
|
+
|
|
597
|
+
async afterGet() {
|
|
598
|
+
this.players = [this.player1, this.player2].filter(s => s);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
const factory = new RestfulFactory(Match, {
|
|
603
|
+
relations: ['player1', 'player2', 'players'],
|
|
604
|
+
});
|
|
605
|
+
|
|
606
|
+
class MatchResultDto extends factory.entityResultDto {
|
|
607
|
+
// 包含 player1, player2, players 字段,但是不包含 player1.matches1, player1.matches2 等间接关系字段
|
|
608
|
+
}
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
483
613
|
## 📄 分页查询(自动支持)
|
|
484
614
|
|
|
485
615
|
NICOT 的 `findAll()` 方法默认支持分页,**无需你手动声明分页字段**,框架内部已内置分页 DTO 与逻辑。
|
|
@@ -543,10 +673,9 @@ NICOT 默认提供统一的接口返回格式与 Swagger 自动注解能力,
|
|
|
543
673
|
|
|
544
674
|
### ✅ 返回结构 DTO 类型(用于 Swagger 类型标注)
|
|
545
675
|
|
|
546
|
-
#### `ReturnMessageDto(EntityClass)`
|
|
547
|
-
用于生成带数据的标准返回结构类型(**不是直接返回值**,用于 `@nestjs/swagger`)。
|
|
676
|
+
#### `ReturnMessageDto(EntityClass)`
|
|
548
677
|
|
|
549
|
-
|
|
678
|
+
用于生成带数据的标准返回结构类型(**不是直接返回值**,用于 `@nestjs/swagger`)。
|
|
550
679
|
|
|
551
680
|
```json
|
|
552
681
|
{
|
|
@@ -554,13 +683,42 @@ NICOT 默认提供统一的接口返回格式与 Swagger 自动注解能力,
|
|
|
554
683
|
"success": true,
|
|
555
684
|
"message": "success",
|
|
556
685
|
"timestamp": "2025-04-25T12:00:00.000Z",
|
|
557
|
-
"data": {
|
|
686
|
+
"data": {}
|
|
558
687
|
}
|
|
559
688
|
```
|
|
560
689
|
|
|
561
|
-
#### `BlankReturnMessageDto`
|
|
690
|
+
#### `BlankReturnMessageDto`
|
|
691
|
+
|
|
562
692
|
无数据返回结构的类型(用于 DELETE、UPDATE 等空响应)。
|
|
563
693
|
|
|
694
|
+
```json
|
|
695
|
+
{
|
|
696
|
+
"statusCode": 200,
|
|
697
|
+
"success": true,
|
|
698
|
+
"message": "success"
|
|
699
|
+
}
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
#### `PaginatedReturnMessageDto(EntityClass)`
|
|
703
|
+
|
|
704
|
+
带有分页信息的返回结构类型。
|
|
705
|
+
|
|
706
|
+
> EntityClass 会自动变成数组类型。
|
|
707
|
+
|
|
708
|
+
```json
|
|
709
|
+
{
|
|
710
|
+
"statusCode": 200,
|
|
711
|
+
"success": true,
|
|
712
|
+
"message": "success",
|
|
713
|
+
"timestamp": "2025-04-25T12:00:00.000Z",
|
|
714
|
+
"data": [{}],
|
|
715
|
+
"total": 100,
|
|
716
|
+
"totalPages": 4,
|
|
717
|
+
"pageCount": 1,
|
|
718
|
+
"recordsPerPage": 25
|
|
719
|
+
}
|
|
720
|
+
```
|
|
721
|
+
|
|
564
722
|
---
|
|
565
723
|
|
|
566
724
|
### 📊 实际返回结构
|
|
@@ -812,3 +970,7 @@ NICOT 作为一个 “Entity 驱动” 的框架,在开发体验、安全性
|
|
|
812
970
|
- 内建返回结构、Swagger 注解、守卫装饰器等功能
|
|
813
971
|
|
|
814
972
|
是构建 NestJS 标准化、低重复、文档完善的后端服务的理想选择。
|
|
973
|
+
|
|
974
|
+
## LICENSE
|
|
975
|
+
|
|
976
|
+
MIT
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ColumnCommonOptions } from 'typeorm/decorator/options/ColumnCommonOptions';
|
|
2
2
|
import { ApiPropertyOptions } from '@nestjs/swagger';
|
|
3
3
|
import { ColumnWithLengthOptions } from 'typeorm/decorator/options/ColumnWithLengthOptions';
|
|
4
|
+
import { AnyClass } from 'nesties';
|
|
4
5
|
import { WithPrecisionColumnType, WithWidthColumnType } from 'typeorm/driver/types/ColumnTypes';
|
|
5
6
|
import { ColumnWithWidthOptions } from 'typeorm/decorator/options/ColumnWithWidthOptions';
|
|
6
7
|
import { ColumnNumericOptions } from 'typeorm/decorator/options/ColumnNumericOptions';
|
|
@@ -26,3 +27,4 @@ export declare const EnumColumn: <T>(targetEnum: Record<string, T>, options?: Pr
|
|
|
26
27
|
export declare const BoolColumn: (options?: PropertyOptions<boolean>) => PropertyDecorator;
|
|
27
28
|
export declare const JsonColumn: <C extends ClassOrArray>(definition: C, options?: PropertyOptions<ParseType<C>, unknown>) => PropertyDecorator;
|
|
28
29
|
export declare const NotColumn: (options?: OpenAPIOptions<any>) => PropertyDecorator;
|
|
30
|
+
export declare const RelationComputed: (type?: () => AnyClass) => PropertyDecorator;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NotColumn = exports.JsonColumn = exports.BoolColumn = exports.EnumColumn = exports.DateColumn = exports.FloatColumn = exports.IntColumn = exports.StringColumn = void 0;
|
|
3
|
+
exports.RelationComputed = exports.NotColumn = exports.JsonColumn = exports.BoolColumn = exports.EnumColumn = exports.DateColumn = exports.FloatColumn = exports.IntColumn = exports.StringColumn = void 0;
|
|
4
4
|
const swagger_1 = require("@nestjs/swagger");
|
|
5
5
|
const nesties_1 = require("nesties");
|
|
6
6
|
const typeorm_1 = require("typeorm");
|
|
@@ -166,4 +166,17 @@ const NotColumn = (options = {}) => (0, nesties_1.MergePropertyDecorators)([
|
|
|
166
166
|
metadata_1.Metadata.set('notColumn', true, 'notColumnFields'),
|
|
167
167
|
]);
|
|
168
168
|
exports.NotColumn = NotColumn;
|
|
169
|
+
const RelationComputed = (type) => (obj, propertyKey) => {
|
|
170
|
+
const fun = () => {
|
|
171
|
+
const designType = Reflect.getMetadata('design:type', obj, propertyKey);
|
|
172
|
+
const entityClass = type ? type() : designType;
|
|
173
|
+
return {
|
|
174
|
+
entityClass,
|
|
175
|
+
isArray: designType === Array,
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
const dec = metadata_1.Metadata.set('relationComputed', fun, 'relationComputedFields');
|
|
179
|
+
return dec(obj, propertyKey);
|
|
180
|
+
};
|
|
181
|
+
exports.RelationComputed = RelationComputed;
|
|
169
182
|
//# sourceMappingURL=property.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property.js","sourceRoot":"","sources":["../../../src/decorators/property.ts"],"names":[],"mappings":";;;AACA,6CAAkE;AAElE,
|
|
1
|
+
{"version":3,"file":"property.js","sourceRoot":"","sources":["../../../src/decorators/property.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { AnyClass, ClassType } from 'nesties';
|
|
2
2
|
import { OperationObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
|
|
3
|
+
import { RelationDef } from '../crud-base';
|
|
3
4
|
export interface RestfulFactoryOptions<T> {
|
|
4
5
|
fieldsToOmit?: (keyof T)[];
|
|
5
6
|
prefix?: string;
|
|
6
7
|
keepEntityVersioningDates?: boolean;
|
|
7
8
|
outputFieldsToOmit?: (keyof T)[];
|
|
8
9
|
entityClassName?: string;
|
|
10
|
+
relations?: (string | RelationDef)[];
|
|
9
11
|
}
|
|
10
12
|
export declare class RestfulFactory<T> {
|
|
11
13
|
readonly entityClass: ClassType<T>;
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
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;
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
26
|
exports.RestfulFactory = void 0;
|
|
@@ -9,11 +29,23 @@ const dto_1 = require("../dto");
|
|
|
9
29
|
const nesties_1 = require("nesties");
|
|
10
30
|
const swagger_1 = require("@nestjs/swagger");
|
|
11
31
|
const pipes_1 = require("./pipes");
|
|
12
|
-
const lodash_1 =
|
|
32
|
+
const lodash_1 = __importStar(require("lodash"));
|
|
13
33
|
const metadata_1 = require("../utility/metadata");
|
|
14
34
|
const rename_class_1 = require("../utility/rename-class");
|
|
15
35
|
const constants_1 = require("@nestjs/swagger/dist/constants");
|
|
16
36
|
const get_typeorm_relations_1 = require("../utility/get-typeorm-relations");
|
|
37
|
+
const extractRelationName = (relation) => {
|
|
38
|
+
if (typeof relation === 'string') {
|
|
39
|
+
return relation;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return relation.name;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const getCurrentLevelRelations = (relations) => relations.filter((r) => !r.includes('.'));
|
|
46
|
+
const getNextLevelRelations = (relations, enteringField) => relations
|
|
47
|
+
.filter((r) => r.includes('.') && r.startsWith(`${enteringField}.`))
|
|
48
|
+
.map((r) => r.split('.').slice(1).join('.'));
|
|
17
49
|
class RestfulFactory {
|
|
18
50
|
constructor(entityClass, options = {}, __resolveVisited = new Map()) {
|
|
19
51
|
this.entityClass = entityClass;
|
|
@@ -26,7 +58,7 @@ class RestfulFactory {
|
|
|
26
58
|
]);
|
|
27
59
|
this.basicInputDto = (0, swagger_1.OmitType)(this.entityClass, this.fieldsToOmit);
|
|
28
60
|
this.createDto = (0, rename_class_1.RenameClass)((0, swagger_1.OmitType)(this.basicInputDto, (0, metadata_1.getSpecificFields)(this.entityClass, 'notWritable')), `Create${this.entityClass.name}Dto`);
|
|
29
|
-
this.importDto = (0, dto_1.ImportDataDto)(this.
|
|
61
|
+
this.importDto = (0, dto_1.ImportDataDto)(this.createDto);
|
|
30
62
|
this.findAllDto = (0, rename_class_1.RenameClass)((0, swagger_1.PartialType)((0, swagger_1.OmitType)(this.basicInputDto, (0, metadata_1.getSpecificFields)(this.entityClass, 'notQueryable'))), `Find${this.entityClass.name}Dto`);
|
|
31
63
|
this.updateDto = (0, rename_class_1.RenameClass)((0, swagger_1.PartialType)((0, swagger_1.OmitType)(this.createDto, (0, metadata_1.getSpecificFields)(this.entityClass, 'notChangeable'))), `Update${this.entityClass.name}Dto`);
|
|
32
64
|
this.entityResultDto = this.resolveEntityResultDto();
|
|
@@ -47,12 +79,19 @@ class RestfulFactory {
|
|
|
47
79
|
return this.options.entityClassName || this.entityClass.name;
|
|
48
80
|
}
|
|
49
81
|
resolveEntityResultDto() {
|
|
82
|
+
const relations = (0, get_typeorm_relations_1.getTypeormRelations)(this.entityClass);
|
|
83
|
+
const currentLevelRelations = this.options.relations &&
|
|
84
|
+
new Set(getCurrentLevelRelations(this.options.relations.map(extractRelationName)));
|
|
50
85
|
const outputFieldsToOmit = new Set([
|
|
51
86
|
...(0, metadata_1.getNotInResultFields)(this.entityClass, this.options.keepEntityVersioningDates),
|
|
52
87
|
...(this.options.outputFieldsToOmit || []),
|
|
88
|
+
...(this.options.relations
|
|
89
|
+
? relations
|
|
90
|
+
.map((r) => r.propertyName)
|
|
91
|
+
.filter((r) => !currentLevelRelations.has(r))
|
|
92
|
+
: []),
|
|
53
93
|
]);
|
|
54
94
|
const resultDto = (0, swagger_1.OmitType)(this.entityClass, [...outputFieldsToOmit]);
|
|
55
|
-
const relations = (0, get_typeorm_relations_1.getTypeormRelations)(this.entityClass);
|
|
56
95
|
for (const relation of relations) {
|
|
57
96
|
if (outputFieldsToOmit.has(relation.propertyName))
|
|
58
97
|
continue;
|
|
@@ -69,15 +108,24 @@ class RestfulFactory {
|
|
|
69
108
|
replace(existing);
|
|
70
109
|
}
|
|
71
110
|
else {
|
|
72
|
-
if (!this.__resolveVisited.has(this.entityClass)
|
|
111
|
+
if (!this.__resolveVisited.has(this.entityClass) &&
|
|
112
|
+
!this.options.relations) {
|
|
73
113
|
this.__resolveVisited.set(this.entityClass, [null]);
|
|
74
114
|
}
|
|
75
115
|
const relationFactory = new RestfulFactory(relation.propertyClass, {
|
|
76
|
-
entityClassName: `${this.getEntityClassName()}${
|
|
116
|
+
entityClassName: `${this.getEntityClassName()}${this.options.relations
|
|
117
|
+
? (0, lodash_1.upperFirst)(relation.propertyName)
|
|
118
|
+
: relation.propertyClass.name}`,
|
|
119
|
+
relations: this.options.relations &&
|
|
120
|
+
getNextLevelRelations(this.options.relations.map(extractRelationName), relation.propertyName),
|
|
77
121
|
}, this.__resolveVisited);
|
|
78
122
|
const relationResultDto = relationFactory.entityResultDto;
|
|
79
123
|
replace([relationResultDto]);
|
|
80
|
-
this.
|
|
124
|
+
if (!this.options.relations) {
|
|
125
|
+
this.__resolveVisited.set(relation.propertyClass, [
|
|
126
|
+
relationResultDto,
|
|
127
|
+
]);
|
|
128
|
+
}
|
|
81
129
|
}
|
|
82
130
|
}
|
|
83
131
|
const res = (0, rename_class_1.RenameClass)(resultDto, `${this.getEntityClassName()}ResultDto`);
|
|
@@ -215,7 +263,7 @@ class RestfulFactory {
|
|
|
215
263
|
summary: `Import ${this.getEntityClassName()}`,
|
|
216
264
|
...extras,
|
|
217
265
|
}),
|
|
218
|
-
(0, swagger_1.ApiBody)({ type:
|
|
266
|
+
(0, swagger_1.ApiBody)({ type: this.importDto }),
|
|
219
267
|
(0, swagger_1.ApiOkResponse)({ type: this.importReturnMessageDto }),
|
|
220
268
|
(0, swagger_1.ApiInternalServerErrorResponse)({
|
|
221
269
|
type: nesties_1.BlankReturnMessageDto,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restful.js","sourceRoot":"","sources":["../../../src/decorators/restful.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"restful.js","sourceRoot":"","sources":["../../../src/decorators/restful.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.getTypeormRelationsMap = exports.getTypeormRelations = void 0;
|
|
4
7
|
const typeorm_1 = require("typeorm");
|
|
8
|
+
const metadata_1 = require("./metadata");
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
5
10
|
function getTypeormRelations(cl) {
|
|
6
11
|
const relations = (0, typeorm_1.getMetadataArgsStorage)().relations.filter((r) => r.target === cl);
|
|
7
|
-
|
|
12
|
+
const typeormRelations = relations.map((relation) => {
|
|
8
13
|
const isArray = relation.relationType.endsWith('-many');
|
|
9
14
|
const relationClassFactory = relation.type;
|
|
10
15
|
// check if it's a callable function
|
|
@@ -24,6 +29,17 @@ function getTypeormRelations(cl) {
|
|
|
24
29
|
propertyName: relation.propertyName,
|
|
25
30
|
};
|
|
26
31
|
});
|
|
32
|
+
const computedRelations = (0, metadata_1.getSpecificFields)(cl, 'relationComputed').map((field) => {
|
|
33
|
+
const meta = metadata_1.reflector.get('relationComputed', cl, field);
|
|
34
|
+
const res = meta();
|
|
35
|
+
return {
|
|
36
|
+
isArray: res.isArray,
|
|
37
|
+
propertyClass: res.entityClass,
|
|
38
|
+
propertyName: field,
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
return lodash_1.default.uniqBy([...typeormRelations, ...computedRelations], // Merge typeorm relations and computed relations
|
|
42
|
+
(r) => r.propertyName);
|
|
27
43
|
}
|
|
28
44
|
exports.getTypeormRelations = getTypeormRelations;
|
|
29
45
|
function getTypeormRelationsMap(cl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-typeorm-relations.js","sourceRoot":"","sources":["../../../src/utility/get-typeorm-relations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-typeorm-relations.js","sourceRoot":"","sources":["../../../src/utility/get-typeorm-relations.ts"],"names":[],"mappings":";;;;;;AACA,qCAAiD;AACjD,yCAA0D;AAC1D,oDAAuB;AAEvB,SAAgB,mBAAmB,CAAI,EAAgB;IACrD,MAAM,SAAS,GAAG,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,MAAM,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CACvB,CAAC;IAEF,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3C,oCAAoC;QACpC,IAAI,aAAuB,CAAC;QAC5B,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE;YAC9C,MAAM,aAAa,GAAI,oBAAuC,EAAE,CAAC;YACjE,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE;gBACvC,aAAa,GAAG,aAAa,CAAC;aAC/B;SACF;QACD,IAAI,CAAC,aAAa,EAAE;YAClB,aAAa,GAAG,OAAO,CAAC,WAAW,CACjC,aAAa,EACb,EAAE,CAAC,SAAS,EACZ,QAAQ,CAAC,YAAY,CACtB,CAAC;SACH;QACD,OAAO;YACL,OAAO;YACP,aAAa;YACb,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,IAAA,4BAAiB,EAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,GAAG,CACrE,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,GAAG,oBAAS,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,aAAa,EAAE,GAAG,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC,CACF,CAAC;IACF,OAAO,gBAAC,CAAC,MAAM,CACb,CAAC,GAAG,gBAAgB,EAAE,GAAG,iBAAiB,CAAC,EAAE,iDAAiD;IAC9F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CACtB,CAAC;AACJ,CAAC;AA7CD,kDA6CC;AAED,SAAgB,sBAAsB,CAAI,EAAgB;IACxD,OAAO,MAAM,CAAC,WAAW,CACvB,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAOxD,CAAC;AACJ,CAAC;AAVD,wDAUC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MetadataSetter, Reflector } from 'typed-reflector';
|
|
2
2
|
import { QueryCond } from '../bases';
|
|
3
|
+
import { AnyClass } from 'nesties';
|
|
3
4
|
interface SpecificFields {
|
|
4
5
|
notColumn: boolean;
|
|
5
6
|
notWritable: boolean;
|
|
@@ -7,6 +8,10 @@ interface SpecificFields {
|
|
|
7
8
|
notQueryable: boolean;
|
|
8
9
|
notInResult: boolean;
|
|
9
10
|
entityVersioningDate: boolean;
|
|
11
|
+
relationComputed: () => {
|
|
12
|
+
entityClass: AnyClass;
|
|
13
|
+
isArray: boolean;
|
|
14
|
+
};
|
|
10
15
|
}
|
|
11
16
|
interface MetadataMap extends SpecificFields {
|
|
12
17
|
queryCondition: QueryCond;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/utility/metadata.ts"],"names":[],"mappings":";;;AAAA,qDAA4D;
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/utility/metadata.ts"],"names":[],"mappings":";;;AAAA,qDAA4D;AAwB/C,QAAA,QAAQ,GAAG,IAAI,gCAAc,EAAiC,CAAC;AAC/D,QAAA,SAAS,GAAG,IAAI,2BAAS,EAAiC,CAAC;AAExE,SAAgB,iBAAiB,CAAC,GAAQ,EAAE,IAA0B;IACpE,OAAO,iBAAS;SACb,QAAQ,CAAC,GAAG,IAAI,QAAQ,EAAE,GAAG,CAAC;SAC9B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AAJD,8CAIC;AAED,SAAgB,oBAAoB,CAClC,GAAQ,EACR,yBAAyB,GAAG,KAAK;IAEjC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAChE,IAAI,yBAAyB,EAAE;QAC7B,OAAO,iBAAiB,CAAC;KAC1B;IACD,OAAO;QACL,GAAG,iBAAiB;QACpB,GAAG,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,CAAC;KAClD,CAAC;AACJ,CAAC;AAZD,oDAYC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nicot",
|
|
3
3
|
"description": "Nest.js interacting with class-validator + OpenAPI + TypeORM for Nest.js Restful API development.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.10",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
},
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "https://
|
|
15
|
+
"url": "https://github.com/purerosefallen/nicot.git"
|
|
16
16
|
},
|
|
17
17
|
"author": "Nanahira <nanahira@momobako.com>",
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"keywords": [],
|
|
20
20
|
"bugs": {
|
|
21
|
-
"url": "https://
|
|
21
|
+
"url": "https://github.com/purerosefallen/nicot/issues"
|
|
22
22
|
},
|
|
23
|
-
"homepage": "https://
|
|
23
|
+
"homepage": "https://github.com/purerosefallen/nicot",
|
|
24
24
|
"jest": {
|
|
25
25
|
"moduleFileExtensions": [
|
|
26
26
|
"js",
|
|
@@ -61,15 +61,16 @@
|
|
|
61
61
|
"typescript": "^4.7.4"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
|
-
"@nestjs/common": "^
|
|
65
|
-
"@nestjs/
|
|
64
|
+
"@nestjs/common": "^11.0.0 || ^9.4.0 || ^10.0.0",
|
|
65
|
+
"@nestjs/config": "^4.0.0 || ^3.0.0",
|
|
66
|
+
"@nestjs/swagger": "^11.0.0 || ^7.1.8 || ^6.3.0",
|
|
66
67
|
"class-transformer": "^0.5.1",
|
|
67
68
|
"class-validator": "^0.14.0",
|
|
68
69
|
"typeorm": "^0.3.16"
|
|
69
70
|
},
|
|
70
71
|
"dependencies": {
|
|
71
72
|
"lodash": "^4.17.21",
|
|
72
|
-
"nesties": "^1.1.
|
|
73
|
+
"nesties": "^1.1.2",
|
|
73
74
|
"typed-reflector": "^1.0.11"
|
|
74
75
|
}
|
|
75
76
|
}
|