nicot 1.2.4 → 1.2.6

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.
@@ -1,12 +1,14 @@
1
1
  import { CursorPaginationDto } from './dto';
2
- import { FindOptionsWhere, Repository, SelectQueryBuilder } from 'typeorm';
2
+ import { FindOneOptions, FindOptionsWhere, Repository, SelectQueryBuilder } from 'typeorm';
3
3
  import { EntityHooks, PageSettingsDto, PageSettingsFactory, QueryWise } from './bases';
4
4
  import { ConsoleLogger } from '@nestjs/common';
5
- import { BlankReturnMessageDto, ClassType } from 'nesties';
5
+ import { Awaitable, BlankReturnMessageDto, ClassType, GenericReturnMessageDto } from 'nesties';
6
6
  import { RelationDef } from './utility/relation-def';
7
+ import { BindingValueMetadata } from './decorators';
7
8
  export type EntityId<T extends {
8
9
  id: any;
9
10
  }> = T['id'];
11
+ type BindingSnapshot = Record<string, any>;
10
12
  export declare const Relation: (name: string, options?: Omit<RelationDef, "name">) => RelationDef;
11
13
  export declare const Inner: (name: string, options?: Omit<RelationDef, "name">) => RelationDef;
12
14
  export type ValidCrudEntity<T> = Record<string, any> & {
@@ -25,7 +27,7 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
25
27
  repo: Repository<T>;
26
28
  crudOptions: CrudOptions<T>;
27
29
  readonly entityName: string;
28
- readonly entityReturnMessageDto: new (statusCode: number, message: string, data: T) => import("nesties").GenericReturnMessageDto<T>;
30
+ readonly entityReturnMessageDto: new (statusCode: number, message: string, data: T) => GenericReturnMessageDto<T>;
29
31
  readonly importEntryDto: new () => {
30
32
  result: string;
31
33
  entry: T;
@@ -33,7 +35,7 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
33
35
  readonly importReturnMessageDto: new (statusCode: number, message: string, data: {
34
36
  result: string;
35
37
  entry: T;
36
- }[]) => import("nesties").GenericReturnMessageDto<{
38
+ }[]) => GenericReturnMessageDto<{
37
39
  result: string;
38
40
  entry: T;
39
41
  }[]>;
@@ -46,6 +48,19 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
46
48
  constructor(entityClass: ClassType<T>, repo: Repository<T>, crudOptions: CrudOptions<T>);
47
49
  _cleanEntityNotInResultFields(ent: T): T;
48
50
  cleanEntityNotInResultFields<E extends T | T[]>(ents: E): E;
51
+ readonly _tmpBindingMap: Map<string, any>;
52
+ readonly _bindingCache: Map<string, BindingValueMetadata & {
53
+ field: string;
54
+ }>;
55
+ _lookForBindingValueField(bindingKey: string): BindingValueMetadata & {
56
+ field: string;
57
+ };
58
+ _resolveBindingValue<K extends keyof T>(entityField: K): T[K] | Promise<T[K]>;
59
+ getBindingPartialEntity(): Promise<Partial<T>>;
60
+ useBinding(value: any, bindngKey?: string): this;
61
+ _freezeBindings(): BindingSnapshot;
62
+ _restoreBindings(frozen: BindingSnapshot): this;
63
+ beforeSuper<R>(fn: () => Promise<R>): Promise<R>;
49
64
  _batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
50
65
  results: T[];
51
66
  skipped: {
@@ -53,13 +68,14 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
53
68
  entry: T;
54
69
  }[];
55
70
  }>;
56
- create(_ent: T, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<import("nesties").GenericReturnMessageDto<T>>;
71
+ create(_ent: T, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<GenericReturnMessageDto<T>>;
57
72
  get entityAliasName(): string;
58
73
  _applyQueryRelation(qb: SelectQueryBuilder<T>, relation: RelationDef): void;
59
74
  _applyQueryRelations(qb: SelectQueryBuilder<T>): void;
60
75
  _applyQueryFilters(qb: SelectQueryBuilder<T>, ent: T): void;
61
76
  queryBuilder(): SelectQueryBuilder<T>;
62
- findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericReturnMessageDto<T>>;
77
+ _applyQueryFromBinding(bindingEnt: Partial<T>, qb: SelectQueryBuilder<T>): void;
78
+ findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<GenericReturnMessageDto<T>>;
63
79
  _preFindAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<{
64
80
  query: SelectQueryBuilder<T>;
65
81
  newEnt: T;
@@ -69,18 +85,22 @@ export declare class CrudBase<T extends ValidCrudEntity<T>> {
69
85
  findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
70
86
  update(id: EntityId<T>, entPart: Partial<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
71
87
  delete(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
72
- importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<import("nesties").GenericReturnMessageDto<{
88
+ importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
73
89
  result: string;
74
90
  entry: T;
75
91
  }[]>>;
76
- exists(id: EntityId<T>): Promise<boolean>;
92
+ exists(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<boolean>;
93
+ operation<R>(id: EntityId<T>, cb: (ent: T, ctx: {
94
+ repo: Repository<T>;
95
+ flush: () => Promise<void>;
96
+ }) => Awaitable<R>, extraOptions?: FindOneOptions<T>): Promise<GenericReturnMessageDto<R>>;
77
97
  _loadFullTextIndex(): Promise<void>;
78
98
  onModuleInit(): Promise<void>;
79
99
  }
80
100
  export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: ClassType<T>, crudOptions?: CrudOptions<T>): {
81
101
  new (repo: Repository<T>): {
82
102
  readonly entityName: string;
83
- readonly entityReturnMessageDto: new (statusCode: number, message: string, data: T) => import("nesties").GenericReturnMessageDto<T>;
103
+ readonly entityReturnMessageDto: new (statusCode: number, message: string, data: T) => GenericReturnMessageDto<T>;
84
104
  readonly importEntryDto: new () => {
85
105
  result: string;
86
106
  entry: T;
@@ -88,7 +108,7 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
88
108
  readonly importReturnMessageDto: new (statusCode: number, message: string, data: {
89
109
  result: string;
90
110
  entry: T;
91
- }[]) => import("nesties").GenericReturnMessageDto<{
111
+ }[]) => GenericReturnMessageDto<{
92
112
  result: string;
93
113
  entry: T;
94
114
  }[]>;
@@ -103,6 +123,19 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
103
123
  crudOptions: CrudOptions<T>;
104
124
  _cleanEntityNotInResultFields(ent: T): T;
105
125
  cleanEntityNotInResultFields<E extends T | T[]>(ents: E): E;
126
+ readonly _tmpBindingMap: Map<string, any>;
127
+ readonly _bindingCache: Map<string, BindingValueMetadata & {
128
+ field: string;
129
+ }>;
130
+ _lookForBindingValueField(bindingKey: string): BindingValueMetadata & {
131
+ field: string;
132
+ };
133
+ _resolveBindingValue<K extends keyof T>(entityField: K): T[K] | Promise<T[K]>;
134
+ getBindingPartialEntity(): Promise<Partial<T>>;
135
+ useBinding(value: any, bindngKey?: string): /*elided*/ any;
136
+ _freezeBindings(): BindingSnapshot;
137
+ _restoreBindings(frozen: BindingSnapshot): /*elided*/ any;
138
+ beforeSuper<R>(fn: () => Promise<R>): Promise<R>;
106
139
  _batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
107
140
  results: T[];
108
141
  skipped: {
@@ -110,13 +143,14 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
110
143
  entry: T;
111
144
  }[];
112
145
  }>;
113
- create(_ent: T, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<import("nesties").GenericReturnMessageDto<T>>;
146
+ create(_ent: T, beforeCreate?: (repo: Repository<T>) => Promise<void>): Promise<GenericReturnMessageDto<T>>;
114
147
  readonly entityAliasName: string;
115
148
  _applyQueryRelation(qb: SelectQueryBuilder<T>, relation: RelationDef): void;
116
149
  _applyQueryRelations(qb: SelectQueryBuilder<T>): void;
117
150
  _applyQueryFilters(qb: SelectQueryBuilder<T>, ent: T): void;
118
151
  queryBuilder(): SelectQueryBuilder<T>;
119
- findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericReturnMessageDto<T>>;
152
+ _applyQueryFromBinding(bindingEnt: Partial<T>, qb: SelectQueryBuilder<T>): void;
153
+ findOne(id: EntityId<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<GenericReturnMessageDto<T>>;
120
154
  _preFindAll(ent?: Partial<T>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<{
121
155
  query: SelectQueryBuilder<T>;
122
156
  newEnt: T;
@@ -126,12 +160,17 @@ export declare function CrudService<T extends ValidCrudEntity<T>>(entityClass: C
126
160
  findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
127
161
  update(id: EntityId<T>, entPart: Partial<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
128
162
  delete(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
129
- importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<import("nesties").GenericReturnMessageDto<{
163
+ importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<GenericReturnMessageDto<{
130
164
  result: string;
131
165
  entry: T;
132
166
  }[]>>;
133
- exists(id: EntityId<T>): Promise<boolean>;
167
+ exists(id: EntityId<T>, cond?: FindOptionsWhere<T>): Promise<boolean>;
168
+ operation<R>(id: EntityId<T>, cb: (ent: T, ctx: {
169
+ repo: Repository<T>;
170
+ flush: () => Promise<void>;
171
+ }) => Awaitable<R>, extraOptions?: FindOneOptions<T>): Promise<GenericReturnMessageDto<R>>;
134
172
  _loadFullTextIndex(): Promise<void>;
135
173
  onModuleInit(): Promise<void>;
136
174
  };
137
175
  };
176
+ export {};
@@ -0,0 +1,7 @@
1
+ export interface BindingValueMetadata {
2
+ bindingKey: string;
3
+ isMethod: boolean;
4
+ }
5
+ export declare const DefaultBindingKey = "default";
6
+ export declare const BindingColumn: (bindingKey?: string) => PropertyDecorator;
7
+ export declare const BindingValue: (bindingKey?: string) => PropertyDecorator & MethodDecorator;
@@ -3,3 +3,4 @@ export * from './property';
3
3
  export * from './pipes';
4
4
  export * from './query';
5
5
  export * from './get-mutator';
6
+ export * from './binding';
@@ -1,4 +1,4 @@
1
- import { AnyClass, BlankReturnMessageDto, ClassType } from 'nesties';
1
+ import { AnyClass, ClassType } from 'nesties';
2
2
  import { OperationObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
3
3
  import { CrudBase, CrudOptions } from './crud-base';
4
4
  import { PageSettingsDto } from './bases';
@@ -26,7 +26,18 @@ export declare class RestfulFactory<T extends {
26
26
  private options;
27
27
  private __resolveVisited;
28
28
  constructor(entityClass: ClassType<T>, options?: RestfulFactoryOptions<T, O, W, C, U, F, R>, __resolveVisited?: Map<AnyClass, [AnyClass]>);
29
- private getEntityClassName;
29
+ omitInput<K extends keyof T>(...fields: K[]): RestfulFactory<T, O | K, W, C, U, F, R>;
30
+ omitWrite<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W | K, C, U, F, R>;
31
+ omitCreate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C | K, U, F, R>;
32
+ omitUpdate<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U | K, F, R>;
33
+ omitFindAll<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U, F | K, R>;
34
+ omitOutput<K extends keyof T>(...fields: K[]): RestfulFactory<T, O, W, C, U, F, R | K>;
35
+ pathPrefix(prefix: string): RestfulFactory<T, O, W, C, U, F, R>;
36
+ keepEntityVersioningDates(enable?: boolean): RestfulFactory<T, O, W, C, U, F, R>;
37
+ skipNonQueryableFields(enable?: boolean): RestfulFactory<T, O, W, C, U, F, R>;
38
+ renameEntityClass(name: string): RestfulFactory<T, O, W, C, U, F, R>;
39
+ useRelations(...relations: (string | RelationDef)[]): RestfulFactory<T, O, W, C, U, F, R>;
40
+ get entityClassName(): string;
30
41
  get fieldsToOmit(): (keyof T)[];
31
42
  get fieldsInCreateToOmit(): (keyof T)[];
32
43
  get createDto(): ClassType<Omit<T, O | W | C>>;
@@ -66,6 +77,10 @@ export declare class RestfulFactory<T extends {
66
77
  updateParam(): ParameterDecorator;
67
78
  delete(extras?: Partial<OperationObject>): MethodDecorator;
68
79
  import(extras?: Partial<OperationObject>): MethodDecorator;
80
+ operation(operationName: string, options?: {
81
+ returnType?: AnyClass;
82
+ operationExtras?: Partial<OperationObject>;
83
+ }): MethodDecorator;
69
84
  baseController<Options extends Partial<{
70
85
  paginateType: RestfulPaginateType;
71
86
  globalMethodDecorators: MethodDecorator[];
@@ -108,6 +123,23 @@ export declare class RestfulFactory<T extends {
108
123
  crudOptions: CrudOptions<T>;
109
124
  _cleanEntityNotInResultFields(ent: T): T;
110
125
  cleanEntityNotInResultFields<E extends T | T[]>(ents: E): E;
126
+ readonly _tmpBindingMap: Map<string, any>;
127
+ readonly _bindingCache: Map<string, import("./decorators").BindingValueMetadata & {
128
+ field: string;
129
+ }>;
130
+ _lookForBindingValueField(bindingKey: string): import("./decorators").BindingValueMetadata & {
131
+ field: string;
132
+ };
133
+ _resolveBindingValue<K extends keyof T>(entityField: K): T[K] | Promise<T[K]>;
134
+ getBindingPartialEntity(): Promise<Partial<T>>;
135
+ useBinding(value: any, bindngKey?: string): /*elided*/ any;
136
+ _freezeBindings(): {
137
+ [x: string]: any;
138
+ };
139
+ _restoreBindings(frozen: {
140
+ [x: string]: any;
141
+ }): /*elided*/ any;
142
+ beforeSuper<R_1>(fn: () => Promise<R_1>): Promise<R_1>;
111
143
  _batchCreate(ents: T[], beforeCreate?: (repo: Repository<T>) => Promise<void>, skipErrors?: boolean): Promise<{
112
144
  results: T[];
113
145
  skipped: {
@@ -121,6 +153,7 @@ export declare class RestfulFactory<T extends {
121
153
  _applyQueryRelations(qb: import("typeorm").SelectQueryBuilder<T>): void;
122
154
  _applyQueryFilters(qb: import("typeorm").SelectQueryBuilder<T>, ent: T): void;
123
155
  queryBuilder(): import("typeorm").SelectQueryBuilder<T>;
156
+ _applyQueryFromBinding(bindingEnt: Partial<T>, qb: import("typeorm").SelectQueryBuilder<T>): void;
124
157
  findOne(id: import("./crud-base").EntityId<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericReturnMessageDto<T>>;
125
158
  _preFindAll(ent?: Partial<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<{
126
159
  query: import("typeorm").SelectQueryBuilder<T>;
@@ -129,13 +162,17 @@ export declare class RestfulFactory<T extends {
129
162
  }>;
130
163
  findAll(ent?: Partial<T>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("nesties").GenericPaginatedReturnMessageDto<T>>;
131
164
  findAllCursorPaginated(ent?: Partial<T & Partial<CursorPaginationDto>>, extraQuery?: (qb: import("typeorm").SelectQueryBuilder<T>) => void): Promise<import("./dto").GenericCursorPaginationReturnMessageDto<T>>;
132
- update(id: import("./crud-base").EntityId<T>, entPart: Partial<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
133
- delete(id: import("./crud-base").EntityId<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<BlankReturnMessageDto>;
165
+ update(id: import("./crud-base").EntityId<T>, entPart: Partial<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<import("nesties").BlankReturnMessageDto>;
166
+ delete(id: import("./crud-base").EntityId<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<import("nesties").BlankReturnMessageDto>;
134
167
  importEntities(_ents: T[], extraChecking?: (ent: T) => string | Promise<string>): Promise<import("nesties").GenericReturnMessageDto<{
135
168
  result: string;
136
169
  entry: T;
137
170
  }[]>>;
138
- exists(id: import("./crud-base").EntityId<T>): Promise<boolean>;
171
+ exists(id: import("./crud-base").EntityId<T>, cond?: import("typeorm").FindOptionsWhere<T>): Promise<boolean>;
172
+ operation<R_1>(id: import("./crud-base").EntityId<T>, cb: (ent: T, ctx: {
173
+ repo: Repository<T>;
174
+ flush: () => Promise<void>;
175
+ }) => import("nesties").Awaitable<R_1>, extraOptions?: import("typeorm").FindOneOptions<T>): Promise<import("nesties").GenericReturnMessageDto<R_1>>;
139
176
  _loadFullTextIndex(): Promise<void>;
140
177
  onModuleInit(): Promise<void>;
141
178
  };
@@ -3,6 +3,7 @@ import { QueryCond } from '../bases';
3
3
  import { AnyClass } from 'nesties';
4
4
  import { QueryFullTextColumnOptions } from './query-full-text-column-options.interface';
5
5
  import { GetMutatorOptions } from '../decorators/get-mutator';
6
+ import { BindingValueMetadata } from '../decorators/binding';
6
7
  interface SpecificFields {
7
8
  notColumn: {
8
9
  keepInCreate?: boolean;
@@ -23,6 +24,8 @@ interface SpecificFields {
23
24
  queryCondition: QueryCond;
24
25
  requireGetMutator: boolean;
25
26
  getMutator: GetMutatorOptions;
27
+ bindingColumn: string;
28
+ bindingValue: BindingValueMetadata;
26
29
  }
27
30
  type MetadataMap = SpecificFields;
28
31
  type FieldsMap = {
@@ -0,0 +1,6 @@
1
+ export declare const observeDiff: <T>(obj: T, cb: <K extends keyof T>(change: {
2
+ type: "add" | "update" | "delete";
3
+ key: K;
4
+ oldValue: T[K] | undefined;
5
+ newValue: T[K] | undefined;
6
+ }) => any) => T;
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.2.4",
4
+ "version": "1.2.6",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",