@goatlab/fluent 0.7.21 → 0.7.22

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 (260) hide show
  1. package/dist/BaseConnector.d.ts +43 -0
  2. package/dist/BaseConnector.js +258 -0
  3. package/dist/Fluent.d.ts +7 -0
  4. package/dist/Fluent.js +22 -0
  5. package/dist/FluentConnectorInterface.d.ts +17 -0
  6. package/dist/FluentConnectorInterface.js +2 -0
  7. package/dist/FluentEntity.d.ts +7 -0
  8. package/dist/FluentEntity.js +28 -0
  9. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +38 -0
  10. package/dist/TypeOrmConnector/TypeOrmConnector.js +370 -0
  11. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +7 -0
  12. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +148 -0
  13. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +6 -0
  14. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +45 -0
  15. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.d.ts +4 -0
  16. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js +19 -0
  17. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +4 -0
  18. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +12 -0
  19. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +6 -0
  20. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +166 -0
  21. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +8 -0
  22. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +200 -0
  23. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +6 -0
  24. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +207 -0
  25. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +1 -0
  26. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +256 -0
  27. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +116 -0
  28. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +74 -0
  29. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.d.ts +5 -0
  30. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.js +17 -0
  31. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.d.ts +5 -0
  32. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.js +17 -0
  33. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +5 -0
  34. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +17 -0
  35. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -0
  36. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +193 -0
  37. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +53 -0
  38. package/dist/TypeOrmConnector/test/basic/goat.entity.js +53 -0
  39. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.d.ts +5 -0
  40. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.js +16 -0
  41. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.d.ts +5 -0
  42. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.js +16 -0
  43. package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +5 -0
  44. package/dist/TypeOrmConnector/test/basic/goat.repository.js +16 -0
  45. package/dist/TypeOrmConnector/test/dbEntities.d.ts +6 -0
  46. package/dist/TypeOrmConnector/test/dbEntities.js +17 -0
  47. package/dist/TypeOrmConnector/test/docker/docker.d.ts +35 -0
  48. package/dist/TypeOrmConnector/test/docker/docker.js +148 -0
  49. package/dist/TypeOrmConnector/test/docker/mongo.d.ts +16 -0
  50. package/dist/TypeOrmConnector/test/docker/mongo.js +93 -0
  51. package/dist/TypeOrmConnector/test/docker/mysql.d.ts +17 -0
  52. package/dist/TypeOrmConnector/test/docker/mysql.js +132 -0
  53. package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
  54. package/dist/TypeOrmConnector/test/flock.js +25 -0
  55. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +10 -0
  56. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +28 -0
  57. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.d.ts +2 -0
  58. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.js +12 -0
  59. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +9 -0
  60. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +25 -0
  61. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.d.ts +6 -0
  62. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.js +17 -0
  63. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +10 -0
  64. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +32 -0
  65. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +10 -0
  66. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +26 -0
  67. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.d.ts +2 -0
  68. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +16 -0
  69. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +9 -0
  70. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +25 -0
  71. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.d.ts +6 -0
  72. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.js +17 -0
  73. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +10 -0
  74. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +33 -0
  75. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +7 -0
  76. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +32 -0
  77. package/dist/TypeOrmConnector/test/relations/car/car.output.schema.d.ts +511 -0
  78. package/dist/TypeOrmConnector/test/relations/car/car.output.schema.js +8 -0
  79. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +10 -0
  80. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +26 -0
  81. package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +15 -0
  82. package/dist/TypeOrmConnector/test/relations/car/car.schema.js +9 -0
  83. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -0
  84. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +548 -0
  85. package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.d.ts +152 -0
  86. package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.js +14 -0
  87. package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +12 -0
  88. package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +8 -0
  89. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +6 -0
  90. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +29 -0
  91. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +9 -0
  92. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +25 -0
  93. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +5 -0
  94. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +23 -0
  95. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.d.ts +15 -0
  96. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.js +9 -0
  97. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +6 -0
  98. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +17 -0
  99. package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +14 -0
  100. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +56 -0
  101. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +10 -0
  102. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +30 -0
  103. package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +546 -0
  104. package/dist/TypeOrmConnector/test/relations/user/user.schema.js +67 -0
  105. package/dist/TypeOrmConnector/test/sqlite/memoryDataSource.d.ts +2 -0
  106. package/dist/TypeOrmConnector/test/sqlite/memoryDataSource.js +12 -0
  107. package/dist/TypeOrmConnector/util/clearEmpties.d.ts +1 -0
  108. package/dist/TypeOrmConnector/util/clearEmpties.js +25 -0
  109. package/dist/TypeOrmConnector/util/extractConditions.d.ts +6 -0
  110. package/dist/TypeOrmConnector/util/extractConditions.js +80 -0
  111. package/dist/TypeOrmConnector/util/extractInclude.d.ts +2 -0
  112. package/dist/TypeOrmConnector/util/extractInclude.js +25 -0
  113. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +12 -0
  114. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js +42 -0
  115. package/dist/TypeOrmConnector/util/extractOrderBy.d.ts +4 -0
  116. package/dist/TypeOrmConnector/util/extractOrderBy.js +18 -0
  117. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +19 -0
  118. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js +26 -0
  119. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +1 -0
  120. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +20 -0
  121. package/dist/TypeOrmConnector/util/isAnyObject.d.ts +1 -0
  122. package/dist/TypeOrmConnector/util/isAnyObject.js +7 -0
  123. package/dist/TypeOrmConnector/util/nestQueryResults.d.ts +2 -0
  124. package/dist/TypeOrmConnector/util/nestQueryResults.js +31 -0
  125. package/dist/cache.d.ts +9 -0
  126. package/dist/cache.js +43 -0
  127. package/dist/core/Loopback/build-schema.d.ts +31 -0
  128. package/dist/core/Loopback/build-schema.js +333 -0
  129. package/dist/core/Loopback/common-types.d.ts +36 -0
  130. package/dist/core/Loopback/common-types.js +13 -0
  131. package/dist/core/Loopback/json-to-schema.d.ts +6 -0
  132. package/dist/core/Loopback/json-to-schema.js +96 -0
  133. package/dist/core/Loopback/mapValues.d.ts +2 -0
  134. package/dist/core/Loopback/mapValues.js +835 -0
  135. package/dist/core/Loopback/metadata.d.ts +9 -0
  136. package/dist/core/Loopback/metadata.js +28 -0
  137. package/dist/core/Loopback/model.d.ts +87 -0
  138. package/dist/core/Loopback/model.js +244 -0
  139. package/dist/core/Loopback/query.d.ts +97 -0
  140. package/dist/core/Loopback/query.js +292 -0
  141. package/dist/core/Loopback/relation.types.d.ts +45 -0
  142. package/dist/core/Loopback/relation.types.js +13 -0
  143. package/dist/core/Loopback/type-resolver.d.ts +7 -0
  144. package/dist/core/Loopback/type-resolver.js +34 -0
  145. package/dist/core/Loopback/type.d.ts +9 -0
  146. package/dist/core/Loopback/type.js +2 -0
  147. package/dist/core/Nestjs/applyDecorators.d.ts +1 -0
  148. package/dist/core/Nestjs/applyDecorators.js +17 -0
  149. package/dist/core/Nestjs/types/common.d.ts +16 -0
  150. package/dist/core/Nestjs/types/common.js +37 -0
  151. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
  152. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +7 -0
  153. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
  154. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +65 -0
  155. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
  156. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +131 -0
  157. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +1 -0
  158. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +19 -0
  159. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
  160. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +55 -0
  161. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +1 -0
  162. package/dist/core/Nestjs/types/decorators/directive.decorator.js +36 -0
  163. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +1 -0
  164. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +25 -0
  165. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +15 -0
  166. package/dist/core/Nestjs/types/decorators/field.decorator.js +56 -0
  167. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +7 -0
  168. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +23 -0
  169. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +9 -0
  170. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +27 -0
  171. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
  172. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +42 -0
  173. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
  174. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +9 -0
  175. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
  176. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +9 -0
  177. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
  178. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +9 -0
  179. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
  180. package/dist/core/Nestjs/types/errors/undefined-type.error.js +10 -0
  181. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
  182. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +10 -0
  183. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +5 -0
  184. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +2 -0
  185. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
  186. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +2 -0
  187. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
  188. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +2 -0
  189. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
  190. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +2 -0
  191. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +235 -0
  192. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +2 -0
  193. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
  194. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +2 -0
  195. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
  196. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +2 -0
  197. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
  198. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +2 -0
  199. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
  200. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +2 -0
  201. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
  202. package/dist/core/Nestjs/types/lazy-metadata.storage.js +67 -0
  203. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
  204. package/dist/core/Nestjs/types/metadata/class.metadata.js +2 -0
  205. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
  206. package/dist/core/Nestjs/types/metadata/directive.metadata.js +2 -0
  207. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
  208. package/dist/core/Nestjs/types/metadata/enum.metadata.js +2 -0
  209. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
  210. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +2 -0
  211. package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
  212. package/dist/core/Nestjs/types/metadata/index.js +11 -0
  213. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
  214. package/dist/core/Nestjs/types/metadata/interface.metadata.js +2 -0
  215. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
  216. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +2 -0
  217. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
  218. package/dist/core/Nestjs/types/metadata/param.metadata.js +2 -0
  219. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
  220. package/dist/core/Nestjs/types/metadata/property.metadata.js +2 -0
  221. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
  222. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +2 -0
  223. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
  224. package/dist/core/Nestjs/types/metadata/union.metadata.js +2 -0
  225. package/dist/core/Nestjs/types/object-type.decorator.d.ts +8 -0
  226. package/dist/core/Nestjs/types/object-type.decorator.js +25 -0
  227. package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
  228. package/dist/core/Nestjs/types/omit-type.js +34 -0
  229. package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
  230. package/dist/core/Nestjs/types/reflection.utils.js +65 -0
  231. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +4 -0
  232. package/dist/core/Nestjs/types/set-metadata.decorator.js +16 -0
  233. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +69 -0
  234. package/dist/core/Nestjs/types/type-metadata.storage.js +342 -0
  235. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
  236. package/dist/core/Nestjs/types/utils/enum.utils.js +29 -0
  237. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +3 -0
  238. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
  239. package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +2 -0
  240. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +38 -0
  241. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
  242. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +36 -0
  243. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
  244. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
  245. package/dist/core/types.d.ts +23 -0
  246. package/dist/core/types.js +29 -0
  247. package/dist/decorators.d.ts +47 -0
  248. package/dist/decorators.js +104 -0
  249. package/dist/generatorDatasource.d.ts +2 -0
  250. package/dist/generatorDatasource.js +12 -0
  251. package/dist/index.d.ts +29 -0
  252. package/dist/index.js +49 -0
  253. package/dist/loadRelations.d.ts +12 -0
  254. package/dist/loadRelations.js +133 -0
  255. package/dist/outputKeys.d.ts +2 -0
  256. package/dist/outputKeys.js +17 -0
  257. package/dist/tsconfig.tsbuildinfo +1 -0
  258. package/dist/types.d.ts +141 -0
  259. package/dist/types.js +22 -0
  260. package/package.json +1 -1
@@ -0,0 +1,43 @@
1
+ import { Collection } from '@goatlab/js-utils';
2
+ import { FindByIdFilter, FluentHasManyParams, FluentBelongsToParams, FluentBelongsToManyParams, FluentQuery, Primitives, QueryFieldSelector, QueryOutput, AnyObject } from './types';
3
+ export declare abstract class BaseConnector<ModelDTO, InputDTO, OutputDTO> {
4
+ protected outputKeys: string[];
5
+ protected relatedQuery?: {
6
+ entity: new () => ModelDTO;
7
+ query?: FluentQuery<ModelDTO>;
8
+ repository?: any;
9
+ key?: string;
10
+ pivot?: any;
11
+ };
12
+ protected chunk: null;
13
+ protected pullSize: null;
14
+ protected paginator: undefined;
15
+ protected rawQuery: undefined;
16
+ protected modelRelations: any;
17
+ isMongoDB: boolean;
18
+ constructor();
19
+ insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
20
+ updateById(id: string, data: InputDTO): Promise<OutputDTO>;
21
+ findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
22
+ findFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO> | null>;
23
+ requireById(id: string, q?: FindByIdFilter<ModelDTO>): Promise<QueryOutput<FindByIdFilter<ModelDTO>, ModelDTO>>;
24
+ requireFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>>;
25
+ findByIds<T extends FindByIdFilter<ModelDTO>>(ids: string[], q?: T): Promise<QueryOutput<T, ModelDTO>[]>;
26
+ findById<T extends FindByIdFilter<ModelDTO>>(id: string, q?: T): Promise<QueryOutput<T, ModelDTO> | null>;
27
+ collect(query: FluentQuery<ModelDTO>): Promise<Collection<OutputDTO>>;
28
+ pluck(path: QueryFieldSelector<ModelDTO>, query?: FluentQuery<ModelDTO>): Promise<Primitives[]>;
29
+ protected setRelatedQuery(r: {
30
+ entity: new () => ModelDTO;
31
+ query?: FluentQuery<ModelDTO>;
32
+ repository?: any;
33
+ key?: string;
34
+ }): void;
35
+ associate(data: InputDTO | OutputDTO): Promise<OutputDTO[]>;
36
+ attach(id: string, pivot?: AnyObject): Promise<any>;
37
+ protected hasMany<T extends FluentHasManyParams<T>>(r: T): InstanceType<T['repository']>;
38
+ protected belongsTo<T extends FluentBelongsToParams<T>>(r: T): InstanceType<T['repository']>;
39
+ protected hasOne(): void;
40
+ protected belongsToMany<T extends FluentBelongsToManyParams<T>>(r: T): InstanceType<T['repository']>;
41
+ protected hasManyThrough(): void;
42
+ protected jsApplySelect(select: FluentQuery<ModelDTO>['select'], data: ModelDTO[]): ModelDTO[];
43
+ }
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseConnector = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
5
+ const clearEmpties_1 = require("./TypeOrmConnector/util/clearEmpties");
6
+ class BaseConnector {
7
+ constructor() {
8
+ this.chunk = null;
9
+ this.pullSize = null;
10
+ this.paginator = undefined;
11
+ this.rawQuery = undefined;
12
+ this.chunk = null;
13
+ this.pullSize = null;
14
+ this.paginator = undefined;
15
+ this.rawQuery = undefined;
16
+ this.outputKeys = [];
17
+ }
18
+ async insertMany(data) {
19
+ throw new Error('get() method not implemented');
20
+ }
21
+ async updateById(id, data) {
22
+ throw new Error('get() method not implemented');
23
+ }
24
+ async findMany(query) {
25
+ throw new Error('findMany() method not implemented');
26
+ }
27
+ async findFirst(query) {
28
+ const data = await this.findMany({ ...query, limit: 1 });
29
+ if (!data[0]) {
30
+ return null;
31
+ }
32
+ return data[0];
33
+ }
34
+ async requireById(id, q) {
35
+ const found = await this.findByIds([id], {
36
+ select: q?.select,
37
+ include: q?.include,
38
+ limit: 1
39
+ });
40
+ found.map(d => {
41
+ if (this.isMongoDB) {
42
+ d['id'] = d['id'].toString();
43
+ }
44
+ (0, clearEmpties_1.clearEmpties)(js_utils_1.Objects.deleteNulls(d));
45
+ });
46
+ if (!found[0]) {
47
+ throw new Error(`Object ${id} not found`);
48
+ }
49
+ return found[0];
50
+ }
51
+ async requireFirst(query) {
52
+ const found = await this.findMany({ ...query, limit: 1 });
53
+ found.map(d => {
54
+ if (this.isMongoDB) {
55
+ d['id'] = d['id'].toString();
56
+ }
57
+ (0, clearEmpties_1.clearEmpties)(js_utils_1.Objects.deleteNulls(d));
58
+ });
59
+ if (!found[0]) {
60
+ const stringQuery = query ? JSON.stringify(query) : '';
61
+ throw new Error(`No objects found matching: ${stringQuery}`);
62
+ }
63
+ return found[0];
64
+ }
65
+ async findByIds(ids, q) {
66
+ let data = await this.findMany({
67
+ where: {
68
+ id: {
69
+ in: ids
70
+ }
71
+ },
72
+ limit: q?.limit,
73
+ select: q?.select,
74
+ include: q?.include
75
+ });
76
+ return data;
77
+ }
78
+ async findById(id, q) {
79
+ const result = await this.findByIds([id], { ...q, limit: 1 });
80
+ if (!result[0]) {
81
+ return null;
82
+ }
83
+ return result[0];
84
+ }
85
+ async collect(query) {
86
+ const data = await this.findMany(query);
87
+ if (!Array.isArray(data)) {
88
+ return new js_utils_1.Collection([data]);
89
+ }
90
+ return new js_utils_1.Collection(data);
91
+ }
92
+ async pluck(path, query) {
93
+ const data = await this.findMany(query);
94
+ const paths = Object.keys(js_utils_1.Objects.flatten(path));
95
+ const result = data.map(e => {
96
+ const extracted = js_utils_1.Objects.getFromPath(e, String(paths[0]), undefined);
97
+ if (typeof extracted.value !== 'undefined') {
98
+ return extracted.value;
99
+ }
100
+ });
101
+ return result;
102
+ }
103
+ setRelatedQuery(r) {
104
+ this.relatedQuery = r;
105
+ }
106
+ async associate(data) {
107
+ if (!this.relatedQuery?.entity || !this.relatedQuery.key) {
108
+ throw new Error('Associate can only be called as a related model');
109
+ }
110
+ const parentData = await this.relatedQuery.repository.findMany({
111
+ ...this.relatedQuery.query,
112
+ select: { id: true }
113
+ });
114
+ let foreignKeyName = this.relatedQuery['repository']['modelRelations'][this.relatedQuery.key]
115
+ .inverseSidePropertyPath;
116
+ if (!foreignKeyName) {
117
+ throw new Error('The relationship was not properly defined. Please check that your Repository and Model relations have the same keys');
118
+ }
119
+ const relatedData = parentData.map(r => ({
120
+ [foreignKeyName]: r.id,
121
+ ...data
122
+ }));
123
+ const existingIds = (0, clearEmpties_1.clearEmpties)(relatedData.map(r => r.id));
124
+ const existingData = existingIds.length
125
+ ? await this.findByIds(relatedData.map(r => r.id))
126
+ : [];
127
+ console.log({ existingData });
128
+ const updateQueries = [];
129
+ const insertQueries = [];
130
+ for (const related of relatedData) {
131
+ const exists = existingData.find((d) => {
132
+ const p = d;
133
+ p.id === related.id;
134
+ });
135
+ if (exists) {
136
+ updateQueries.push(this.updateById(exists.id, {
137
+ ...exists,
138
+ [foreignKeyName]: related[foreignKeyName]
139
+ }));
140
+ }
141
+ else {
142
+ insertQueries.push(related);
143
+ }
144
+ }
145
+ const updateResult = await Promise.all(updateQueries);
146
+ const insertedResult = await this.insertMany(insertQueries);
147
+ return [...updateResult, ...insertedResult];
148
+ }
149
+ async attach(id, pivot) {
150
+ if (!this.relatedQuery?.entity || !this.relatedQuery.key) {
151
+ throw new Error('Associate can only be called as a related model');
152
+ }
153
+ const parentData = await this.relatedQuery.repository.findMany({
154
+ ...this.relatedQuery.query,
155
+ select: { id: true }
156
+ });
157
+ const foreignKeyName = this.relatedQuery['repository']['modelRelations'][this.relatedQuery.key]
158
+ .joinColumns[0].propertyPath;
159
+ const inverseKeyName = this.relatedQuery['repository']['modelRelations'][this.relatedQuery.key]
160
+ .inverseJoinColumns[0].propertyPath;
161
+ if (!foreignKeyName || !inverseKeyName) {
162
+ throw new Error(`The relationship was not properly defined. Please check that your Repository and Model relations have the same keys: Searching for: ${this.relatedQuery.key}`);
163
+ }
164
+ const relatedData = parentData.map(d => ({
165
+ [foreignKeyName]: d.id,
166
+ [inverseKeyName]: id,
167
+ ...pivot
168
+ }));
169
+ return this.relatedQuery.pivot.insertMany(relatedData);
170
+ }
171
+ hasMany(r) {
172
+ const newRepo = new r.repository();
173
+ const calleeName = new Error('dummy')
174
+ .stack.split('\n')[2]
175
+ .replace(/^\s+at\s+(.+?)\s.+/g, '$1')
176
+ .split('.')[1];
177
+ if (this.relatedQuery) {
178
+ newRepo.setRelatedQuery({
179
+ ...this.relatedQuery,
180
+ key: calleeName
181
+ });
182
+ }
183
+ return newRepo;
184
+ }
185
+ belongsTo(r) {
186
+ return this.hasMany(r);
187
+ }
188
+ hasOne() {
189
+ throw new Error('Method not implemented');
190
+ }
191
+ belongsToMany(r) {
192
+ const newRepo = new r.repository();
193
+ const relationName = new Error('dummy')
194
+ .stack.split('\n')[2]
195
+ .replace(/^\s+at\s+(.+?)\s.+/g, '$1')
196
+ .split('.')[1];
197
+ const pivot = new r.pivot();
198
+ pivot.setRelatedQuery({
199
+ ...this.relatedQuery,
200
+ key: relationName
201
+ });
202
+ if (this.relatedQuery) {
203
+ newRepo.setRelatedQuery({
204
+ ...this.relatedQuery,
205
+ key: relationName,
206
+ pivot
207
+ });
208
+ }
209
+ else {
210
+ newRepo.setRelatedQuery({
211
+ key: relationName,
212
+ pivot
213
+ });
214
+ }
215
+ return newRepo;
216
+ }
217
+ hasManyThrough() {
218
+ throw new Error('Method not implemented');
219
+ }
220
+ jsApplySelect(select, data) {
221
+ const _data = Array.isArray(data) ? [...data] : [data];
222
+ if (!select) {
223
+ return data;
224
+ }
225
+ const selectedAttributes = Object.keys(js_utils_1.Objects.flatten(select));
226
+ const iterationArray = this.outputKeys.length === 0 && selectedAttributes.length > 0
227
+ ? selectedAttributes
228
+ : [...this.outputKeys];
229
+ const compareArray = this.outputKeys.length === 0 && selectedAttributes.length > 0
230
+ ? [...this.outputKeys]
231
+ : selectedAttributes;
232
+ return _data.map(element => {
233
+ const newElement = {};
234
+ iterationArray.forEach(attribute => {
235
+ if (compareArray.length > 0 && !compareArray.includes(attribute)) {
236
+ return undefined;
237
+ }
238
+ const extract = js_utils_1.Objects.getFromPath(element, attribute, undefined);
239
+ let value = js_utils_1.Objects.get(() => extract.value, undefined);
240
+ if (typeof value !== 'undefined' && value !== null) {
241
+ if (typeof value === 'object' &&
242
+ value.hasOwnProperty('data') &&
243
+ value.data.hasOwnProperty('name')) {
244
+ newElement[extract.label] = value.data.name;
245
+ }
246
+ else {
247
+ if (typeof value === 'object' && js_utils_1.Ids.isValidObjectID(value)) {
248
+ value = js_utils_1.Ids.objectIdString(value);
249
+ }
250
+ newElement[extract.label] = value;
251
+ }
252
+ }
253
+ });
254
+ return js_utils_1.Objects.nest(newElement);
255
+ });
256
+ }
257
+ }
258
+ exports.BaseConnector = BaseConnector;
@@ -0,0 +1,7 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { AnyObject, Primitives } from './types';
3
+ import { Collection } from '@goatlab/js-utils';
4
+ export declare class Fluent {
5
+ static collect<T = AnyObject | Primitives>(data: T[]): Collection<T>;
6
+ static initialize(dataSources: DataSource[], Entities: any[]): Promise<void>;
7
+ }
package/dist/Fluent.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Fluent = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
5
+ const generatorDatasource_1 = require("./generatorDatasource");
6
+ class Fluent {
7
+ static collect(data) {
8
+ return new js_utils_1.Collection(data);
9
+ }
10
+ static async initialize(dataSources, Entities) {
11
+ generatorDatasource_1.modelGeneratorDataSource.setOptions({ entities: Entities });
12
+ if (!generatorDatasource_1.modelGeneratorDataSource.isInitialized) {
13
+ await generatorDatasource_1.modelGeneratorDataSource.initialize();
14
+ }
15
+ for (const dataSource of dataSources) {
16
+ if (!dataSource.isInitialized) {
17
+ await dataSource.initialize();
18
+ }
19
+ }
20
+ }
21
+ }
22
+ exports.Fluent = Fluent;
@@ -0,0 +1,17 @@
1
+ import { FindByIdFilter, FluentQuery, QueryOutput } from './types';
2
+ export interface FluentConnectorInterface<ModelDTO, InputDTO, OutputDTO> {
3
+ insert(data: InputDTO): Promise<OutputDTO>;
4
+ insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
5
+ findById<T extends FindByIdFilter<ModelDTO>>(id: string, q?: T): Promise<QueryOutput<T, ModelDTO> | null>;
6
+ findByIds<T extends FindByIdFilter<ModelDTO>>(ids: string[], q?: T): Promise<QueryOutput<T, ModelDTO>[]>;
7
+ findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
8
+ findFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO> | null>;
9
+ requireById(id: string, q?: FindByIdFilter<ModelDTO>): Promise<QueryOutput<FindByIdFilter<ModelDTO>, ModelDTO>>;
10
+ requireFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>>;
11
+ updateById(id: string, data: InputDTO): Promise<OutputDTO>;
12
+ replaceById(id: string, data: InputDTO): Promise<OutputDTO>;
13
+ deleteById(id: string): Promise<string>;
14
+ loadFirst(query?: FluentQuery<ModelDTO>): any;
15
+ loadById(id: string): any;
16
+ raw(): any;
17
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ export declare class FluentEntity {
2
+ type?: string;
3
+ roles?: string[];
4
+ created?: Date;
5
+ updated?: Date;
6
+ deleted?: Date;
7
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FluentEntity = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const decorators_1 = require("./decorators");
6
+ class FluentEntity {
7
+ }
8
+ tslib_1.__decorate([
9
+ decorators_1.f.property({ required: false }),
10
+ tslib_1.__metadata("design:type", String)
11
+ ], FluentEntity.prototype, "type", void 0);
12
+ tslib_1.__decorate([
13
+ decorators_1.f.stringArray(String, { required: false }),
14
+ tslib_1.__metadata("design:type", Array)
15
+ ], FluentEntity.prototype, "roles", void 0);
16
+ tslib_1.__decorate([
17
+ decorators_1.f.created(),
18
+ tslib_1.__metadata("design:type", Date)
19
+ ], FluentEntity.prototype, "created", void 0);
20
+ tslib_1.__decorate([
21
+ decorators_1.f.updated(),
22
+ tslib_1.__metadata("design:type", Date)
23
+ ], FluentEntity.prototype, "updated", void 0);
24
+ tslib_1.__decorate([
25
+ decorators_1.f.deleted(),
26
+ tslib_1.__metadata("design:type", Date)
27
+ ], FluentEntity.prototype, "deleted", void 0);
28
+ exports.FluentEntity = FluentEntity;
@@ -0,0 +1,38 @@
1
+ import { LoadedResult, QueryOutput } from './../types';
2
+ import { Repository, MongoRepository } from 'typeorm';
3
+ import { BaseConnector } from '../BaseConnector';
4
+ import { FluentConnectorInterface } from '../FluentConnectorInterface';
5
+ import type { AnyObject, FluentQuery } from '../types';
6
+ import { DataSource } from 'typeorm';
7
+ import { z } from 'zod';
8
+ export interface TypeOrmConnectorParams<Input, Output> {
9
+ entity: any;
10
+ dataSource: DataSource;
11
+ inputSchema: z.ZodType<Input>;
12
+ outputSchema?: z.ZodType<Output>;
13
+ }
14
+ export declare class TypeOrmConnector<ModelDTO = AnyObject, InputDTO = ModelDTO, OutputDTO = InputDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<ModelDTO, InputDTO, OutputDTO> {
15
+ private readonly repository;
16
+ private readonly dataSource;
17
+ private readonly inputSchema;
18
+ private readonly outputSchema;
19
+ private readonly entity;
20
+ constructor({ entity, dataSource, inputSchema, outputSchema }: TypeOrmConnectorParams<InputDTO, OutputDTO>);
21
+ insert(data: InputDTO): Promise<OutputDTO>;
22
+ insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
23
+ findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
24
+ updateById(id: string, data: InputDTO): Promise<OutputDTO>;
25
+ replaceById(id: string, data: InputDTO): Promise<OutputDTO>;
26
+ deleteById(id: string): Promise<string>;
27
+ clear(): Promise<boolean>;
28
+ loadFirst(query?: FluentQuery<ModelDTO>): LoadedResult<this>;
29
+ loadById(id: string): LoadedResult<this>;
30
+ raw(): Repository<ModelDTO>;
31
+ mongoRaw(): MongoRepository<ModelDTO>;
32
+ protected clone(): any;
33
+ private generateTypeOrmQuery;
34
+ private customTypeOrmRelatedFind;
35
+ private getTypeOrmQueryBuilderSelect;
36
+ private getTypeOrmQueryBuilderSubqueries;
37
+ private customMongoRelatedFind;
38
+ }