@goatlab/fluent 0.6.22 → 0.6.30

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 (240) hide show
  1. package/dist/BaseConnector.d.ts +49 -82
  2. package/dist/BaseConnector.js +219 -319
  3. package/dist/Fluent.d.ts +2 -21
  4. package/dist/Fluent.js +0 -33
  5. package/dist/FluentEntity.d.ts +7 -0
  6. package/dist/FluentEntity.js +28 -0
  7. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +34 -27
  8. package/dist/TypeOrmConnector/TypeOrmConnector.js +599 -343
  9. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +0 -0
  10. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +182 -48
  11. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +103 -3
  12. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +30 -13
  13. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.d.ts +5 -0
  14. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.js +17 -0
  15. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.d.ts +5 -0
  16. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.js +17 -0
  17. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +3 -3
  18. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +8 -3
  19. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -1
  20. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +42 -16
  21. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +43 -0
  22. package/dist/TypeOrmConnector/test/basic/goat.entity.js +19 -8
  23. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.d.ts +5 -0
  24. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.js +16 -0
  25. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.d.ts +5 -0
  26. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.js +16 -0
  27. package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +3 -4
  28. package/dist/TypeOrmConnector/test/basic/goat.repository.js +7 -3
  29. package/dist/TypeOrmConnector/test/dbEntities.d.ts +6 -6
  30. package/dist/TypeOrmConnector/test/dbEntities.js +0 -0
  31. package/dist/TypeOrmConnector/test/docker/docker.d.ts +35 -0
  32. package/dist/TypeOrmConnector/test/docker/docker.js +149 -0
  33. package/dist/TypeOrmConnector/test/docker/mysql.d.ts +17 -0
  34. package/dist/TypeOrmConnector/test/docker/mysql.js +132 -0
  35. package/dist/TypeOrmConnector/test/flock.d.ts +0 -0
  36. package/dist/TypeOrmConnector/test/flock.js +0 -0
  37. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +8 -0
  38. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +23 -0
  39. package/dist/TypeOrmConnector/test/mongo/mongo.memory.d.ts +4 -0
  40. package/dist/TypeOrmConnector/test/mongo/mongo.memory.js +43 -0
  41. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.d.ts +2 -0
  42. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.js +12 -0
  43. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +8 -0
  44. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +23 -0
  45. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.d.ts +6 -0
  46. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.js +17 -0
  47. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +10 -0
  48. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +31 -0
  49. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +6 -0
  50. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +17 -0
  51. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.d.ts +2 -0
  52. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +16 -0
  53. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +8 -0
  54. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +23 -0
  55. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.d.ts +6 -0
  56. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.js +17 -0
  57. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +10 -0
  58. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +32 -0
  59. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +1 -0
  60. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +13 -5
  61. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +3 -3
  62. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +11 -4
  63. package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +38 -0
  64. package/dist/TypeOrmConnector/test/relations/car/car.schema.js +14 -0
  65. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +0 -0
  66. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +85 -32
  67. package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +35 -0
  68. package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +16 -0
  69. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +0 -0
  70. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +4 -4
  71. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +3 -3
  72. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +12 -4
  73. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +2 -2
  74. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +4 -4
  75. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.d.ts +15 -0
  76. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.js +9 -0
  77. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +3 -3
  78. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +8 -3
  79. package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +0 -0
  80. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +10 -10
  81. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +3 -3
  82. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +17 -5
  83. package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +150 -0
  84. package/dist/TypeOrmConnector/test/relations/user/user.schema.js +18 -0
  85. package/dist/TypeOrmConnector/test/{memoryDataSource.d.ts → sqlite/memoryDataSource.d.ts} +0 -0
  86. package/dist/TypeOrmConnector/test/{memoryDataSource.js → sqlite/memoryDataSource.js} +1 -1
  87. package/dist/cache.d.ts +0 -0
  88. package/dist/cache.js +0 -0
  89. package/dist/core/Loopback/build-schema.d.ts +0 -0
  90. package/dist/core/Loopback/build-schema.js +1 -3
  91. package/dist/core/Loopback/common-types.d.ts +0 -0
  92. package/dist/core/Loopback/common-types.js +0 -0
  93. package/dist/core/Loopback/json-to-schema.d.ts +0 -0
  94. package/dist/core/Loopback/json-to-schema.js +6 -6
  95. package/dist/core/Loopback/mapValues.d.ts +2 -0
  96. package/dist/core/Loopback/mapValues.js +835 -0
  97. package/dist/core/Loopback/metadata.d.ts +0 -0
  98. package/dist/core/Loopback/metadata.js +0 -0
  99. package/dist/core/Loopback/model.d.ts +0 -0
  100. package/dist/core/Loopback/model.js +0 -0
  101. package/dist/core/Loopback/query.d.ts +0 -0
  102. package/dist/core/Loopback/query.js +6 -4
  103. package/dist/core/Loopback/relation.types.d.ts +0 -0
  104. package/dist/core/Loopback/relation.types.js +0 -0
  105. package/dist/core/Loopback/type-resolver.d.ts +1 -1
  106. package/dist/core/Loopback/type-resolver.js +0 -0
  107. package/dist/core/Loopback/type.d.ts +0 -0
  108. package/dist/core/Loopback/type.js +0 -0
  109. package/dist/core/Nestjs/applyDecorators.d.ts +1 -1
  110. package/dist/core/Nestjs/applyDecorators.js +0 -0
  111. package/dist/core/Nestjs/types/common.d.ts +0 -0
  112. package/dist/core/Nestjs/types/common.js +3 -1
  113. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +0 -0
  114. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +0 -0
  115. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +0 -0
  116. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +0 -0
  117. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +1 -1
  118. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +0 -0
  119. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +0 -0
  120. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +0 -0
  121. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +0 -0
  122. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +9 -4
  123. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +0 -0
  124. package/dist/core/Nestjs/types/decorators/directive.decorator.js +0 -0
  125. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +0 -0
  126. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +0 -0
  127. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +1 -1
  128. package/dist/core/Nestjs/types/decorators/field.decorator.js +6 -6
  129. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +0 -0
  130. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +0 -0
  131. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +0 -0
  132. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +0 -0
  133. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +0 -0
  134. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +0 -0
  135. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +0 -0
  136. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +0 -0
  137. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +0 -0
  138. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +0 -0
  139. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +0 -0
  140. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +0 -0
  141. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +0 -0
  142. package/dist/core/Nestjs/types/errors/undefined-type.error.js +0 -0
  143. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +0 -0
  144. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +0 -0
  145. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +0 -0
  146. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +0 -0
  147. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +0 -0
  148. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +0 -0
  149. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +0 -0
  150. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +0 -0
  151. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +0 -0
  152. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +0 -0
  153. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +0 -0
  154. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +0 -0
  155. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +0 -0
  156. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +0 -0
  157. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +0 -0
  158. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +0 -0
  159. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +0 -0
  160. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +0 -0
  161. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +0 -0
  162. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +0 -0
  163. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +0 -0
  164. package/dist/core/Nestjs/types/lazy-metadata.storage.js +3 -3
  165. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +0 -0
  166. package/dist/core/Nestjs/types/metadata/class.metadata.js +0 -0
  167. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +0 -0
  168. package/dist/core/Nestjs/types/metadata/directive.metadata.js +0 -0
  169. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +0 -0
  170. package/dist/core/Nestjs/types/metadata/enum.metadata.js +0 -0
  171. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +0 -0
  172. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +0 -0
  173. package/dist/core/Nestjs/types/metadata/index.d.ts +0 -0
  174. package/dist/core/Nestjs/types/metadata/index.js +0 -0
  175. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +0 -0
  176. package/dist/core/Nestjs/types/metadata/interface.metadata.js +0 -0
  177. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +0 -0
  178. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +0 -0
  179. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +0 -0
  180. package/dist/core/Nestjs/types/metadata/param.metadata.js +0 -0
  181. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +0 -0
  182. package/dist/core/Nestjs/types/metadata/property.metadata.js +0 -0
  183. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +0 -0
  184. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +0 -0
  185. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +0 -0
  186. package/dist/core/Nestjs/types/metadata/union.metadata.js +0 -0
  187. package/dist/core/Nestjs/types/object-type.decorator.d.ts +0 -0
  188. package/dist/core/Nestjs/types/object-type.decorator.js +0 -0
  189. package/dist/core/Nestjs/types/omit-type.d.ts +0 -0
  190. package/dist/core/Nestjs/types/omit-type.js +6 -2
  191. package/dist/core/Nestjs/types/reflection.utils.d.ts +1 -1
  192. package/dist/core/Nestjs/types/reflection.utils.js +9 -2
  193. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +0 -0
  194. package/dist/core/Nestjs/types/set-metadata.decorator.js +0 -0
  195. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +0 -0
  196. package/dist/core/Nestjs/types/type-metadata.storage.js +4 -4
  197. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +0 -0
  198. package/dist/core/Nestjs/types/utils/enum.utils.js +0 -0
  199. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +1 -11
  200. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +0 -0
  201. package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +0 -0
  202. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +2 -2
  203. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +0 -0
  204. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +0 -0
  205. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +0 -0
  206. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +0 -0
  207. package/dist/core/types.d.ts +0 -0
  208. package/dist/core/types.js +0 -0
  209. package/dist/decorators.d.ts +25 -21
  210. package/dist/decorators.js +76 -70
  211. package/dist/generatorDatasource.d.ts +0 -0
  212. package/dist/generatorDatasource.js +0 -0
  213. package/dist/index.d.ts +6 -7
  214. package/dist/index.js +5 -7
  215. package/dist/loadRelations.d.ts +0 -0
  216. package/dist/loadRelations.js +108 -68
  217. package/dist/outputKeys.d.ts +0 -0
  218. package/dist/outputKeys.js +0 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -1
  220. package/dist/types.d.ts +104 -60
  221. package/dist/types.js +20 -0
  222. package/package.json +12 -101
  223. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.d.ts +0 -1
  224. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +0 -52
  225. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.d.ts +0 -1
  226. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +0 -55
  227. package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +0 -8
  228. package/dist/TypeOrmConnector/test/basic/goat.dto.js +0 -18
  229. package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +0 -5
  230. package/dist/TypeOrmConnector/test/relations/car/car.dto.js +0 -12
  231. package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +0 -5
  232. package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +0 -12
  233. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +0 -5
  234. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +0 -12
  235. package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +0 -5
  236. package/dist/TypeOrmConnector/test/relations/user/user.dto.js +0 -12
  237. package/dist/core/dtos/access.dto.d.ts +0 -4
  238. package/dist/core/dtos/access.dto.js +0 -21
  239. package/dist/core/dtos/pagination.dto.d.ts +0 -13
  240. package/dist/core/dtos/pagination.dto.js +0 -62
@@ -1,43 +1,47 @@
1
+ import { ColumnType } from 'typeorm';
1
2
  import { Primitives } from './types';
2
3
  interface PropertyInterface {
3
4
  required?: boolean;
4
5
  unique?: boolean;
5
6
  hidden?: boolean;
7
+ type?: ColumnType;
6
8
  }
7
9
  interface EnumProperty {
8
10
  enum: any[];
9
11
  default?: Primitives;
10
12
  }
11
- export declare type ObjectTypeI<T> = new () => T;
13
+ export declare type DbEntity<T> = new () => T;
12
14
  interface ManyToManyInterface<T> {
13
- entity: (type?: any) => ObjectTypeI<T>;
15
+ entity: (type?: any) => DbEntity<T>;
14
16
  joinTableName: string;
15
17
  foreignKey: string;
16
18
  inverseForeignKey: string;
17
19
  }
18
20
  interface BelongsToInterface<T> {
19
- entity: (type?: any) => ObjectTypeI<T>;
21
+ entity: (type?: any) => DbEntity<T>;
20
22
  inverse: string | ((object: T) => any);
21
- pivotColumnName: string;
23
+ pivotColumnName?: string;
22
24
  }
23
25
  interface hasManyInterface<T> {
24
- entity: (type?: any) => ObjectTypeI<T>;
26
+ entity: (type?: any) => DbEntity<T>;
25
27
  inverse: string | ((object: T) => any);
26
28
  }
27
- export declare const Decorators: Readonly<{
28
- id: (isMongo?: boolean) => PropertyDecorator;
29
- entity: (name: string) => ClassDecorator;
30
- property: (params?: PropertyInterface) => PropertyDecorator;
31
- embed: (e: any) => PropertyDecorator;
32
- embedArray: (e: any, params?: PropertyInterface) => PropertyDecorator;
33
- array: (e: any, params?: PropertyInterface) => PropertyDecorator;
34
- Enum: (e: EnumProperty, params?: PropertyInterface) => PropertyDecorator;
35
- created: (e?: any) => PropertyDecorator;
36
- updated: (e?: any) => PropertyDecorator;
37
- version: (e?: any) => PropertyDecorator;
38
- deleted: (e?: any) => PropertyDecorator;
39
- belongsToMany: <T>({ entity, joinTableName, foreignKey, inverseForeignKey }: ManyToManyInterface<T>) => PropertyDecorator;
40
- hasMany: <T_1>({ entity, inverse }: hasManyInterface<T_1>) => PropertyDecorator;
41
- belongsTo: <T_2>({ entity, inverse, pivotColumnName }: BelongsToInterface<T_2>) => PropertyDecorator;
42
- }>;
29
+ export declare class DecoratorsClass {
30
+ id(): PropertyDecorator;
31
+ mongoId(): PropertyDecorator;
32
+ entity(name: string): ClassDecorator;
33
+ property(params?: PropertyInterface): PropertyDecorator;
34
+ embed(e: any): PropertyDecorator;
35
+ embedArray(e: any, params?: PropertyInterface): PropertyDecorator;
36
+ stringArray(e: any, params?: PropertyInterface): PropertyDecorator;
37
+ Enum(e: EnumProperty, params?: PropertyInterface): PropertyDecorator;
38
+ created(e?: any): PropertyDecorator;
39
+ updated(e?: any): PropertyDecorator;
40
+ deleted(e?: any): PropertyDecorator;
41
+ version(e?: any): PropertyDecorator;
42
+ belongsToMany<T>({ entity, joinTableName, foreignKey, inverseForeignKey }: ManyToManyInterface<T>): PropertyDecorator;
43
+ belongsTo<T>({ entity, inverse, pivotColumnName }: BelongsToInterface<T>): PropertyDecorator;
44
+ hasMany<T>({ entity, inverse }: hasManyInterface<T>): PropertyDecorator;
45
+ }
46
+ export declare const f: DecoratorsClass;
43
47
  export {};
@@ -1,98 +1,104 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Decorators = void 0;
3
+ exports.f = exports.DecoratorsClass = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
- const fireorm_1 = require("fireorm");
6
5
  const graphql_1 = require("graphql");
7
6
  const types_1 = require("./core/types");
8
7
  const applyDecorators_1 = require("./core/Nestjs/applyDecorators");
9
8
  const field_decorator_1 = require("./core/Nestjs/types/decorators/field.decorator");
10
- exports.Decorators = (() => {
11
- const id = (isMongo) => {
12
- isMongo = false;
13
- if (process.env.MAIN_DATABASE_TYPE === 'mongodb' || isMongo) {
14
- return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ObjectIdColumn)(), (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID), (0, typeorm_1.Column)());
15
- }
16
- return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.PrimaryGeneratedColumn)('uuid'), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID), (0, typeorm_1.Column)());
17
- };
18
- const entity = (name) => {
9
+ const js_utils_1 = require("@goatlab/js-utils");
10
+ class DecoratorsClass {
11
+ id() {
12
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ObjectIdColumn)({ type: 'uuid' }), (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID));
13
+ }
14
+ mongoId() {
15
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ObjectIdColumn)(), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID));
16
+ }
17
+ entity(name) {
19
18
  const PascalCase = name;
20
- return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Entity)({ name: PascalCase }), (0, types_1.ObjectType)(), (0, fireorm_1.Collection)(PascalCase));
21
- };
22
- const property = (params) => {
19
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Entity)({ name: PascalCase }), (0, types_1.ObjectType)());
20
+ }
21
+ property(params) {
23
22
  if (params && params.hidden) {
24
23
  return (0, applyDecorators_1.applyDecorators)((0, types_1.HideField)(), (0, typeorm_1.Column)({
25
24
  select: false,
26
- nullable: !params.required
25
+ nullable: !params.required,
26
+ type: params.type
27
27
  }), (0, types_1.ApiProperty)({
28
28
  nullable: !params.required,
29
29
  required: !!params.required
30
30
  }), (0, types_1.ApiHideProperty)());
31
31
  }
32
32
  return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
33
- nullable: !params.required
33
+ nullable: !params?.required
34
34
  }), (0, types_1.ApiProperty)({
35
- nullable: !params.required,
36
- required: !!params.required
35
+ nullable: !params?.required,
36
+ required: !!params?.required
37
37
  }), (0, field_decorator_1.Field)());
38
- };
39
- const embed = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({ type: e }));
40
- const embedArray = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({
41
- isArray: true,
42
- type: e,
43
- nullable: !params.required,
44
- required: !!params.required
45
- }));
46
- const array = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
47
- type: 'simple-array',
48
- nullable: !params?.required
49
- }), (0, types_1.ApiProperty)({
50
- type: [e],
51
- nullable: !params?.required,
52
- required: !!params?.required
53
- }));
54
- const Enum = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
55
- type: 'enum',
56
- enum: e.enum,
57
- default: e.default,
58
- nullable: !params.required
59
- }), (0, types_1.ApiProperty)({
60
- enum: e.enum,
61
- default: e.default,
62
- nullable: !params.required,
63
- required: !!params.required
64
- }));
65
- const created = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.CreateDateColumn)(), (0, types_1.ApiProperty)());
66
- const updated = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.UpdateDateColumn)(), (0, types_1.ApiProperty)());
67
- const deleted = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.DeleteDateColumn)(), (0, types_1.ApiProperty)());
68
- const version = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.VersionColumn)(), (0, types_1.ApiProperty)());
69
- function belongsToMany({ entity, joinTableName, foreignKey, inverseForeignKey }) {
38
+ }
39
+ embed(e) {
40
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({ type: e }));
41
+ }
42
+ embedArray(e, params) {
43
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({
44
+ isArray: true,
45
+ type: e,
46
+ nullable: !params?.required,
47
+ required: !!params?.required
48
+ }));
49
+ }
50
+ stringArray(e, params) {
51
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
52
+ type: 'simple-array',
53
+ nullable: !params?.required
54
+ }), (0, types_1.ApiProperty)({
55
+ type: [e],
56
+ nullable: !params?.required,
57
+ required: !!params?.required
58
+ }));
59
+ }
60
+ Enum(e, params) {
61
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
62
+ type: 'enum',
63
+ enum: e.enum,
64
+ default: e.default,
65
+ nullable: !params?.required
66
+ }), (0, types_1.ApiProperty)({
67
+ enum: e.enum,
68
+ default: e.default,
69
+ nullable: !params?.required,
70
+ required: !!params?.required
71
+ }));
72
+ }
73
+ created(e) {
74
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.CreateDateColumn)(), (0, types_1.ApiProperty)());
75
+ }
76
+ updated(e) {
77
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.UpdateDateColumn)(), (0, types_1.ApiProperty)());
78
+ }
79
+ deleted(e) {
80
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.DeleteDateColumn)(), (0, types_1.ApiProperty)());
81
+ }
82
+ version(e) {
83
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.VersionColumn)(), (0, types_1.ApiProperty)());
84
+ }
85
+ belongsToMany({ entity, joinTableName, foreignKey, inverseForeignKey }) {
70
86
  return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ManyToMany)(entity), (0, typeorm_1.JoinTable)({
71
87
  name: joinTableName,
72
88
  joinColumns: [{ name: foreignKey }],
73
89
  inverseJoinColumns: [{ name: inverseForeignKey }]
74
90
  }));
75
91
  }
76
- function belongsTo({ entity, inverse, pivotColumnName }) {
77
- return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ManyToOne)(entity, inverse), (0, typeorm_1.JoinColumn)({ name: pivotColumnName }));
92
+ belongsTo({ entity, inverse, pivotColumnName }) {
93
+ return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ManyToOne)(entity, inverse), (0, typeorm_1.JoinColumn)({
94
+ name: pivotColumnName,
95
+ referencedColumnName: 'id',
96
+ foreignKeyConstraintName: `${pivotColumnName}_id_${js_utils_1.Ids.nanoId()}`
97
+ }));
78
98
  }
79
- function hasMany({ entity, inverse }) {
99
+ hasMany({ entity, inverse }) {
80
100
  return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.OneToMany)(entity, inverse));
81
101
  }
82
- return Object.freeze({
83
- id,
84
- entity,
85
- property,
86
- embed,
87
- embedArray,
88
- array,
89
- Enum,
90
- created,
91
- updated,
92
- version,
93
- deleted,
94
- belongsToMany,
95
- hasMany,
96
- belongsTo
97
- });
98
- })();
102
+ }
103
+ exports.DecoratorsClass = DecoratorsClass;
104
+ exports.f = new DecoratorsClass();
File without changes
File without changes
package/dist/index.d.ts CHANGED
@@ -1,23 +1,22 @@
1
1
  import { ApiHideProperty, ApiProperty, Column, HideField, InputType, ObjectType, OmitType, PartialType, getModelSchemaRef } from './core/types';
2
- import type { BaseDataElement, DaoOutput, Deleted, Filter, LogicOperator, PaginatedData, Paginator, Paths, Primitives, PrimitivesArray, Sure, WhereClause } from './types';
3
- import { PaginationLinks, PaginationMeta } from './core/dtos/pagination.dto';
4
- import { Access } from './core/dtos/access.dto';
2
+ import type { AnyObject, Deleted, PaginatedData, Paginator, Primitives, PrimitivesArray, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter, SingleQueryOutput } from './types';
3
+ import { LogicOperator } from './types';
5
4
  import { BaseConnector } from './BaseConnector';
6
5
  import { Collection } from '@goatlab/js-utils';
7
- import { Decorators } from './decorators';
6
+ import { f } from './decorators';
8
7
  import { Fluent } from './Fluent';
9
8
  import type { FluentConnectorInterface } from './BaseConnector';
10
9
  import type { SchemaObject } from './core/types';
11
- import { TypeOrmConnector } from './TypeOrmConnector/TypeOrmConnector';
10
+ import { getRelationsFromModelGenerator, TypeOrmConnector } from './TypeOrmConnector/TypeOrmConnector';
12
11
  import { getOutputKeys } from './outputKeys';
13
12
  import { loadRelations } from './loadRelations';
14
13
  import { modelGeneratorDataSource } from './generatorDatasource';
15
14
  import { Cache } from './cache';
16
15
  import { ValidationError } from 'class-validator';
17
16
  export { DataSource } from 'typeorm';
18
- export { Access, ApiHideProperty, ApiProperty, BaseConnector, Collection, Column, Decorators, Fluent, getModelSchemaRef, getOutputKeys, HideField, InputType, loadRelations, modelGeneratorDataSource, ObjectType, OmitType, PaginationLinks, PaginationMeta, PartialType, TypeOrmConnector, Cache };
17
+ export { ApiHideProperty, ApiProperty, BaseConnector, Collection, Column, f, Fluent, getModelSchemaRef, getOutputKeys, HideField, InputType, loadRelations, modelGeneratorDataSource, ObjectType, OmitType, PartialType, TypeOrmConnector, Cache, getRelationsFromModelGenerator, LogicOperator };
19
18
  interface ValidatedInput<T> {
20
19
  errors: ValidationError[] | null;
21
20
  result: Awaited<T>;
22
21
  }
23
- export type { BaseDataElement, DaoOutput, Deleted, Filter, FluentConnectorInterface, LogicOperator, PaginatedData, Paginator, Paths, Primitives, PrimitivesArray, Sure, WhereClause, SchemaObject, ValidatedInput };
22
+ export type { AnyObject, Deleted, FluentConnectorInterface, PaginatedData, Paginator, Primitives, PrimitivesArray, SchemaObject, ValidatedInput, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter, SingleQueryOutput };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Cache = exports.TypeOrmConnector = exports.PartialType = exports.PaginationMeta = exports.PaginationLinks = exports.OmitType = exports.ObjectType = exports.modelGeneratorDataSource = exports.loadRelations = exports.InputType = exports.HideField = exports.getOutputKeys = exports.getModelSchemaRef = exports.Fluent = exports.Decorators = exports.Column = exports.Collection = exports.BaseConnector = exports.ApiProperty = exports.ApiHideProperty = exports.Access = exports.DataSource = void 0;
3
+ exports.LogicOperator = exports.getRelationsFromModelGenerator = exports.Cache = exports.TypeOrmConnector = exports.PartialType = exports.OmitType = exports.ObjectType = exports.modelGeneratorDataSource = exports.loadRelations = exports.InputType = exports.HideField = exports.getOutputKeys = exports.getModelSchemaRef = exports.Fluent = exports.f = exports.Column = exports.Collection = exports.BaseConnector = exports.ApiProperty = exports.ApiHideProperty = exports.DataSource = void 0;
4
4
  const types_1 = require("./core/types");
5
5
  Object.defineProperty(exports, "ApiHideProperty", { enumerable: true, get: function () { return types_1.ApiHideProperty; } });
6
6
  Object.defineProperty(exports, "ApiProperty", { enumerable: true, get: function () { return types_1.ApiProperty; } });
@@ -11,20 +11,18 @@ Object.defineProperty(exports, "ObjectType", { enumerable: true, get: function (
11
11
  Object.defineProperty(exports, "OmitType", { enumerable: true, get: function () { return types_1.OmitType; } });
12
12
  Object.defineProperty(exports, "PartialType", { enumerable: true, get: function () { return types_1.PartialType; } });
13
13
  Object.defineProperty(exports, "getModelSchemaRef", { enumerable: true, get: function () { return types_1.getModelSchemaRef; } });
14
- const pagination_dto_1 = require("./core/dtos/pagination.dto");
15
- Object.defineProperty(exports, "PaginationLinks", { enumerable: true, get: function () { return pagination_dto_1.PaginationLinks; } });
16
- Object.defineProperty(exports, "PaginationMeta", { enumerable: true, get: function () { return pagination_dto_1.PaginationMeta; } });
17
- const access_dto_1 = require("./core/dtos/access.dto");
18
- Object.defineProperty(exports, "Access", { enumerable: true, get: function () { return access_dto_1.Access; } });
14
+ const types_2 = require("./types");
15
+ Object.defineProperty(exports, "LogicOperator", { enumerable: true, get: function () { return types_2.LogicOperator; } });
19
16
  const BaseConnector_1 = require("./BaseConnector");
20
17
  Object.defineProperty(exports, "BaseConnector", { enumerable: true, get: function () { return BaseConnector_1.BaseConnector; } });
21
18
  const js_utils_1 = require("@goatlab/js-utils");
22
19
  Object.defineProperty(exports, "Collection", { enumerable: true, get: function () { return js_utils_1.Collection; } });
23
20
  const decorators_1 = require("./decorators");
24
- Object.defineProperty(exports, "Decorators", { enumerable: true, get: function () { return decorators_1.Decorators; } });
21
+ Object.defineProperty(exports, "f", { enumerable: true, get: function () { return decorators_1.f; } });
25
22
  const Fluent_1 = require("./Fluent");
26
23
  Object.defineProperty(exports, "Fluent", { enumerable: true, get: function () { return Fluent_1.Fluent; } });
27
24
  const TypeOrmConnector_1 = require("./TypeOrmConnector/TypeOrmConnector");
25
+ Object.defineProperty(exports, "getRelationsFromModelGenerator", { enumerable: true, get: function () { return TypeOrmConnector_1.getRelationsFromModelGenerator; } });
28
26
  Object.defineProperty(exports, "TypeOrmConnector", { enumerable: true, get: function () { return TypeOrmConnector_1.TypeOrmConnector; } });
29
27
  const outputKeys_1 = require("./outputKeys");
30
28
  Object.defineProperty(exports, "getOutputKeys", { enumerable: true, get: function () { return outputKeys_1.getOutputKeys; } });
File without changes
@@ -8,86 +8,126 @@ const loadRelations = async ({ data, relations, modelRelations, provider, self,
8
8
  }
9
9
  const chunkSize = provider === 'typeorm' ? 100 : 10;
10
10
  for (const relation of Object.keys(relations)) {
11
- if (modelRelations[relation]) {
12
- const relationModel = modelRelations[relation];
13
- const Model = new relations[relation]();
14
- if (relationModel.isOneToMany) {
15
- const ids = new Set(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
16
- const chunks = js_utils_1.Arrays.chunk(Array.from(ids), chunkSize);
17
- const promises = [];
18
- for (const relatedIds of chunks) {
19
- const results = await Model.andWhere(keys => keys[relationModel.inverseSidePropertyPath], 'in', relatedIds).get();
20
- promises.push(results);
21
- }
22
- const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
23
- const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r[relationModel.inverseSidePropertyPath]);
24
- data.forEach(d => {
25
- if (grouped[d.id]) {
26
- d[relationModel.propertyPath] = grouped[d.id];
11
+ if (!modelRelations[relation]) {
12
+ throw new Error(`Relationship does not exist: ${relation}. Did you create it in your DB entity?`);
13
+ }
14
+ if (!self[relation]) {
15
+ throw new Error(`Relationship does not exist: ${relation}. Did you create it in your Repository?`);
16
+ }
17
+ const relationModel = modelRelations[relation];
18
+ const Repository = self[relation]();
19
+ if (relationModel.isOneToMany) {
20
+ const ids = new Set(data.map(d => d.id));
21
+ const chunks = js_utils_1.Arrays.chunk(Array.from(ids), chunkSize);
22
+ const promises = [];
23
+ for (const relatedIds of chunks) {
24
+ const results = await Repository.findMany({
25
+ where: {
26
+ [relationModel.inverseSidePropertyPath]: {
27
+ in: relatedIds
28
+ }
27
29
  }
28
30
  });
31
+ promises.push(results);
29
32
  }
30
- else if (relationModel.isManyToOne) {
31
- const ids = js_utils_1.Arrays.deDuplicate(data.map(d => d[relationModel.joinColumns[0].propertyPath]));
32
- const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
33
- const promises = [];
34
- for (const relatedIds of chunks) {
35
- const results = await Model.andWhere(keys => keys.id, 'in', relatedIds).get();
36
- promises.push(results);
33
+ const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
34
+ const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r[relationModel.inverseSidePropertyPath]);
35
+ data.map(d => {
36
+ if (grouped[d.id]) {
37
+ d[relationModel.propertyName] = grouped[d.id];
37
38
  }
38
- const relatedResults = js_utils_1.Arrays.collapse(promises);
39
- const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
40
- data.forEach(d => {
41
- if (grouped[d[relationModel.joinColumns[0].propertyPath]]) {
42
- d[relationModel.propertyPath] =
43
- grouped[d[relationModel.joinColumns[0].propertyPath]][0];
39
+ return d;
40
+ });
41
+ return data;
42
+ }
43
+ if (relationModel.isManyToOne) {
44
+ const ids = js_utils_1.Arrays.deDuplicate(data.map(d => d[relationModel.joinColumns[0].propertyPath]));
45
+ const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
46
+ const promises = [];
47
+ for (const relatedIds of chunks) {
48
+ const results = await Repository.findMany({
49
+ where: {
50
+ id: {
51
+ in: relatedIds
52
+ }
44
53
  }
45
54
  });
55
+ promises.push(results);
46
56
  }
47
- else if (relationModel.isManyToMany) {
48
- const ids = js_utils_1.Arrays.deDuplicate(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
49
- const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
50
- if (relationModel.joinColumns.length === 0) {
51
- return data;
52
- }
53
- const pivotRepository = self[relationModel.propertyPath]().relationQuery.pivot;
54
- const promises = [];
55
- for (const pivotIds of chunks) {
56
- const results = await pivotRepository
57
- .where(k => k[relationModel.joinColumns[0].propertyName], 'in', pivotIds)
58
- .get();
59
- promises.push(results);
57
+ const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
58
+ const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
59
+ data.map(d => {
60
+ if (grouped[d[relationModel.joinColumns[0].propertyPath]]) {
61
+ d[relationModel.propertyName] =
62
+ grouped[d[relationModel.joinColumns[0].propertyPath]][0];
60
63
  }
61
- const pivotResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
62
- const uniquePivotIds = pivotResults.map(p => p[relationModel.inverseJoinColumns[0].propertyName]);
63
- const relationChunks = js_utils_1.Arrays.chunk(uniquePivotIds, chunkSize);
64
- const relationPromises = [];
65
- for (const relatedIds of relationChunks) {
66
- const results = await Model.andWhere(keys => keys.id, 'in', relatedIds).get();
67
- relationPromises.push(results);
68
- }
69
- let relatedResults = js_utils_1.Arrays.collapse(await Promise.all(relationPromises));
70
- const pivotInverseKey = relationModel.inverseJoinColumns[0].propertyName;
71
- relatedResults = relatedResults.map(r => {
72
- return {
73
- ...r,
74
- pivot: pivotResults.find(p => p[pivotInverseKey] === r.id)
75
- };
64
+ });
65
+ return data;
66
+ }
67
+ if (relationModel.isManyToMany) {
68
+ const ids = js_utils_1.Arrays.deDuplicate(data.map(d => d.id));
69
+ const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
70
+ if (relationModel.joinColumns.length === 0) {
71
+ return data;
72
+ }
73
+ const pivotForeignField = self.modelRelations[relationModel.propertyName].joinColumns[0]
74
+ .propertyPath;
75
+ const inverseForeignField = self.modelRelations[relationModel.propertyName].inverseJoinColumns[0]
76
+ .propertyPath;
77
+ const pivotRepository = Repository?.relatedQuery.pivot;
78
+ const calleeKey = Repository?.relatedQuery.key;
79
+ if (!pivotForeignField ||
80
+ !inverseForeignField ||
81
+ !pivotRepository ||
82
+ !calleeKey) {
83
+ throw new Error('The Many-to-Many relationship is not properly defined.Please check both your Model and Repository');
84
+ }
85
+ const promises = [];
86
+ for (const pivotIds of chunks) {
87
+ const results = await pivotRepository.findMany({
88
+ where: {
89
+ [pivotForeignField]: {
90
+ in: pivotIds
91
+ }
92
+ }
76
93
  });
77
- const groupedPivot = js_utils_1.Arrays.groupBy(pivotResults, r => r[relationModel.joinColumns[0].propertyName]);
78
- const groupedRelated = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
79
- data.forEach(d => {
80
- groupedPivot[d.id]?.forEach(gp => {
81
- if (!d[relationModel.propertyPath]) {
82
- d[relationModel.propertyPath] = [];
94
+ promises.push(results);
95
+ }
96
+ const pivotResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
97
+ const uniquePivotIds = pivotResults.map(p => p[inverseForeignField]);
98
+ const relationChunks = js_utils_1.Arrays.chunk(uniquePivotIds, chunkSize);
99
+ const relationPromises = [];
100
+ for (const relatedIds of relationChunks) {
101
+ const results = await Repository.findMany({
102
+ where: {
103
+ id: {
104
+ in: relatedIds
83
105
  }
84
- d[relationModel.propertyPath] = [
85
- ...d[relationModel.propertyPath],
86
- ...groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]]
87
- ];
88
- });
106
+ }
89
107
  });
108
+ relationPromises.push(results);
90
109
  }
110
+ let relatedResults = js_utils_1.Arrays.collapse(await Promise.all(relationPromises));
111
+ relatedResults = relatedResults.map(r => {
112
+ return {
113
+ ...r,
114
+ pivot: pivotResults.find(p => p[inverseForeignField] === r.id)
115
+ };
116
+ });
117
+ const groupedPivot = js_utils_1.Arrays.groupBy(pivotResults, r => r[relationModel.joinColumns[0].propertyName]);
118
+ const groupedRelated = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
119
+ data.map(d => {
120
+ groupedPivot[d.id]?.forEach(gp => {
121
+ if (!d[calleeKey]) {
122
+ d[calleeKey] = [];
123
+ }
124
+ d[calleeKey] = [
125
+ ...d[calleeKey],
126
+ ...groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]]
127
+ ];
128
+ });
129
+ });
130
+ return data;
91
131
  }
92
132
  }
93
133
  return data;
File without changes
File without changes