nicot 1.2.12 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +638 -0
- package/dist/index.cjs +1075 -70
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +1080 -54
- package/dist/index.mjs.map +4 -4
- package/dist/src/bases/base-restful-controller.d.ts +2 -1
- package/dist/src/bases/id-base.d.ts +6 -0
- package/dist/src/bases/time-base.d.ts +6 -0
- package/dist/src/crud-base.d.ts +12 -5
- package/dist/src/decorators/access.d.ts +2 -3
- package/dist/src/decorators/index.d.ts +1 -0
- package/dist/src/decorators/property.d.ts +1 -0
- package/dist/src/decorators/upsert.d.ts +5 -0
- package/dist/src/restful.d.ts +31 -19
- package/dist/src/transactional-typeorm.module.d.ts +20 -0
- package/dist/src/utility/create-dynamic-fetcher-proxy.d.ts +1 -0
- package/dist/src/utility/create-inject-from-token-factory.d.ts +4 -0
- package/dist/src/utility/metadata.d.ts +10 -6
- package/index.ts +1 -0
- package/package.json +5 -2
|
@@ -2,7 +2,7 @@ import { CrudBase } from '../crud-base';
|
|
|
2
2
|
import { Repository } from 'typeorm';
|
|
3
3
|
import { ClassType } from 'nesties';
|
|
4
4
|
import { RelationDef } from '../utility/relation-def';
|
|
5
|
-
export declare const RestfulMethods: readonly ["findOne", "findAll", "create", "update", "delete", "import"];
|
|
5
|
+
export declare const RestfulMethods: readonly ["findOne", "findAll", "create", "update", "upsert", "delete", "import"];
|
|
6
6
|
export type RestfulMethods = typeof RestfulMethods[number];
|
|
7
7
|
export type RestfulPaginateType = 'offset' | 'cursor' | 'none';
|
|
8
8
|
export declare class BaseRestfulController<T extends {
|
|
@@ -23,6 +23,7 @@ export declare class BaseRestfulController<T extends {
|
|
|
23
23
|
findAll(dto: Partial<T>): Promise<import("nesties").GenericPaginatedReturnMessageDto<T>> | Promise<import("../dto").GenericCursorPaginationReturnMessageDto<T>>;
|
|
24
24
|
create(dto: T): Promise<import("nesties").GenericReturnMessageDto<T>>;
|
|
25
25
|
update(id: number, dto: Partial<T>): Promise<import("nesties").BlankReturnMessageDto>;
|
|
26
|
+
upsert(dto: T): Promise<import("nesties").GenericReturnMessageDto<T>>;
|
|
26
27
|
delete(id: number): Promise<import("nesties").BlankReturnMessageDto>;
|
|
27
28
|
import(data: {
|
|
28
29
|
data: T[];
|
|
@@ -17,6 +17,9 @@ export declare function IdBase(idOptions?: IdOptions): {
|
|
|
17
17
|
afterGet(): Promise<void>;
|
|
18
18
|
isValidInUpdate(): string | undefined;
|
|
19
19
|
beforeUpdate(): Promise<void>;
|
|
20
|
+
isValidInUpsert(): string | undefined;
|
|
21
|
+
beforeUpsert(): Promise<void>;
|
|
22
|
+
afterUpsert(): Promise<void>;
|
|
20
23
|
pageCount: number;
|
|
21
24
|
recordsPerPage: number;
|
|
22
25
|
getActualPageSettings(): import("nesties").PageSettingsWise;
|
|
@@ -44,6 +47,9 @@ export declare function StringIdBase(idOptions: StringIdOptions): {
|
|
|
44
47
|
afterGet(): Promise<void>;
|
|
45
48
|
isValidInUpdate(): string | undefined;
|
|
46
49
|
beforeUpdate(): Promise<void>;
|
|
50
|
+
isValidInUpsert(): string | undefined;
|
|
51
|
+
beforeUpsert(): Promise<void>;
|
|
52
|
+
afterUpsert(): Promise<void>;
|
|
47
53
|
pageCount: number;
|
|
48
54
|
recordsPerPage: number;
|
|
49
55
|
getActualPageSettings(): import("nesties").PageSettingsWise;
|
|
@@ -10,6 +10,9 @@ export interface EntityHooks {
|
|
|
10
10
|
afterGet(): Promise<void>;
|
|
11
11
|
isValidInUpdate(): string | undefined;
|
|
12
12
|
beforeUpdate(): Promise<void>;
|
|
13
|
+
isValidInUpsert(): string | undefined;
|
|
14
|
+
beforeUpsert(): Promise<void>;
|
|
15
|
+
afterUpsert(): Promise<void>;
|
|
13
16
|
}
|
|
14
17
|
export declare class TimeBase extends PageSettingsDto implements DeletionWise, EntityHooks {
|
|
15
18
|
createTime: Date;
|
|
@@ -22,4 +25,7 @@ export declare class TimeBase extends PageSettingsDto implements DeletionWise, E
|
|
|
22
25
|
afterGet(): Promise<void>;
|
|
23
26
|
isValidInUpdate(): string | undefined;
|
|
24
27
|
beforeUpdate(): Promise<void>;
|
|
28
|
+
isValidInUpsert(): string | undefined;
|
|
29
|
+
beforeUpsert(): Promise<void>;
|
|
30
|
+
afterUpsert(): Promise<void>;
|
|
25
31
|
}
|
package/dist/src/crud-base.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CursorPaginationDto } from './dto';
|
|
2
|
-
import { FindOneOptions, FindOptionsWhere, Repository, SelectQueryBuilder } from 'typeorm';
|
|
2
|
+
import { EntityManager, FindOneOptions, FindOptionsWhere, Repository, SelectQueryBuilder } from 'typeorm';
|
|
3
3
|
import { EntityHooks, PageSettingsDto, PageSettingsFactory, QueryWise } from './bases';
|
|
4
4
|
import { ConsoleLogger } from '@nestjs/common';
|
|
5
5
|
import { Awaitable, BlankReturnMessageDto, ClassType, GenericReturnMessageDto } from 'nesties';
|
|
@@ -21,6 +21,7 @@ export interface CrudOptions<T extends ValidCrudEntity<T>> {
|
|
|
21
21
|
createOrUpdate?: boolean;
|
|
22
22
|
keepEntityVersioningDates?: boolean;
|
|
23
23
|
outputFieldsToOmit?: (keyof T)[];
|
|
24
|
+
upsertIncludeRelations?: boolean;
|
|
24
25
|
}
|
|
25
26
|
export declare class CrudBase<T extends ValidCrudEntity<T>> {
|
|
26
27
|
entityClass: ClassType<T>;
|
|
@@ -61,6 +62,7 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
|
|
|
61
62
|
_freezeBindings(): BindingSnapshot;
|
|
62
63
|
_restoreBindings(frozen: BindingSnapshot): this;
|
|
63
64
|
beforeSuper<R>(fn: () => Promise<R>): Promise<R>;
|
|
65
|
+
_mayBeTransaction<R>(cb: (tdb: EntityManager, repo: Repository<T>) => Awaitable<R>, manager?: EntityManager): Promise<R>;
|
|
64
66
|
_batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
|
|
65
67
|
results: T[];
|
|
66
68
|
skipped: {
|
|
@@ -68,13 +70,14 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
|
|
|
68
70
|
entry: T;
|
|
69
71
|
}[];
|
|
70
72
|
}>;
|
|
71
|
-
create(_ent: T
|
|
73
|
+
create(_ent: Partial<T>, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<GenericReturnMessageDto<T>>;
|
|
72
74
|
get entityAliasName(): string;
|
|
73
75
|
_applyQueryRelation(qb: SelectQueryBuilder<T>, relation: RelationDef): void;
|
|
74
76
|
_applyQueryRelations(qb: SelectQueryBuilder<T>): void;
|
|
75
77
|
_applyQueryFilters(qb: SelectQueryBuilder<T>, ent: T): void;
|
|
76
78
|
queryBuilder(): SelectQueryBuilder<T>;
|
|
77
79
|
_applyQueryFromBinding(bindingEnt: Partial<T>, qb: SelectQueryBuilder<T>): void;
|
|
80
|
+
_applyQueryKeepEntityVersioningDates(qb: SelectQueryBuilder<T>): void;
|
|
78
81
|
findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<GenericReturnMessageDto<T>>;
|
|
79
82
|
_preFindAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<{
|
|
80
83
|
query: SelectQueryBuilder<T>;
|
|
@@ -84,8 +87,9 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
|
|
|
84
87
|
findAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericPaginatedReturnMessageDto<T>>;
|
|
85
88
|
findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
|
|
86
89
|
update(id: EntityId<T>, entPart: Partial<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
|
|
90
|
+
upsert(_ent: Partial<T>): Promise<GenericReturnMessageDto<T>>;
|
|
87
91
|
delete(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
|
|
88
|
-
importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
|
|
92
|
+
importEntities(_ents: Partial<T>[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
|
|
89
93
|
result: string;
|
|
90
94
|
entry: T;
|
|
91
95
|
}[]>>;
|
|
@@ -139,6 +143,7 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
|
|
|
139
143
|
_freezeBindings(): BindingSnapshot;
|
|
140
144
|
_restoreBindings(frozen: BindingSnapshot): /*elided*/ any;
|
|
141
145
|
beforeSuper<R>(fn: () => Promise<R>): Promise<R>;
|
|
146
|
+
_mayBeTransaction<R>(cb: (tdb: EntityManager, repo: Repository<T>) => Awaitable<R>, manager?: EntityManager): Promise<R>;
|
|
142
147
|
_batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
|
|
143
148
|
results: T[];
|
|
144
149
|
skipped: {
|
|
@@ -146,13 +151,14 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
|
|
|
146
151
|
entry: T;
|
|
147
152
|
}[];
|
|
148
153
|
}>;
|
|
149
|
-
create(_ent: T
|
|
154
|
+
create(_ent: Partial<T>, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<GenericReturnMessageDto<T>>;
|
|
150
155
|
readonly entityAliasName: string;
|
|
151
156
|
_applyQueryRelation(qb: SelectQueryBuilder<T>, relation: RelationDef): void;
|
|
152
157
|
_applyQueryRelations(qb: SelectQueryBuilder<T>): void;
|
|
153
158
|
_applyQueryFilters(qb: SelectQueryBuilder<T>, ent: T): void;
|
|
154
159
|
queryBuilder(): SelectQueryBuilder<T>;
|
|
155
160
|
_applyQueryFromBinding(bindingEnt: Partial<T>, qb: SelectQueryBuilder<T>): void;
|
|
161
|
+
_applyQueryKeepEntityVersioningDates(qb: SelectQueryBuilder<T>): void;
|
|
156
162
|
findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<GenericReturnMessageDto<T>>;
|
|
157
163
|
_preFindAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<{
|
|
158
164
|
query: SelectQueryBuilder<T>;
|
|
@@ -162,8 +168,9 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
|
|
|
162
168
|
findAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericPaginatedReturnMessageDto<T>>;
|
|
163
169
|
findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
|
|
164
170
|
update(id: EntityId<T>, entPart: Partial<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
|
|
171
|
+
upsert(_ent: Partial<T>): Promise<GenericReturnMessageDto<T>>;
|
|
165
172
|
delete(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
|
|
166
|
-
importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
|
|
173
|
+
importEntities(_ents: Partial<T>[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
|
|
167
174
|
result: string;
|
|
168
175
|
entry: T;
|
|
169
176
|
}[]>>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export declare const NotWritable: () => PropertyDecorator;
|
|
2
2
|
export declare const NotCreatable: () => PropertyDecorator;
|
|
3
3
|
export declare const NotChangeable: () => PropertyDecorator;
|
|
4
|
+
export declare const NotUpsertable: () => PropertyDecorator;
|
|
4
5
|
export declare const NotQueryable: () => import("typed-reflector").AllDecorators;
|
|
5
|
-
export declare const NotInResult: (
|
|
6
|
-
entityVersioningDate?: boolean;
|
|
7
|
-
}) => import("typed-reflector").AllDecorators;
|
|
6
|
+
export declare const NotInResult: () => import("typed-reflector").AllDecorators;
|
|
@@ -54,6 +54,7 @@ export declare const StringJsonColumn: <C extends ClassOrArray>(definition: C, o
|
|
|
54
54
|
}) => PropertyDecorator;
|
|
55
55
|
export declare const NotColumn: (options?: OpenAPIOptions<any>, specials?: {
|
|
56
56
|
keepInCreate?: boolean;
|
|
57
|
+
hideInUpsert?: boolean;
|
|
57
58
|
}) => PropertyDecorator;
|
|
58
59
|
export declare const QueryColumn: (options?: OpenAPIOptions<any>) => PropertyDecorator;
|
|
59
60
|
export declare const InternalColumn: () => PropertyDecorator;
|
package/dist/src/restful.d.ts
CHANGED
|
@@ -6,11 +6,12 @@ import { CursorPaginationDto } from './dto';
|
|
|
6
6
|
import { BaseRestfulController, RestfulMethods, RestfulPaginateType } from './bases/base-restful-controller';
|
|
7
7
|
import { Repository } from 'typeorm';
|
|
8
8
|
import { RelationDef } from './utility/relation-def';
|
|
9
|
-
export interface RestfulFactoryOptions<T, O extends keyof T = never, W extends keyof T = never, C extends keyof T = never, U extends keyof T = never, F extends keyof T = never, R extends keyof T = never> {
|
|
9
|
+
export interface RestfulFactoryOptions<T, O extends keyof T = never, W extends keyof T = never, C extends keyof T = never, U extends keyof T = never, US extends keyof T = never, F extends keyof T = never, R extends keyof T = never> {
|
|
10
10
|
fieldsToOmit?: O[];
|
|
11
11
|
writeFieldsToOmit?: W[];
|
|
12
12
|
createFieldsToOmit?: C[];
|
|
13
13
|
updateFieldsToOmit?: U[];
|
|
14
|
+
upsertFieldsToOmit?: US[];
|
|
14
15
|
findAllFieldsToOmit?: F[];
|
|
15
16
|
outputFieldsToOmit?: R[];
|
|
16
17
|
prefix?: string;
|
|
@@ -18,34 +19,38 @@ export interface RestfulFactoryOptions<T, O extends keyof T = never, W extends k
|
|
|
18
19
|
entityClassName?: string;
|
|
19
20
|
relations?: (string | RelationDef)[];
|
|
20
21
|
skipNonQueryableFields?: boolean;
|
|
22
|
+
upsertIncludeRelations?: boolean;
|
|
21
23
|
}
|
|
22
24
|
export interface ResourceOptions extends Partial<OperationObject> {
|
|
23
25
|
prefix?: string;
|
|
24
26
|
}
|
|
25
27
|
export declare class RestfulFactory<T extends {
|
|
26
28
|
id: any;
|
|
27
|
-
}, O extends keyof T = never, W extends keyof T = never, C extends keyof T = never, U extends keyof T = never, F extends keyof T = never, R extends keyof T = never> {
|
|
29
|
+
}, O extends keyof T = never, W extends keyof T = never, C extends keyof T = never, U extends keyof T = never, US extends keyof T = never, F extends keyof T = never, R extends keyof T = never> {
|
|
28
30
|
readonly entityClass: ClassType<T>;
|
|
29
31
|
private options;
|
|
30
32
|
private __resolveVisited;
|
|
31
|
-
constructor(entityClass: ClassType<T>, options?: RestfulFactoryOptions<T, O, W, C, U, F, R>, __resolveVisited?: Map<AnyClass, [AnyClass]>);
|
|
32
|
-
omitInput<K extends keyof T>(...fields: K[]): RestfulFactory<T, O | K, W, C, U, F, R>;
|
|
33
|
-
omitWrite<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W | K, C, U, F, R>;
|
|
34
|
-
omitCreate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C | K, U, F, R>;
|
|
35
|
-
omitUpdate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U | K, F, R>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
constructor(entityClass: ClassType<T>, options?: RestfulFactoryOptions<T, O, W, C, U, US, F, R>, __resolveVisited?: Map<AnyClass, [AnyClass]>);
|
|
34
|
+
omitInput<K extends keyof T>(...fields: K[]): RestfulFactory<T, O | K, W, C, U, US, F, R>;
|
|
35
|
+
omitWrite<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W | K, C, U, US, F, R>;
|
|
36
|
+
omitCreate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C | K, U, US, F, R>;
|
|
37
|
+
omitUpdate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U | K, US, F, R>;
|
|
38
|
+
omitUpsert<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U, US | K, F, R>;
|
|
39
|
+
omitFindAll<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U, US, F | K, R>;
|
|
40
|
+
omitOutput<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U, US, F, R | K>;
|
|
41
|
+
pathPrefix(prefix: string): RestfulFactory<T, O, W, C, U, US, F, R>;
|
|
42
|
+
keepEntityVersioningDates(enable?: boolean): RestfulFactory<T, O, W, C, U, US, F, R>;
|
|
43
|
+
skipNonQueryableFields(enable?: boolean): RestfulFactory<T, O, W, C, U, US, F, R>;
|
|
44
|
+
renameEntityClass(name: string): RestfulFactory<T, O, W, C, U, US, F, R>;
|
|
45
|
+
useRelations(...relations: (string | RelationDef)[]): RestfulFactory<T, O, W, C, U, US, F, R>;
|
|
43
46
|
get entityClassName(): string;
|
|
44
47
|
get fieldsToOmit(): (keyof T)[];
|
|
45
48
|
get fieldsInCreateToOmit(): (keyof T)[];
|
|
46
49
|
get createDto(): ClassType<Omit<T, O | W | C>>;
|
|
47
50
|
get fieldsInUpdateToOmit(): (keyof T)[];
|
|
48
51
|
get updateDto(): ClassType<Omit<T, O | W | U>>;
|
|
52
|
+
get fieldsInUpsertToOmit(): (keyof T)[];
|
|
53
|
+
get upsertDto(): ClassType<Omit<T, O | W | US>>;
|
|
49
54
|
get importDto(): new () => {
|
|
50
55
|
data: Omit<T, O | W | C>[];
|
|
51
56
|
};
|
|
@@ -55,6 +60,7 @@ export declare class RestfulFactory<T extends {
|
|
|
55
60
|
get findAllCursorPaginatedDto(): ClassType<T>;
|
|
56
61
|
get entityResultDto(): ClassType<Omit<T, R>>;
|
|
57
62
|
get entityCreateResultDto(): ClassType<Omit<T, R>>;
|
|
63
|
+
get entityUpsertResultDto(): ClassType<Omit<T, R>>;
|
|
58
64
|
get entityReturnMessageDto(): new (statusCode: number, message: string, data: Omit<T, R>) => import("nesties").GenericReturnMessageDto<Omit<T, R>>;
|
|
59
65
|
get entityCreateReturnMessageDto(): new (statusCode: number, message: string, data: Omit<T, R>) => import("nesties").GenericReturnMessageDto<Omit<T, R>>;
|
|
60
66
|
get entityArrayReturnMessageDto(): new (statusCode: number, message: string, data: Omit<T, R>[], total: number, pageSettings: import("nesties").PageSettingsWise) => import("nesties").GenericPaginatedReturnMessageDto<Omit<T, R>>;
|
|
@@ -70,6 +76,9 @@ export declare class RestfulFactory<T extends {
|
|
|
70
76
|
private usePrefix;
|
|
71
77
|
create(extras?: ResourceOptions): MethodDecorator;
|
|
72
78
|
createParam(): ParameterDecorator;
|
|
79
|
+
isUpsertable(): boolean;
|
|
80
|
+
upsert(extras?: ResourceOptions): MethodDecorator;
|
|
81
|
+
upsertParam(): ParameterDecorator;
|
|
73
82
|
findOne(extras?: ResourceOptions): MethodDecorator;
|
|
74
83
|
idParam(): ParameterDecorator;
|
|
75
84
|
findAll(extras?: ResourceOptions): MethodDecorator;
|
|
@@ -92,11 +101,11 @@ export declare class RestfulFactory<T extends {
|
|
|
92
101
|
}>>>;
|
|
93
102
|
}> = {}>(routeOptions?: Options): new (service: CrudBase<T> | Repository<T>) => ([{ [M in keyof NonNullable<Options["routes"]>]: NonNullable<Options["routes"]>[M] extends {
|
|
94
103
|
enabled: true;
|
|
95
|
-
} ? M : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "findOne" | "findAll" | "import")] extends [never] ? Omit<BaseRestfulController<T>, { [M_1 in keyof NonNullable<Options["routes"]>]: NonNullable<Options["routes"]>[M_1] extends {
|
|
104
|
+
} ? M : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "upsert" | "findOne" | "findAll" | "import")] extends [never] ? Omit<BaseRestfulController<T>, { [M_1 in keyof NonNullable<Options["routes"]>]: NonNullable<Options["routes"]>[M_1] extends {
|
|
96
105
|
enabled: false;
|
|
97
|
-
} ? M_1 : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "findOne" | "findAll" | "import")> : Pick<BaseRestfulController<T>, { [M in keyof NonNullable<Options["routes"]>]: NonNullable<Options["routes"]>[M] extends {
|
|
106
|
+
} ? M_1 : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "upsert" | "findOne" | "findAll" | "import")> : Pick<BaseRestfulController<T>, { [M in keyof NonNullable<Options["routes"]>]: NonNullable<Options["routes"]>[M] extends {
|
|
98
107
|
enabled: true;
|
|
99
|
-
} ? M : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "findOne" | "findAll" | "import")>) & {
|
|
108
|
+
} ? M : never; }[keyof NonNullable<Options["routes"]>] & ("update" | "create" | "delete" | "upsert" | "findOne" | "findAll" | "import")>) & {
|
|
100
109
|
_service: CrudBase<T>;
|
|
101
110
|
};
|
|
102
111
|
crudService(options?: CrudOptions<T>): {
|
|
@@ -142,6 +151,7 @@ export declare class RestfulFactory<T extends {
|
|
|
142
151
|
[x: string]: any;
|
|
143
152
|
}): /*elided*/ any;
|
|
144
153
|
beforeSuper<R_1>(fn: () => Promise<R_1>): Promise<R_1>;
|
|
154
|
+
_mayBeTransaction<R_1>(cb: (tdb: import("typeorm").EntityManager, repo: Repository<T>) => import("nesties").Awaitable<R_1>, manager?: import("typeorm").EntityManager): Promise<R_1>;
|
|
145
155
|
_batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
|
|
146
156
|
results: T[];
|
|
147
157
|
skipped: {
|
|
@@ -149,13 +159,14 @@ export declare class RestfulFactory<T extends {
|
|
|
149
159
|
entry: T;
|
|
150
160
|
}[];
|
|
151
161
|
}>;
|
|
152
|
-
create(_ent: T
|
|
162
|
+
create(_ent: Partial<T>, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<import("nesties").GenericReturnMessageDto<T>>;
|
|
153
163
|
readonly entityAliasName: string;
|
|
154
164
|
_applyQueryRelation(qb: import("typeorm").SelectQueryBuilder<T>, relation: RelationDef): void;
|
|
155
165
|
_applyQueryRelations(qb: import("typeorm").SelectQueryBuilder<T>): void;
|
|
156
166
|
_applyQueryFilters(qb: import("typeorm").SelectQueryBuilder<T>, ent: T): void;
|
|
157
167
|
queryBuilder(): import("typeorm").SelectQueryBuilder<T>;
|
|
158
168
|
_applyQueryFromBinding(bindingEnt: Partial<T>, qb: import("typeorm").SelectQueryBuilder<T>): void;
|
|
169
|
+
_applyQueryKeepEntityVersioningDates(qb: import("typeorm").SelectQueryBuilder<T>): void;
|
|
159
170
|
findOne(id: import("./crud-base").EntityId<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericReturnMessageDto<T>>;
|
|
160
171
|
_preFindAll(ent?: Partial<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<{
|
|
161
172
|
query: import("typeorm").SelectQueryBuilder<T>;
|
|
@@ -165,8 +176,9 @@ export declare class RestfulFactory<T extends {
|
|
|
165
176
|
findAll(ent?: Partial<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericPaginatedReturnMessageDto<T>>;
|
|
166
177
|
findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
|
|
167
178
|
update(id: import("./crud-base").EntityId<T>, entPart: Partial<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<import("nesties").BlankReturnMessageDto>;
|
|
179
|
+
upsert(_ent: Partial<T>): Promise<import("nesties").GenericReturnMessageDto<T>>;
|
|
168
180
|
delete(id: import("./crud-base").EntityId<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<import("nesties").BlankReturnMessageDto>;
|
|
169
|
-
importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<import("nesties").GenericReturnMessageDto<{
|
|
181
|
+
importEntities(_ents: Partial<T>[], extraChecking?: (ent: T) => string | Promise<string>): Promise<import("nesties").GenericReturnMessageDto<{
|
|
170
182
|
result: string;
|
|
171
183
|
entry: T;
|
|
172
184
|
}[]>>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DataSource, DataSourceOptions, EntityManager } from 'typeorm';
|
|
2
|
+
import { DynamicModule } from '@nestjs/common';
|
|
3
|
+
import { CallHandler } from '@nestjs/common/interfaces/features/nest-interceptor.interface';
|
|
4
|
+
import { ExecutionContext } from '@nestjs/common/interfaces/features/execution-context.interface';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
6
|
+
export declare const TransactionalTypeOrmInterceptor: (dataSource?: DataSource | DataSourceOptions | string) => {
|
|
7
|
+
new (entityManager: EntityManager): {
|
|
8
|
+
entityManager: EntityManager;
|
|
9
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const getTransactionalEntityManagerToken: (dataSource?: DataSource | DataSourceOptions | string) => string;
|
|
13
|
+
export declare const getTransactionalEntityManagerProvider: (dataSource?: DataSource | DataSourceOptions | string) => import("nesties").TypedFactoryProvider<[string | Function, "REQUEST"], EntityManager>;
|
|
14
|
+
export declare const InjectTransactionalEntityManager: (dataSource?: string | DataSource | DataSourceOptions) => PropertyDecorator & ParameterDecorator;
|
|
15
|
+
export declare const getTransactionalRepositoryToken: (entity: Function, dataSource?: DataSource | DataSourceOptions | string) => string;
|
|
16
|
+
export declare const getTransactionalRepositoryProvider: (entity: Function, dataSource?: DataSource | DataSourceOptions | string) => import("nesties").TypedFactoryProvider<[string | Function, "REQUEST"], import("typeorm").Repository<import("typeorm").ObjectLiteral>>;
|
|
17
|
+
export declare const InjectTransactionalRepository: (entity: Function, dataSource?: string | DataSource | DataSourceOptions) => PropertyDecorator & ParameterDecorator;
|
|
18
|
+
export declare class TransactionalTypeOrmModule {
|
|
19
|
+
static forFeature(entities: Function | Function[], dataSource?: DataSource | DataSourceOptions | string): DynamicModule;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createDynamicFetcherProxy: <T extends object>(initial: T, fetcher: () => T) => T;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Inject } from '@nestjs/common';
|
|
2
|
+
type InjectToken = Parameters<typeof Inject>[0];
|
|
3
|
+
export declare const createInjectFromTokenFactory: <P extends any[]>(factory: (...params: P) => InjectToken) => (...params: P) => PropertyDecorator & ParameterDecorator;
|
|
4
|
+
export {};
|
|
@@ -7,14 +7,15 @@ import { BindingValueMetadata } from '../decorators/binding';
|
|
|
7
7
|
interface SpecificFields {
|
|
8
8
|
notColumn: {
|
|
9
9
|
keepInCreate?: boolean;
|
|
10
|
+
hideInUpsert?: boolean;
|
|
10
11
|
};
|
|
11
12
|
notWritable: boolean;
|
|
12
13
|
notCreatable: boolean;
|
|
13
14
|
notChangeable: boolean;
|
|
15
|
+
notUpsertable: boolean;
|
|
14
16
|
notQueryable: boolean;
|
|
15
|
-
notInResult:
|
|
16
|
-
|
|
17
|
-
};
|
|
17
|
+
notInResult: boolean;
|
|
18
|
+
entityVersioningDate: boolean;
|
|
18
19
|
relationComputed: () => {
|
|
19
20
|
entityClass: AnyClass;
|
|
20
21
|
isArray: boolean;
|
|
@@ -26,13 +27,16 @@ interface SpecificFields {
|
|
|
26
27
|
getMutator: GetMutatorOptions;
|
|
27
28
|
bindingColumn: string;
|
|
28
29
|
bindingValue: BindingValueMetadata;
|
|
30
|
+
upsertColumn: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface MetadataMap extends SpecificFields {
|
|
33
|
+
upsertableEntity: boolean;
|
|
29
34
|
}
|
|
30
|
-
type MetadataMap = SpecificFields;
|
|
31
35
|
type FieldsMap = {
|
|
32
36
|
[K in keyof MetadataMap as `${K}Fields`]: string;
|
|
33
37
|
};
|
|
34
|
-
export declare const Metadata: MetadataSetter<
|
|
35
|
-
export declare const reflector: Reflector<
|
|
38
|
+
export declare const Metadata: MetadataSetter<MetadataMap, FieldsMap>;
|
|
39
|
+
export declare const reflector: Reflector<MetadataMap, FieldsMap>;
|
|
36
40
|
export declare function getSpecificFields<K extends keyof SpecificFields>(obj: any, type: K, filter?: (meta: SpecificFields[K], obj: any) => boolean): FieldsMap[`${K}Fields`][];
|
|
37
41
|
export declare function getNotInResultFields(obj: any, keepEntityVersioningDates?: boolean): string[];
|
|
38
42
|
export {};
|
package/index.ts
CHANGED
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.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"jest": "^29.7.0",
|
|
82
82
|
"pg": "^8.7.3",
|
|
83
83
|
"prettier": "^2.7.1",
|
|
84
|
+
"rxjs": "^7.8.2",
|
|
84
85
|
"supertest": "^6.2.4",
|
|
85
86
|
"ts-jest": "^29.3.2",
|
|
86
87
|
"typescript": "^5.8.3"
|
|
@@ -88,14 +89,16 @@
|
|
|
88
89
|
"peerDependencies": {
|
|
89
90
|
"@nestjs/common": "^11.0.0 || ^9.4.0 || ^10.0.0",
|
|
90
91
|
"@nestjs/config": "^4.0.0 || ^3.0.0",
|
|
92
|
+
"@nestjs/core": "^11.0.0 || ^9.4.0 || ^10.0.0",
|
|
91
93
|
"@nestjs/swagger": "^11.0.0 || ^7.1.8 || ^6.3.0",
|
|
92
94
|
"class-transformer": "^0.5.1",
|
|
93
95
|
"class-validator": "^0.14.0",
|
|
96
|
+
"rxjs": ">=7.0.0",
|
|
94
97
|
"typeorm": "^0.3.27"
|
|
95
98
|
},
|
|
96
99
|
"dependencies": {
|
|
97
100
|
"lodash": "^4.17.21",
|
|
98
|
-
"nesties": "^1.1.
|
|
101
|
+
"nesties": "^1.1.23",
|
|
99
102
|
"nfkit": "^1.0.13",
|
|
100
103
|
"p-queue": "6.6.2",
|
|
101
104
|
"superjson": "1.13.3",
|