tspace-mysql 1.9.0 → 1.9.1-beta.2

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.
Files changed (118) hide show
  1. package/README.md +4580 -133
  2. package/dist/lib/config/index.d.ts +2 -2
  3. package/dist/lib/config/index.js +24 -16
  4. package/dist/lib/config/index.js.map +1 -1
  5. package/dist/lib/constants/index.d.ts +10 -1
  6. package/dist/lib/constants/index.js +11 -2
  7. package/dist/lib/constants/index.js.map +1 -1
  8. package/dist/lib/core/Abstracts/AbstractBuilder.d.ts +27 -23
  9. package/dist/lib/core/Abstracts/AbstractBuilder.js +11 -13
  10. package/dist/lib/core/Abstracts/AbstractBuilder.js.map +1 -1
  11. package/dist/lib/core/Abstracts/AbstractDB.d.ts +5 -2
  12. package/dist/lib/core/Abstracts/AbstractDB.js.map +1 -1
  13. package/dist/lib/core/Abstracts/AbstractModel.d.ts +7 -2
  14. package/dist/lib/core/Abstracts/AbstractModel.js.map +1 -1
  15. package/dist/lib/core/Abstracts/AbstractView.js.map +1 -1
  16. package/dist/lib/core/Blueprint.d.ts +37 -17
  17. package/dist/lib/core/Blueprint.js +38 -14
  18. package/dist/lib/core/Blueprint.js.map +1 -1
  19. package/dist/lib/core/Builder.d.ts +314 -42
  20. package/dist/lib/core/Builder.js +686 -391
  21. package/dist/lib/core/Builder.js.map +1 -1
  22. package/dist/lib/core/Cache/DBCache.js +19 -20
  23. package/dist/lib/core/Cache/DBCache.js.map +1 -1
  24. package/dist/lib/core/Cache/MemoryCache.js +3 -3
  25. package/dist/lib/core/Cache/MemoryCache.js.map +1 -1
  26. package/dist/lib/core/Cache/RedisCache.js +27 -17
  27. package/dist/lib/core/Cache/RedisCache.js.map +1 -1
  28. package/dist/lib/core/Cache/index.js +37 -17
  29. package/dist/lib/core/Cache/index.js.map +1 -1
  30. package/dist/lib/core/Contracts/AlterTable.d.ts +152 -0
  31. package/dist/lib/core/Contracts/AlterTable.js +243 -0
  32. package/dist/lib/core/Contracts/AlterTable.js.map +1 -0
  33. package/dist/lib/core/Contracts/Audit.d.ts +1 -1
  34. package/dist/lib/core/Contracts/Audit.js +2 -5
  35. package/dist/lib/core/Contracts/Audit.js.map +1 -1
  36. package/dist/lib/core/Contracts/Logger.d.ts +1 -1
  37. package/dist/lib/core/Contracts/Logger.js.map +1 -1
  38. package/dist/lib/core/DB.d.ts +103 -11
  39. package/dist/lib/core/DB.js +158 -32
  40. package/dist/lib/core/DB.js.map +1 -1
  41. package/dist/lib/core/Decorator.d.ts +144 -16
  42. package/dist/lib/core/Decorator.js +156 -14
  43. package/dist/lib/core/Decorator.js.map +1 -1
  44. package/dist/lib/core/Driver/index.d.ts +50 -14
  45. package/dist/lib/core/Driver/index.js +13 -9
  46. package/dist/lib/core/Driver/index.js.map +1 -1
  47. package/dist/lib/core/Driver/mariadb/MariadbDriver.js +84 -29
  48. package/dist/lib/core/Driver/mariadb/MariadbDriver.js.map +1 -1
  49. package/dist/lib/core/Driver/mariadb/MariadbQueryBuilder.d.ts +48 -12
  50. package/dist/lib/core/Driver/mariadb/MariadbQueryBuilder.js +189 -28
  51. package/dist/lib/core/Driver/mariadb/MariadbQueryBuilder.js.map +1 -1
  52. package/dist/lib/core/Driver/mongodb/MongodbDriver.d.ts +24 -0
  53. package/dist/lib/core/Driver/mongodb/MongodbDriver.js +261 -0
  54. package/dist/lib/core/Driver/mongodb/MongodbDriver.js.map +1 -0
  55. package/dist/lib/core/Driver/mongodb/MongodbQueryBuilder.d.ts +141 -0
  56. package/dist/lib/core/Driver/mongodb/MongodbQueryBuilder.js +571 -0
  57. package/dist/lib/core/Driver/mongodb/MongodbQueryBuilder.js.map +1 -0
  58. package/dist/lib/core/Driver/mysql/MysqlDriver.js +115 -97
  59. package/dist/lib/core/Driver/mysql/MysqlDriver.js.map +1 -1
  60. package/dist/lib/core/Driver/mysql/MysqlQueryBuilder.d.ts +48 -12
  61. package/dist/lib/core/Driver/mysql/MysqlQueryBuilder.js +189 -28
  62. package/dist/lib/core/Driver/mysql/MysqlQueryBuilder.js.map +1 -1
  63. package/dist/lib/core/Driver/postgres/PostgresDriver.js +106 -73
  64. package/dist/lib/core/Driver/postgres/PostgresDriver.js.map +1 -1
  65. package/dist/lib/core/Driver/postgres/PostgresQueryBuilder.d.ts +53 -12
  66. package/dist/lib/core/Driver/postgres/PostgresQueryBuilder.js +318 -48
  67. package/dist/lib/core/Driver/postgres/PostgresQueryBuilder.js.map +1 -1
  68. package/dist/lib/core/Driver/sqlite/SqliteDriver.d.ts +21 -0
  69. package/dist/lib/core/Driver/sqlite/SqliteDriver.js +213 -0
  70. package/dist/lib/core/Driver/sqlite/SqliteDriver.js.map +1 -0
  71. package/dist/lib/core/Driver/sqlite/SqliteQueryBuilder.d.ts +146 -0
  72. package/dist/lib/core/Driver/sqlite/SqliteQueryBuilder.js +705 -0
  73. package/dist/lib/core/Driver/sqlite/SqliteQueryBuilder.js.map +1 -0
  74. package/dist/lib/core/Join.d.ts +63 -5
  75. package/dist/lib/core/Join.js +92 -15
  76. package/dist/lib/core/Join.js.map +1 -1
  77. package/dist/lib/core/JoinModel.d.ts +65 -9
  78. package/dist/lib/core/JoinModel.js +81 -52
  79. package/dist/lib/core/JoinModel.js.map +1 -1
  80. package/dist/lib/core/Meta.d.ts +22 -16
  81. package/dist/lib/core/Meta.js +28 -21
  82. package/dist/lib/core/Meta.js.map +1 -1
  83. package/dist/lib/core/Model.d.ts +644 -134
  84. package/dist/lib/core/Model.js +1361 -631
  85. package/dist/lib/core/Model.js.map +1 -1
  86. package/dist/lib/{tools/index.d.ts → core/Package.d.ts} +11 -3
  87. package/dist/lib/{tools/index.js → core/Package.js} +20 -7
  88. package/dist/lib/core/Package.js.map +1 -0
  89. package/dist/lib/core/Pool.js +42 -30
  90. package/dist/lib/core/Pool.js.map +1 -1
  91. package/dist/lib/core/Queue.d.ts +249 -0
  92. package/dist/lib/core/Queue.js +726 -0
  93. package/dist/lib/core/Queue.js.map +1 -0
  94. package/dist/lib/core/RelationManager.d.ts +4 -4
  95. package/dist/lib/core/RelationManager.js +168 -41
  96. package/dist/lib/core/RelationManager.js.map +1 -1
  97. package/dist/lib/core/Repository.d.ts +73 -207
  98. package/dist/lib/core/Repository.js +122 -234
  99. package/dist/lib/core/Repository.js.map +1 -1
  100. package/dist/lib/core/Schema.d.ts +211 -1
  101. package/dist/lib/core/Schema.js +370 -65
  102. package/dist/lib/core/Schema.js.map +1 -1
  103. package/dist/lib/core/StateManager.d.ts +31 -12
  104. package/dist/lib/core/StateManager.js +11 -5
  105. package/dist/lib/core/StateManager.js.map +1 -1
  106. package/dist/lib/core/UtilityTypes.d.ts +103 -81
  107. package/dist/lib/core/UtilityTypes.js.map +1 -1
  108. package/dist/lib/core/index.d.ts +4 -0
  109. package/dist/lib/core/index.js +6 -2
  110. package/dist/lib/core/index.js.map +1 -1
  111. package/dist/lib/types/decorator/index.d.ts +1 -1
  112. package/dist/lib/types/index.d.ts +120 -30
  113. package/dist/lib/types/repository/index.d.ts +68 -37
  114. package/dist/lib/utils/index.d.ts +13 -2
  115. package/dist/lib/utils/index.js +81 -2
  116. package/dist/lib/utils/index.js.map +1 -1
  117. package/package.json +14 -6
  118. package/dist/lib/tools/index.js.map +0 -1
@@ -3,13 +3,31 @@ import { TCache as Cache } from '../core/Cache';
3
3
  import { CONSTANTS } from '../constants';
4
4
  import { Join } from "../core/Join";
5
5
  import { QueryBuilder } from "../core/Driver";
6
- import { TResult } from "../core";
6
+ import { T, TResult } from "../core";
7
7
  import { TResultDecorator } from "./decorator";
8
8
  export type TCache = Cache;
9
+ export type TCacheModel = {
10
+ provider: () => string;
11
+ driver: (driver: "db" | "memory" | "redis") => any;
12
+ all: () => Promise<any[]>;
13
+ clear: () => Promise<void>;
14
+ get: (key: string, options?: {
15
+ namespace?: boolean;
16
+ }) => Promise<any>;
17
+ exists: (key: string, options?: {
18
+ namespace?: boolean;
19
+ }) => Promise<boolean>;
20
+ set: (key: string, value: unknown, ms: number, options?: {
21
+ namespace?: boolean;
22
+ }) => Promise<void>;
23
+ delete: (key: string, options?: {
24
+ namespace?: boolean;
25
+ }) => Promise<void>;
26
+ };
9
27
  export type TConstant = typeof CONSTANTS;
10
28
  export type TRelationOptions<K = any> = {
11
29
  name: K;
12
- model: new () => Model<any, any>;
30
+ model: new () => Model<any, any, any>;
13
31
  as?: string;
14
32
  localKey?: string;
15
33
  foreignKey?: string;
@@ -17,7 +35,7 @@ export type TRelationOptions<K = any> = {
17
35
  pivot?: string;
18
36
  query?: any;
19
37
  queryPivot?: any;
20
- relation?: Object;
38
+ relation?: string;
21
39
  exists?: boolean;
22
40
  notExists?: boolean;
23
41
  all?: boolean;
@@ -28,7 +46,7 @@ export type TRelationOptions<K = any> = {
28
46
  };
29
47
  export type TRelationQueryOptions<K = any> = {
30
48
  name: K extends void ? never : K;
31
- model: new () => Model<any, any>;
49
+ model: new () => Model<any, any, any>;
32
50
  as?: string;
33
51
  localKey?: string;
34
52
  foreignKey?: string;
@@ -58,10 +76,12 @@ export type TPagination<K = any> = {
58
76
  last_page: number;
59
77
  next_page: number;
60
78
  prev_page: number;
61
- currentPage: number;
62
- lastPage: number;
63
- nextPage: number;
64
- prevPage: number;
79
+ page: {
80
+ prev: number;
81
+ next: number;
82
+ current: number;
83
+ last: number;
84
+ };
65
85
  };
66
86
  data: K[];
67
87
  };
@@ -113,7 +133,6 @@ export type TPoolCallback = {
113
133
  release: () => void;
114
134
  };
115
135
  export type TConnectionTransaction = {
116
- on: (event: TPoolEvent, data: any) => void;
117
136
  query: (sql: string) => Promise<any[]>;
118
137
  /**
119
138
  * The 'startTransaction' method is used when need to started the transaction
@@ -135,6 +154,11 @@ export type TConnectionTransaction = {
135
154
  * @returns {Promise<void>}
136
155
  */
137
156
  end: () => Promise<void>;
157
+ /**
158
+ * The 'release' method is used to release connection
159
+ * @returns {Promise<void>}
160
+ */
161
+ release: () => Promise<void>;
138
162
  };
139
163
  export type TConnection = {
140
164
  on: (event: TPoolEvent, data: any) => void;
@@ -144,6 +168,7 @@ export type TConnection = {
144
168
  commit: () => Promise<void>;
145
169
  rollback: () => Promise<void>;
146
170
  end: () => Promise<void>;
171
+ release: () => Promise<void>;
147
172
  };
148
173
  export type TPoolConnected = {
149
174
  database: () => string;
@@ -151,13 +176,14 @@ export type TPoolConnected = {
151
176
  queryBuilder: typeof QueryBuilder;
152
177
  query: (sql: string) => Promise<any[]>;
153
178
  connection: () => Promise<TConnection>;
179
+ end: () => Promise<void>;
154
180
  };
155
181
  export type TModelOrObject = {
156
- model: new () => Model<any, any>;
182
+ model: new () => Model<any, any, any>;
157
183
  alias?: string;
158
184
  key?: string;
159
185
  join?: Join;
160
- } | (new () => Model<any, any>);
186
+ } | (new () => Model<any, any, any>);
161
187
  export type TCreateNewConnection = {
162
188
  on: (event: TPoolEvent, data: (r: any) => any) => void;
163
189
  query: (sql: string) => Promise<any>;
@@ -271,7 +297,11 @@ export type TSchemaKeys<T> = keyof {
271
297
  } extends never ? string : keyof {
272
298
  [K in keyof T as string extends K ? never : K]: T[K];
273
299
  };
274
- export type TRelationResults<T> = T extends Array<infer A> ? TRelationResults<A>[] : T extends object ? {
300
+ export type TRelationResults<T> = T extends Array<infer A> ? TRelationResults<A>[] : T extends {
301
+ __isDefault: true;
302
+ } ? TDefault<T extends {
303
+ value: infer V;
304
+ } ? V extends Date ? Date : V extends string ? string : V extends number ? number : V extends boolean ? boolean : V : string> : T extends Date ? T : T extends object ? {
275
305
  [K in keyof T as K extends `$${string}` ? never : K]: TRelationResults<T[K]>;
276
306
  } : T;
277
307
  export type TRelationKeys<T> = {
@@ -291,7 +321,7 @@ export type TLiteralStringKeys<T> = {
291
321
  [K in keyof T]: T[K] extends string ? (string extends T[K] ? never : K) : never;
292
322
  }[keyof T];
293
323
  export type TLiteralEnumKeys<T> = TLiteralStringKeys<TRemoveIndexSignature<T>>;
294
- export type TDriver = 'pg' | 'postgres' | 'mysql' | 'mysql2' | 'mariadb' | 'mssql' | 'sqlite3';
324
+ export type TDriver = 'pg' | 'postgres' | 'mysql' | 'mysql2' | 'mariadb' | 'mssql' | 'sqlite' | 'mongodb';
295
325
  export type TPoolCusterOptions = {
296
326
  writer: {
297
327
  host: string;
@@ -326,27 +356,87 @@ export type TPoolCusterConnected = {
326
356
  masters: TClusterPool[];
327
357
  slaves: TClusterPool[];
328
358
  };
329
- export type TIsEnum<T> = string extends T ? false : number extends T ? false : boolean extends T ? false : [
359
+ export type TIsEnum<T> = T extends {
360
+ __isDefault: true;
361
+ } ? false : string extends T ? false : number extends T ? false : boolean extends T ? false : [
330
362
  T
331
363
  ] extends [string | number] ? true : false;
332
364
  export type TLifecycle = "beforeInsert" | "afterInsert" | "beforeUpdate" | "afterUpdate" | "beforeRemove" | "afterRemove";
333
- export type TDeepExpand<T> = T extends Date ? T : T extends Function ? T : T extends Model ? T : T extends (infer U)[] ? TDeepExpand<U>[] : T extends object ? {
365
+ export type TDeepOmit<T, Filter> = T extends infer ObjectType ? {
366
+ [K in keyof ObjectType as K extends keyof Filter ? Filter[K] extends true ? never : K : NonNullable<ObjectType[K]> extends object ? (NonNullable<ObjectType[K]> extends Date ? K : never) : K]: K extends keyof Filter ? Filter[K] extends object ? TDeepOmit<NonNullable<ObjectType[K]>, Filter[K]> : ObjectType[K] : ObjectType[K];
367
+ } : never;
368
+ export type TDeepExpand<T> = T extends TDefault<infer U> ? TDefault<U extends boolean ? boolean : U extends number ? number : U extends string ? string : U> : T extends Date ? T : T extends Function ? T : T extends Model ? T : T extends (infer U)[] ? TDeepExpand<U>[] : T extends object ? {
334
369
  [K in keyof T]: TDeepExpand<T[K]>;
335
370
  } : T;
336
- export type TResultResolved<M extends Model, K = {}> = (unknown extends TResult<M> ? unknown extends TResultDecorator<M> ? Record<K & string, any> : {} extends TResultDecorator<M> ? Record<K & string, any> : TResultDecorator<K & M> : TResult<K & M>);
337
- export type TFilter<T, S> = {
338
- [K in keyof T & keyof S]: S[K] extends true ? NonNullable<T[K]> : S[K] extends object ? NonNullable<T[K]> extends (infer U)[] ? TDeepExpand<TFilter<U, S[K]>>[] : NonNullable<T[K]> extends object ? TDeepExpand<TFilter<NonNullable<T[K]>, S[K]>> : never : never;
339
- };
340
- export type TResultFilterResolved<T, S> = S extends undefined ? T : TDeepExpand<TFilter<T, S>>;
341
- export type TSelectionMerger<T1, T2> = {
342
- [K in keyof T1 | Exclude<keyof T2, keyof T1>]: K extends keyof T1 ? K extends keyof T2 ? T1[K] extends true ? true : T1[K] extends object ? T2[K] extends object ? TSelectionMerger<T1[K], ((T2[K] extends {
343
- select: infer S;
344
- } ? S : {}) & (T2[K] extends {
345
- relations: infer R;
346
- } ? R : {}) & Omit<T2[K], 'select' | 'relations'>)> : T1[K] : T1[K] : T1[K] : K extends keyof T2 ? T2[K] extends object ? TSelectionMerger<{}, ((T2[K] extends {
347
- select: infer S;
348
- } ? S : {}) & (T2[K] extends {
349
- relations: infer R;
350
- } ? R : {}) & Omit<T2[K], 'select' | 'relations'>)> : T2[K] : never;
371
+ export type TResultResolved<M extends Model> = (unknown extends TResult<M> ? unknown extends TResultDecorator<M> ? Record<string, any> : {} extends TResultDecorator<M> ? Record<string, any> : TResultDecorator<M> : TResult<M>) extends infer $Resolved ? {
372
+ [K in keyof $Resolved]: [Exclude<$Resolved[K], null>] extends [string] ? [string] extends [Exclude<$Resolved[K], null>] ? $Resolved[K] : Exclude<$Resolved[K], null> : $Resolved[K];
373
+ } : never;
374
+ export type TConflictKeys<R extends readonly PropertyKey[], O extends readonly PropertyKey[]> = Extract<R[number], O[number]>;
375
+ type Normalize<T> = T extends object ? ((T extends {
376
+ select: infer S;
377
+ } ? S : {}) & (T extends {
378
+ relations: infer R;
379
+ } ? R : {}) & (T extends {
380
+ except: infer E;
381
+ } ? {
382
+ _except: E;
383
+ } : {}) & Omit<T, 'select' | 'relations' | 'except'>) : {};
384
+ type IsStrict<T> = T extends true ? false : T extends object ? (T extends {
385
+ select: any;
386
+ } ? true : T extends {
387
+ except: any;
388
+ } ? false : (keyof Omit<T, 'relations' | 'except'> extends never ? false : true)) : false;
389
+ type RemoveUndefined<T> = T extends undefined ? never : T;
390
+ type NonObjectKeys<T> = {
391
+ [K in keyof T]: RemoveUndefined<T[K]> extends Date ? K : RemoveUndefined<T[K]> extends object ? never : K;
392
+ }[keyof T];
393
+ type GetExceptKeys<T> = T extends {
394
+ _except: infer E;
395
+ } ? keyof E : never;
396
+ export type TSelectionMerger<IncomingResult, S1, S2> = IncomingResult extends Date | Function ? IncomingResult : IncomingResult extends (infer U)[] ? TSelectionMerger<U, S1, S2>[] : IncomingResult extends object ? (Normalize<S1> extends infer F1 ? Normalize<S2> extends infer F2 ? (F1 & F2) extends infer Merged ? {
397
+ [K in keyof Omit<Merged, '_except'> & keyof IncomingResult]-?: TSelectionMerger<RemoveUndefined<IncomingResult[K]>, K extends keyof F1 ? F1[K] : unknown, K extends keyof F2 ? F2[K] : unknown>;
398
+ } & ((IsStrict<S1> extends true ? true : IsStrict<S2> extends true ? true : false) extends true ? {} : {
399
+ [K in Exclude<NonObjectKeys<IncomingResult>, GetExceptKeys<F1> | GetExceptKeys<F2>>]-?: IncomingResult[K];
400
+ }) : never : never : never) : IncomingResult;
401
+ export type TStateWhereCondition = {
402
+ column?: string;
403
+ operator?: string;
404
+ value?: any;
405
+ condition?: 'AND' | 'OR';
406
+ nested?: TStateWhereCondition[];
407
+ };
408
+ export type TDefault<T = any> = (T extends string ? string : T extends number ? number : T extends boolean ? boolean | number : T) & {
409
+ __isDefault: true;
410
+ };
411
+ export type TRemoveDefault<T> = T extends TDefault<infer U> ? U : T;
412
+ type CleanDefaultType<T> = T extends any ? NonNullable<T> extends Date ? T : NonNullable<T> extends Record<string, unknown> ? string : T extends {
413
+ __isDefault: true;
414
+ } ? (T extends string ? string : T extends number ? number : boolean) | null : T : never;
415
+ type IsOptional<T> = null extends T ? true : (T extends any ? (T extends {
416
+ __isDefault: true;
417
+ } ? true : never) : never) extends never ? false : true;
418
+ export type TInsertInput<K, C> = {
419
+ [P in Exclude<K & keyof C, "id" | "_id" | "uuid"> as IsOptional<C[P]> extends true ? never : P]: CleanDefaultType<C[P]>;
420
+ } & {
421
+ [P in Exclude<K & keyof C, "id" | "_id" | "uuid"> as IsOptional<C[P]> extends true ? P : never]?: CleanDefaultType<C[P]>;
422
+ } & {
423
+ [P in Extract<K & keyof C, "id" | "_id" | "uuid">]?: CleanDefaultType<C[P]>;
351
424
  };
425
+ export type TUpdateInput<K, C> = {
426
+ [P in Exclude<K & keyof C, "id" | "_id">]: {
427
+ [Q in P]-?: CleanDefaultType<C[Q]>;
428
+ } & {
429
+ [Q in Exclude<K & keyof C, "id" | "_id" | P>]?: CleanDefaultType<C[Q]>;
430
+ };
431
+ }[Exclude<K & keyof C, "id" | "_id">];
432
+ export type TInsertOrUpdateInput<K, C> = {
433
+ [P in Extract<K, keyof C>]: {
434
+ [Q in P]-?: CleanDefaultType<C[Q]>;
435
+ } & {
436
+ [Q in Exclude<Extract<K, keyof C>, P>]?: CleanDefaultType<C[Q]>;
437
+ };
438
+ }[Extract<K, keyof C>];
439
+ export type TAction = "create" | "createMany" | "createNotExists" | "createOrSelect" | "createOrUpdate" | "update" | "updateMany" | null;
440
+ export type TSaveBuilderResult<A extends TAction> = A extends "create" ? Record<string, any> : A extends "createMany" ? Record<string, any>[] : A extends "createNotExists" ? Record<string, any> | null : A extends "createOrUpdate" ? Record<string, any> : A extends "createOrSelect" ? Record<string, any> : A extends "update" ? Record<string, any> | null : A extends "updateMany" ? Record<string, any>[] : any;
441
+ export type TSaveModelResult<M extends Model<any, any, any>, A extends TAction> = A extends "create" ? T.InsertResult<M> : A extends "createMany" ? T.InsertManyResult<M> : A extends "createNotExists" ? T.InsertResult<M> | null : A extends "createOrUpdate" ? T.InsertResult<M> | T.UpdateResult<M> : A extends "createOrSelect" ? T.InsertResult<M> | T.Result<M> : A extends "update" ? T.UpdateResult<M> : A extends "updateMany" ? T.UpdateManyResult<M> : T.InsertResult<M> | T.InsertManyResult<M> | T.UpdateResult<M> | T.UpdateManyResult<M> | T.Result<M>;
352
442
  export {};
@@ -2,41 +2,27 @@ import { Model } from "../../core/Model";
2
2
  import type { T } from "../../core";
3
3
  import type { TConnection, TConnectionTransaction, TNestedBoolean, TRawStringQuery, TRelationKeys, TSchemaKeys } from "..";
4
4
  import type { TColumnsDecorator, TRelationsDecorator } from "../decorator";
5
- export type TRepositorySelect<T = unknown, R = unknown, M extends Model = Model> = [
6
- unknown,
7
- unknown
8
- ] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? TNestedBoolean : Partial<{
5
+ export type TRepositorySelect<T = unknown, R = unknown, M extends Model = Model> = [unknown, unknown] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? TNestedBoolean : Partial<{
9
6
  [K in keyof TColumnsDecorator<M> | keyof TRelationsDecorator<M>]: K extends `${string}.${string}` | TRawStringQuery ? boolean : K extends keyof TRelationsDecorator<M> ? M[K] extends (infer U)[] ? U extends Model ? "*" | TRepositorySelect<any, unknown, U> : boolean : M[K] extends Model ? "*" | TRepositorySelect<any, unknown, M[K]> : boolean : K extends keyof TColumnsDecorator<M> ? boolean : boolean;
10
7
  }> : Partial<{
11
8
  [K in TSchemaKeys<T> | TRelationKeys<R>]: K extends TRelationKeys<R> ? K extends TRawStringQuery | `${string}.${string}` ? boolean : K extends `$${string & K}` ? R extends Record<string, any> ? boolean : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? "*" | TRepositorySelect<T.SchemaModel<U>, T.RelationModel<U>> : never : R[`$${K & string}`] extends Model ? "*" | TRepositorySelect<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>> : never : never : K extends keyof T ? boolean : never;
12
9
  }>;
13
- export type TRepositoryExcept<T = unknown, M extends Model = Model> = [
14
- unknown
15
- ] extends [T] ? keyof TColumnsDecorator<M> extends never ? TNestedBoolean : Partial<{
16
- [K in keyof TColumnsDecorator<M>]: K extends `${string}.${string}` | TRawStringQuery ? boolean : K extends keyof TColumnsDecorator<M> ? boolean : never;
10
+ export type TRepositoryExcept<T = unknown, R = unknown, M extends Model = Model> = [unknown, unknown] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? TNestedBoolean : Partial<{
11
+ [K in keyof TColumnsDecorator<M> | keyof TRelationsDecorator<M>]: K extends `${string}.${string}` | TRawStringQuery ? boolean : K extends keyof TRelationsDecorator<M> ? M[K] extends (infer U)[] ? U extends Model ? TRepositoryExcept<any, unknown, U> : boolean : M[K] extends Model ? TRepositoryExcept<any, unknown, M[K]> : boolean : K extends keyof TColumnsDecorator<M> ? boolean : boolean;
17
12
  }> : Partial<{
18
- [K in TSchemaKeys<T>]: K extends keyof T ? boolean : never;
13
+ [K in TSchemaKeys<T> | TRelationKeys<R>]: K extends TRelationKeys<R> ? K extends TRawStringQuery | `${string}.${string}` ? boolean : K extends `$${string & K}` ? R extends Record<string, any> ? boolean : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? TRepositoryExcept<T.SchemaModel<U>, T.RelationModel<U>> : never : R[`$${K & string}`] extends Model ? TRepositoryExcept<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>> : never : never : K extends keyof T ? boolean : never;
19
14
  }>;
20
- export type TRepositoryWhere<T = unknown, R = unknown, M extends Model = Model> = [
21
- unknown,
22
- unknown
23
- ] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, any> : Partial<{
15
+ export type TRepositoryWhere<T = unknown, R = unknown, M extends Model = Model> = [unknown, unknown] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, any> : Partial<{
24
16
  [K in keyof TColumnsDecorator<M> | keyof TRelationsDecorator<M> | `${string}.${string}` | TRawStringQuery]: K extends keyof TRelationsDecorator<M> ? TRelationsDecorator<M>[K] extends (infer U)[] ? U extends Model ? TRepositoryWhere<any, unknown, U> | boolean : never : TRelationsDecorator<M>[K] extends Model ? TRepositoryWhere<any, unknown, TRelationsDecorator<M>[K]> | boolean : never : K extends keyof TColumnsDecorator<M> ? TColumnsDecorator<M>[K] : never;
25
17
  }> : Partial<{
26
18
  [K in TSchemaKeys<T> | TRelationKeys<R> | `${string}.${string}` | TRawStringQuery]: K extends TRelationKeys<R> ? K extends `$${string & K}` ? R extends Record<string, any> ? R[K] : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? TRepositoryWhere<T.SchemaModel<U>, T.RelationModel<U>, M> | boolean : never : R[`$${K & string}`] extends Model ? TRepositoryWhere<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>, M> | boolean : never : never : K extends keyof T ? T[K] : never;
27
19
  }>;
28
- export type TRepositoryOrderBy<T = unknown, R = unknown, M extends Model = Model> = [
29
- unknown,
30
- unknown
31
- ] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, "ASC" | "DESC"> : Partial<{
20
+ export type TRepositoryOrderBy<T = unknown, R = unknown, M extends Model = Model> = [unknown, unknown] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, "ASC" | "DESC"> : Partial<{
32
21
  [K in keyof TColumnsDecorator<M> | keyof TRelationsDecorator<M>]: K extends `${string}.${string}` | TRawStringQuery ? "ASC" | "DESC" : K extends keyof TRelationsDecorator<M> ? M[K] extends (infer U)[] ? U extends Model ? TRepositoryOrderBy<any, unknown, U> : never : M[K] extends Model ? TRepositoryOrderBy<any, unknown, M[K]> : never : K extends keyof TColumnsDecorator<M> ? "ASC" | "DESC" : never;
33
22
  }> : Partial<{
34
23
  [K in TSchemaKeys<T> | TRelationKeys<R>]: K extends TRelationKeys<R> ? K extends TRawStringQuery | `${string}.${string}` ? "ASC" | "DESC" : K extends `$${string & K}` ? R extends Record<string, any> ? "ASC" | "DESC" : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? TRepositoryOrderBy<T.SchemaModel<U>, T.RelationModel<U>> : never : R[`$${K & string}`] extends Model ? TRepositoryOrderBy<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>> : never : never : K extends keyof T ? "ASC" | "DESC" : never;
35
24
  }>;
36
- export type TRepositoryGroupBy<T = unknown, R = unknown, M extends Model = Model> = [
37
- unknown,
38
- unknown
39
- ] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, boolean> : Partial<{
25
+ export type TRepositoryGroupBy<T = unknown, R = unknown, M extends Model = Model> = [unknown, unknown] extends [T, R] ? keyof TColumnsDecorator<M> extends never ? Record<string, boolean> : Partial<{
40
26
  [K in keyof TColumnsDecorator<M> | keyof TRelationsDecorator<M>]: K extends `${string}.${string}` | TRawStringQuery ? boolean : K extends keyof TRelationsDecorator<M> ? M[K] extends (infer U)[] ? U extends Model ? "*" | TRepositoryGroupBy<any, unknown, U> : boolean : M[K] extends Model ? "*" | TRepositoryGroupBy<any, unknown, M[K]> : boolean : K extends keyof TColumnsDecorator<M> ? boolean : boolean;
41
27
  }> : Partial<{
42
28
  [K in TSchemaKeys<T> | TRelationKeys<R>]: K extends TRelationKeys<R> ? K extends TRawStringQuery | `${string}.${string}` ? boolean : K extends `$${string & K}` ? R extends Record<string, any> ? boolean : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? "*" | TRepositoryGroupBy<T.SchemaModel<U>, T.RelationModel<U>> : never : R[`$${K & string}`] extends Model ? "*" | TRepositoryGroupBy<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>> : never : never : K extends keyof T ? boolean : never;
@@ -48,13 +34,25 @@ export type TRepositoryRelation<R = unknown, M extends Model = Model> = [
48
34
  }> : Partial<{
49
35
  [K in TRelationKeys<R>]: K extends TRelationKeys<R> ? K extends `$${string & K}` ? R extends Record<string, any> ? boolean : never : R extends Record<string, any> ? R[`$${string & K}`] extends (infer U)[] ? U extends Model ? boolean | (TRepositoryRequest<T.SchemaModel<U>, T.RelationModel<U>> & TRepositoryRelation<T.RelationModel<U>>) : never : R[`$${K & string}`] extends Model ? boolean | (TRepositoryRequest<T.SchemaModel<R[`$${K & string}`]>, T.RelationModel<R[`$${K & string}`]>> & TRepositoryRelation<T.RelationModel<R[`$${K & string}`]>>) : never : never : never;
50
36
  }>;
51
- export type TRepositoryRequest<T = unknown, R = unknown, M extends Model<any, any> = Model<any, any>, S = undefined, SR = undefined, E = undefined> = {
37
+ type Without<T, U> = {
38
+ [P in Exclude<keyof T, keyof U>]?: never;
39
+ };
40
+ type XOR<T, U> = (T & Without<U, T>) | (U & Without<T, U>);
41
+ type SelectBlock<T, R, M extends Model<any, any>, S> = {
52
42
  select?: S extends {} ? S & {
53
43
  [K in keyof S]: K extends keyof TRepositorySelect<T, R, M> ? S[K] : never;
54
44
  } : "*" | TRepositorySelect<T, R, M>;
45
+ };
46
+ type ExceptBlock<T, R, M extends Model<any, any>, E> = {
55
47
  except?: E extends {} ? E & {
56
- [K in keyof E]: K extends keyof TRepositoryExcept<T, M> ? E[K] : never;
57
- } : TRepositoryExcept<T, M>;
48
+ [K in keyof E]: K extends keyof TRepositoryExcept<T, R, M> ? E[K] : never;
49
+ } : TRepositoryExcept<T, R, M>;
50
+ };
51
+ export type TRepositoryRequest<T = unknown, R = unknown, M extends Model<any, any> = Model<any, any>, S = undefined, SR = undefined, E = undefined, SRS = undefined, G = undefined> = XOR<SelectBlock<T, R, M, S>, // select ?:
52
+ ExceptBlock<T, R, M, E>> & {
53
+ selectRaw?: SRS extends {} ? SRS & {
54
+ [K in keyof SRS]: SRS[K] extends TRawStringQuery ? SRS[K] : never;
55
+ } : Record<string, TRawStringQuery>;
58
56
  join?: {
59
57
  localKey: `${string}.${string}`;
60
58
  referenceKey: `${string}.${string}`;
@@ -75,23 +73,31 @@ export type TRepositoryRequest<T = unknown, R = unknown, M extends Model<any, an
75
73
  orderBy?: TRepositoryOrderBy<T, R, M>;
76
74
  limit?: number;
77
75
  offset?: number;
76
+ extend?: G extends {} ? G & {
77
+ [K in keyof G]: G[K];
78
+ } : Record<string, T.RepositoryGenericTypeOptions>;
78
79
  debug?: boolean;
79
80
  cache?: {
80
81
  key: string;
81
82
  expires: number;
83
+ namespace?: boolean;
82
84
  };
83
85
  when?: {
84
86
  condition: boolean;
85
87
  query: () => TRepositoryRequest<T, R, M, S, SR>;
86
88
  };
87
- relations?: SR extends {} ? SR : TRepositoryRelation<R, M>;
88
- relationsExists?: SR extends {} ? SR : TRepositoryRelation<R, M>;
89
89
  using?: (model: M) => M;
90
90
  hooks?: Function[];
91
91
  audit?: {
92
92
  userId: number;
93
93
  metadata?: Record<string, any>;
94
94
  };
95
+ relations?: SR extends {} ? SR & {
96
+ [K in keyof SR]: K extends keyof TRepositoryRelation<R, M> ? SR[K] : never;
97
+ } : TRepositoryRelation<R, M>;
98
+ relationsExists?: SR extends {} ? SR & {
99
+ [K in keyof SR]: K extends keyof TRepositoryRelation<R, M> ? SR[K] : never;
100
+ } : TRepositoryRelation<R, M>;
95
101
  };
96
102
  export type TRepositoryRequestHandler<T extends Record<string, any> = any, R = unknown, M extends Model<any, any> = Model<any, any>> = Partial<TRepositoryRequest<T, R, M> & {
97
103
  instance?: Model;
@@ -100,37 +106,62 @@ export type TRepositoryRequestPagination<T extends Record<string, any> = any, R
100
106
  page?: number;
101
107
  };
102
108
  export type TRepositoryRequestAggregate<T extends Record<string, any> = any, R = any, M extends Model<any, any> = Model<any, any>> = Partial<Omit<TRepositoryRequest<T, R, M>, "relations" | "relationQuery">>;
103
- export type TRepositoryCreate<M extends Model<any, any> = Model<any, any>> = {
104
- data: Partial<T.ColumnOptions<M>>;
109
+ export type TRepositoryCreate<M extends Model<any, any> = Model<any, any>, NR extends boolean | undefined = false, K extends T.ColumnKeys<M> = T.ColumnKeys<M>, C extends T.ColumnOptions<M> = T.ColumnOptions<M>> = {
110
+ data: {
111
+ [P in Exclude<K & keyof C, "id" | "uuid"> as null extends C[P] ? any : P]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
112
+ };
105
113
  debug?: boolean;
106
114
  transaction?: TConnection | TConnectionTransaction;
115
+ noReturn?: NR;
107
116
  };
108
- export type TRepositoryCreateMultiple<M extends Model<any, any> = Model<any, any>> = {
109
- data: Partial<T.ColumnOptions<M>>[];
117
+ export type TRepositoryCreateMultiple<M extends Model<any, any> = Model<any, any>, NR extends boolean | undefined = false, K extends T.ColumnKeys<M> = T.ColumnKeys<M>, C extends T.ColumnOptions<M> = T.ColumnOptions<M>> = {
118
+ data: {
119
+ [P in Exclude<K & keyof C, "id" | "uuid"> as null extends C[P] ? any : undefined extends C[P] ? never : P]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
120
+ }[];
110
121
  debug?: boolean;
111
122
  transaction?: TConnection | TConnectionTransaction;
123
+ noReturn?: NR;
112
124
  };
113
- export type TRepositoryCreateOrThings<M extends Model<any, any> = Model<any, any>> = {
114
- data: Partial<T.ColumnOptions<M>>;
125
+ export type TRepositoryCreateOrThings<M extends Model<any, any> = Model<any, any>, NR extends boolean | undefined = false, K extends T.ColumnKeys<M> = T.ColumnKeys<M>, C extends T.ColumnOptions<M> = T.ColumnOptions<M>> = {
126
+ data: {
127
+ [P in Exclude<K & keyof C, "id" | "uuid"> as null extends C[P] ? any : undefined extends C[P] ? never : P]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
128
+ };
115
129
  where: T.WhereOptions<M>;
116
130
  debug?: boolean;
131
+ transaction?: TConnection | TConnectionTransaction;
132
+ noReturn?: NR;
117
133
  };
118
- export type TRepositoryUpdate<M extends Model<any, any> = Model<any, any>> = {
119
- data: Partial<T.ColumnOptions<M>>;
134
+ export type TRepositoryUpdate<M extends Model<any, any> = Model<any, any>, NR extends boolean | undefined = false, K extends T.ColumnKeys<M> = T.ColumnKeys<M>, C extends T.ColumnOptions<M> = T.ColumnOptions<M>> = {
135
+ data: Partial<{
136
+ [P in K & keyof C]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
137
+ }>;
120
138
  where: T.WhereOptions<M>;
121
139
  debug?: boolean;
122
140
  transaction?: TConnection | TConnectionTransaction;
141
+ noReturn?: NR;
123
142
  };
124
- export type TRepositoryUpdateMultiple<M extends Model<any, any> = Model<any, any>> = {
143
+ export type TRepositoryUpdateMultiple<M extends Model<any, any> = Model<any, any>, NR extends boolean | undefined = false, K extends T.ColumnKeys<M> = T.ColumnKeys<M>, C extends T.ColumnOptions<M> = T.ColumnOptions<M>> = {
125
144
  cases: {
126
- condition: ((query: M) => M) | Partial<T.ColumnOptions<M>>;
127
- columns: Partial<T.ColumnOptions<M>>;
145
+ condition: ((query: M) => M) | Partial<{
146
+ [P in K & keyof C]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
147
+ }>;
148
+ columns: Partial<{
149
+ [P in K & keyof C]: Extract<C[P], Date> extends never ? Extract<C[P], Record<string, unknown>> extends never ? C[P] : string : any;
150
+ }>;
128
151
  }[];
129
152
  debug?: boolean;
130
153
  transaction?: TConnection | TConnectionTransaction;
154
+ noReturn?: NR;
131
155
  };
132
156
  export type TRepositoryDelete<M extends Model<any, any> = Model<any, any>> = {
133
157
  where: T.WhereOptions<M>;
134
158
  debug?: boolean;
135
159
  transaction?: TConnection | TConnectionTransaction;
136
160
  };
161
+ export type TRepositoryPrimitiveExtendType<T> = T extends NumberConstructor ? number : T extends StringConstructor ? string : T extends BooleanConstructor ? boolean : T extends DateConstructor ? Date : T extends readonly (infer U)[] ? TRepositoryPrimitiveExtendType<U>[] : T extends Record<string, any> ? {
162
+ [K in keyof T]: TRepositoryPrimitiveExtendType<T[K]>;
163
+ } : T;
164
+ export type TRepositoryExtendType = NumberConstructor | StringConstructor | BooleanConstructor | DateConstructor | readonly TRepositoryExtendType[] | {
165
+ [_: string]: TRepositoryExtendType;
166
+ };
167
+ export {};
@@ -1,9 +1,10 @@
1
+ import { TStateWhereCondition } from "../types";
1
2
  declare const utils: {
2
3
  typeOf: (data: any) => string;
3
4
  isDate: (data: any) => boolean;
4
5
  consoleDebug: (sql?: string, retry?: boolean) => void;
5
6
  consoleExec: (startTime: number, endTime: number) => void;
6
- consoleCache: (provider: string) => void;
7
+ consoleCache: (provider: Record<string, any>) => void;
7
8
  faker: (value: string) => string | number | boolean;
8
9
  columnRelation: (name: string) => string;
9
10
  timestamp: (dateString?: string | Date) => string;
@@ -27,7 +28,7 @@ declare const utils: {
27
28
  value: string;
28
29
  } | null;
29
30
  checkValueHasRaw: (value: unknown) => boolean;
30
- valueAndOperator: (value: string, operator: string, useDefault?: boolean) => any[];
31
+ valueAndOperator: (value: any, operator: string, useDefault?: boolean) => any[];
31
32
  baseModelTemplate: ({ model, schema, imports, relation }: {
32
33
  model: string;
33
34
  schema: string;
@@ -50,6 +51,16 @@ declare const utils: {
50
51
  }> | null;
51
52
  action: "to" | "from";
52
53
  }) => Promise<void>;
54
+ hash32: (str: string) => number;
55
+ nestConditions: (conditions: TStateWhereCondition[], condition?: "AND" | "OR") => {
56
+ condition: "AND" | "OR";
57
+ nested: TStateWhereCondition[] | undefined;
58
+ column?: string;
59
+ operator?: string;
60
+ value?: any;
61
+ }[];
62
+ formatQueryValue: (v: any) => any;
63
+ bindingParameters: (sql: string, parameters?: (boolean | number | string | any[] | null)[]) => string;
53
64
  };
54
65
  export type TUtils = typeof utils;
55
66
  export { utils };
@@ -217,7 +217,34 @@ const consoleExec = (startTime, endTime) => {
217
217
  console.log(`\x1b[34mDURATION:\x1b[0m \x1b[32m${diffInSeconds} sec\x1b[0m`);
218
218
  };
219
219
  const consoleCache = (provider) => {
220
- console.log(`\n\x1b[34mCACHE:\x1b[0m \x1b[33m${provider}\x1b[0m`);
220
+ const colors = {
221
+ reset: "\x1b[0m",
222
+ key: "\x1b[35m",
223
+ string: "\x1b[38;2;77;215;240m",
224
+ null: "\x1b[90m",
225
+ };
226
+ const colorize = (raws) => {
227
+ const obj = Object.fromEntries(Object.entries(raws)
228
+ .filter(([_, v]) => v !== undefined));
229
+ const parts = Object.entries(obj).map(([k, v]) => {
230
+ let valueColor = colors.reset;
231
+ let value;
232
+ if (typeof v === "string") {
233
+ valueColor = colors.string;
234
+ value = `"${v}"`;
235
+ }
236
+ else if (v === null) {
237
+ valueColor = colors.null;
238
+ value = "null";
239
+ }
240
+ else {
241
+ value = JSON.stringify(v);
242
+ }
243
+ return `${colors.key}"${k}"${colors.reset}: ${valueColor}${value}${colors.reset}`;
244
+ });
245
+ return `{ ${parts.join(", ")} }`;
246
+ };
247
+ console.log(`\n\x1b[34mCACHE:\x1b[0m ${colorize(provider)}`);
221
248
  };
222
249
  const randomString = (length = 100) => {
223
250
  let str = '';
@@ -398,6 +425,54 @@ const applyTransforms = async ({ result, transforms, action }) => {
398
425
  }
399
426
  return;
400
427
  };
428
+ const hash32 = (str) => {
429
+ let hash = 0x811c9dc5;
430
+ for (let i = 0; i < str.length; i++) {
431
+ hash ^= str.charCodeAt(i);
432
+ hash = Math.imul(hash, 0x01000193);
433
+ }
434
+ return hash >>> 0;
435
+ };
436
+ const nestConditions = (conditions, condition = 'AND') => {
437
+ if (!conditions || conditions.length === 0)
438
+ return [];
439
+ const [first, ...rest] = conditions;
440
+ return [{
441
+ ...first,
442
+ condition,
443
+ nested: rest.length > 0 ? rest : undefined
444
+ }];
445
+ };
446
+ const formatQueryValue = (v) => {
447
+ if (Array.isArray(v)) {
448
+ const formated = [];
449
+ for (const val of v) {
450
+ formated.push(formatQueryValue(val));
451
+ }
452
+ return formated;
453
+ }
454
+ v = transfromDateToDateString(v);
455
+ v = escape(v);
456
+ v = transfromBooleanToNumber(v);
457
+ return transfromValueHasRaw(v);
458
+ };
459
+ const bindingParameters = (sql, parameters = []) => {
460
+ let bindSql = sql;
461
+ for (const parameter of parameters) {
462
+ if (parameter === null) {
463
+ bindSql = bindSql.replace("?", constants_1.CONSTANTS.NULL);
464
+ continue;
465
+ }
466
+ if (parameter === true || parameter === false) {
467
+ bindSql = bindSql.replace("?", `'${parameter === true ? 1 : 0}'`);
468
+ continue;
469
+ }
470
+ bindSql = bindSql.replace("?", Array.isArray(parameter)
471
+ ? `(${parameter.map((p) => p).join(",")})`
472
+ : `${parameter}`);
473
+ }
474
+ return bindSql;
475
+ };
401
476
  const utils = {
402
477
  typeOf,
403
478
  isDate,
@@ -427,7 +502,11 @@ const utils = {
427
502
  valueAndOperator,
428
503
  baseModelTemplate,
429
504
  decoratorModelTemplate,
430
- applyTransforms
505
+ applyTransforms,
506
+ hash32,
507
+ nestConditions,
508
+ formatQueryValue,
509
+ bindingParameters
431
510
  };
432
511
  exports.utils = utils;
433
512
  exports.default = utils;