@goatlab/fluent 0.7.4 → 0.7.9

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 (273) hide show
  1. package/dist/{BaseConnector.d.ts → fluent/src/BaseConnector.d.ts} +8 -31
  2. package/dist/{BaseConnector.js → fluent/src/BaseConnector.js} +11 -104
  3. package/dist/{Fluent.d.ts → fluent/src/Fluent.d.ts} +0 -0
  4. package/dist/{Fluent.js → fluent/src/Fluent.js} +0 -0
  5. package/dist/fluent/src/FluentConnectorInterface.d.ts +17 -0
  6. package/dist/{core/Loopback/type.js → fluent/src/FluentConnectorInterface.js} +0 -0
  7. package/dist/{FluentEntity.d.ts → fluent/src/FluentEntity.d.ts} +0 -0
  8. package/dist/{FluentEntity.js → fluent/src/FluentEntity.js} +0 -0
  9. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/TypeOrmConnector.d.ts +8 -12
  10. package/dist/fluent/src/TypeOrmConnector/TypeOrmConnector.js +397 -0
  11. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +7 -0
  12. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +148 -0
  13. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +6 -0
  14. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +34 -0
  15. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +4 -0
  16. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +12 -0
  17. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +6 -0
  18. package/dist/fluent/src/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +166 -0
  19. package/dist/fluent/src/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +8 -0
  20. package/dist/fluent/src/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +200 -0
  21. package/dist/fluent/src/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +6 -0
  22. package/dist/fluent/src/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +207 -0
  23. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/advancedTestSuite.d.ts +0 -0
  24. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/advancedTestSuite.js +0 -0
  25. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.entity.d.ts +0 -0
  26. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.entity.js +0 -0
  27. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.mongo.repository.d.ts +0 -0
  28. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.mongo.repository.js +0 -0
  29. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.mysql.repository.d.ts +0 -0
  30. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.mysql.repository.js +0 -0
  31. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.repository.d.ts +0 -0
  32. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/advanced/typeOrm.repository.js +0 -0
  33. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/basicTestSuite.d.ts +0 -0
  34. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/basicTestSuite.js +0 -0
  35. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.entity.d.ts +3 -3
  36. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.entity.js +1 -1
  37. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.mongo.repository.d.ts +0 -0
  38. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.mongo.repository.js +0 -0
  39. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.mysql.repository.d.ts +0 -0
  40. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.mysql.repository.js +0 -0
  41. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.repository.d.ts +0 -0
  42. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/basic/goat.repository.js +0 -0
  43. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/dbEntities.d.ts +0 -0
  44. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/dbEntities.js +0 -0
  45. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/docker/docker.d.ts +1 -1
  46. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/docker/docker.js +3 -4
  47. package/dist/fluent/src/TypeOrmConnector/test/docker/mongo.d.ts +16 -0
  48. package/dist/fluent/src/TypeOrmConnector/test/docker/mongo.js +93 -0
  49. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/docker/mysql.d.ts +0 -0
  50. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/docker/mysql.js +1 -1
  51. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/flock.d.ts +0 -0
  52. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/flock.js +0 -0
  53. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/car.mongo.repository.d.ts +4 -2
  54. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/car.mongo.repository.js +6 -1
  55. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/mongoDatasource.d.ts +0 -0
  56. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/mongoDatasource.js +0 -0
  57. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/roles.mongo.repository.d.ts +3 -2
  58. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/roles.mongo.repository.js +3 -1
  59. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/roles_user.mongo.repository.d.ts +0 -0
  60. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/roles_user.mongo.repository.js +0 -0
  61. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/user.mongo.repository.d.ts +2 -2
  62. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mongo/user.mongo.repository.js +2 -1
  63. package/dist/fluent/src/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +10 -0
  64. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/car.mysql.repository.js +10 -1
  65. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/mysqlDataSource.d.ts +0 -0
  66. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/mysqlDataSource.js +1 -1
  67. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/roles.mysql.repository.d.ts +3 -2
  68. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/roles.mysql.repository.js +3 -1
  69. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/roles_user.mysql.repository.d.ts +0 -0
  70. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/roles_user.mysql.repository.js +0 -0
  71. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/user.mysql.repository.d.ts +2 -2
  72. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/mysql/user.mysql.repository.js +2 -1
  73. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/car/car.entity.d.ts +0 -1
  74. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/car/car.entity.js +0 -8
  75. package/dist/fluent/src/TypeOrmConnector/test/relations/car/car.output.schema.d.ts +511 -0
  76. package/dist/fluent/src/TypeOrmConnector/test/relations/car/car.output.schema.js +8 -0
  77. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/car/car.repositoryTypeOrm.d.ts +4 -2
  78. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/car/car.repositoryTypeOrm.js +6 -1
  79. package/dist/fluent/src/TypeOrmConnector/test/relations/car/car.schema.d.ts +15 -0
  80. package/dist/fluent/src/TypeOrmConnector/test/relations/car/car.schema.js +9 -0
  81. package/dist/fluent/src/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -0
  82. package/dist/fluent/src/TypeOrmConnector/test/relations/relationsTestsSuite.js +549 -0
  83. package/dist/fluent/src/TypeOrmConnector/test/relations/roles/role.output.schema.d.ts +152 -0
  84. package/dist/fluent/src/TypeOrmConnector/test/relations/roles/role.output.schema.js +14 -0
  85. package/dist/fluent/src/TypeOrmConnector/test/relations/roles/role.schema.d.ts +12 -0
  86. package/dist/fluent/src/TypeOrmConnector/test/relations/roles/role.schema.js +8 -0
  87. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles.entity.d.ts +0 -0
  88. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles.entity.js +0 -0
  89. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles.repositoryTypeOrm.d.ts +3 -2
  90. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles.repositoryTypeOrm.js +3 -1
  91. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_user.entity.d.ts +0 -0
  92. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_user.entity.js +0 -0
  93. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_user.schema.d.ts +0 -0
  94. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_user.schema.js +0 -0
  95. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +0 -0
  96. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/roles/roles_users.repositoryTypeOrm.js +0 -0
  97. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/user/user.entity.d.ts +0 -0
  98. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/user/user.entity.js +0 -0
  99. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/user/user.repositoryTypeOrm.d.ts +2 -2
  100. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/relations/user/user.repositoryTypeOrm.js +2 -1
  101. package/dist/fluent/src/TypeOrmConnector/test/relations/user/user.schema.d.ts +546 -0
  102. package/dist/fluent/src/TypeOrmConnector/test/relations/user/user.schema.js +67 -0
  103. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/sqlite/memoryDataSource.d.ts +0 -0
  104. package/dist/{TypeOrmConnector → fluent/src/TypeOrmConnector}/test/sqlite/memoryDataSource.js +0 -0
  105. package/dist/fluent/src/TypeOrmConnector/util/clearEmpties.d.ts +1 -0
  106. package/dist/fluent/src/TypeOrmConnector/util/clearEmpties.js +25 -0
  107. package/dist/fluent/src/TypeOrmConnector/util/extractConditions.d.ts +6 -0
  108. package/dist/fluent/src/TypeOrmConnector/util/extractConditions.js +80 -0
  109. package/dist/fluent/src/TypeOrmConnector/util/extractInclude.d.ts +2 -0
  110. package/dist/fluent/src/TypeOrmConnector/util/extractInclude.js +25 -0
  111. package/dist/fluent/src/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +12 -0
  112. package/dist/fluent/src/TypeOrmConnector/util/extractMetadataFromKeys.js +42 -0
  113. package/dist/fluent/src/TypeOrmConnector/util/extractOrderBy.d.ts +4 -0
  114. package/dist/fluent/src/TypeOrmConnector/util/extractOrderBy.js +18 -0
  115. package/dist/fluent/src/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +19 -0
  116. package/dist/fluent/src/TypeOrmConnector/util/getRelationsFromModelGenerator.js +26 -0
  117. package/dist/fluent/src/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +1 -0
  118. package/dist/fluent/src/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +20 -0
  119. package/dist/fluent/src/TypeOrmConnector/util/isAnyObject.d.ts +1 -0
  120. package/dist/fluent/src/TypeOrmConnector/util/isAnyObject.js +7 -0
  121. package/dist/fluent/src/TypeOrmConnector/util/nestQueryResults.d.ts +2 -0
  122. package/dist/fluent/src/TypeOrmConnector/util/nestQueryResults.js +31 -0
  123. package/dist/{cache.d.ts → fluent/src/cache.d.ts} +0 -0
  124. package/dist/{cache.js → fluent/src/cache.js} +0 -0
  125. package/dist/{core → fluent/src/core}/Loopback/build-schema.d.ts +0 -0
  126. package/dist/{core → fluent/src/core}/Loopback/build-schema.js +0 -0
  127. package/dist/{core → fluent/src/core}/Loopback/common-types.d.ts +0 -0
  128. package/dist/{core → fluent/src/core}/Loopback/common-types.js +0 -0
  129. package/dist/{core → fluent/src/core}/Loopback/json-to-schema.d.ts +0 -0
  130. package/dist/{core → fluent/src/core}/Loopback/json-to-schema.js +0 -0
  131. package/dist/{core → fluent/src/core}/Loopback/mapValues.d.ts +0 -0
  132. package/dist/{core → fluent/src/core}/Loopback/mapValues.js +0 -0
  133. package/dist/{core → fluent/src/core}/Loopback/metadata.d.ts +0 -0
  134. package/dist/{core → fluent/src/core}/Loopback/metadata.js +0 -0
  135. package/dist/{core → fluent/src/core}/Loopback/model.d.ts +0 -0
  136. package/dist/{core → fluent/src/core}/Loopback/model.js +0 -0
  137. package/dist/{core → fluent/src/core}/Loopback/query.d.ts +0 -0
  138. package/dist/{core → fluent/src/core}/Loopback/query.js +0 -0
  139. package/dist/{core → fluent/src/core}/Loopback/relation.types.d.ts +0 -0
  140. package/dist/{core → fluent/src/core}/Loopback/relation.types.js +0 -0
  141. package/dist/{core → fluent/src/core}/Loopback/type-resolver.d.ts +0 -0
  142. package/dist/{core → fluent/src/core}/Loopback/type-resolver.js +0 -0
  143. package/dist/{core → fluent/src/core}/Loopback/type.d.ts +0 -0
  144. package/dist/{core/Nestjs/types/interfaces/base-type-options.interface.js → fluent/src/core/Loopback/type.js} +0 -0
  145. package/dist/{core → fluent/src/core}/Nestjs/applyDecorators.d.ts +0 -0
  146. package/dist/{core → fluent/src/core}/Nestjs/applyDecorators.js +0 -0
  147. package/dist/{core → fluent/src/core}/Nestjs/types/common.d.ts +0 -0
  148. package/dist/{core → fluent/src/core}/Nestjs/types/common.js +0 -0
  149. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/api-hide-property.decorator.d.ts +0 -0
  150. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/api-hide-property.decorator.js +0 -0
  151. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/api-property.decorator.d.ts +0 -0
  152. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/api-property.decorator.js +0 -0
  153. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +0 -0
  154. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/apply-is-optional.decorator.js +0 -0
  155. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/args-type.decorator.d.ts +0 -0
  156. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/args-type.decorator.js +0 -0
  157. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/create-property.decorator.d.ts +0 -0
  158. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/create-property.decorator.js +0 -0
  159. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/directive.decorator.d.ts +0 -0
  160. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/directive.decorator.js +0 -0
  161. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/extensions.decorator.d.ts +0 -0
  162. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/extensions.decorator.js +0 -0
  163. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/field.decorator.d.ts +0 -0
  164. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/field.decorator.js +0 -0
  165. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/input-type.decorator.d.ts +0 -0
  166. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/input-type.decorator.js +0 -0
  167. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/interface-type.decorator.d.ts +0 -0
  168. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/interface-type.decorator.js +0 -0
  169. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/partial-type.helper.d.ts +0 -0
  170. package/dist/{core → fluent/src/core}/Nestjs/types/decorators/partial-type.helper.js +0 -0
  171. package/dist/{core → fluent/src/core}/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +0 -0
  172. package/dist/{core → fluent/src/core}/Nestjs/types/errors/cannot-determine-host-type.error.js +0 -0
  173. package/dist/{core → fluent/src/core}/Nestjs/types/errors/directive-parsing.error.d.ts +0 -0
  174. package/dist/{core → fluent/src/core}/Nestjs/types/errors/directive-parsing.error.js +0 -0
  175. package/dist/{core → fluent/src/core}/Nestjs/types/errors/unable-to-find-fields.error.d.ts +0 -0
  176. package/dist/{core → fluent/src/core}/Nestjs/types/errors/unable-to-find-fields.error.js +0 -0
  177. package/dist/{core → fluent/src/core}/Nestjs/types/errors/undefined-type.error.d.ts +0 -0
  178. package/dist/{core → fluent/src/core}/Nestjs/types/errors/undefined-type.error.js +0 -0
  179. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +0 -0
  180. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/add-class-type-metadata.util.js +0 -0
  181. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/base-type-options.interface.d.ts +0 -0
  182. package/dist/{core/Nestjs/types/interfaces/class-decorator-factory.interface.js → fluent/src/core/Nestjs/types/interfaces/base-type-options.interface.js} +0 -0
  183. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +0 -0
  184. package/dist/{core/Nestjs/types/interfaces/complexity.interface.js → fluent/src/core/Nestjs/types/interfaces/class-decorator-factory.interface.js} +0 -0
  185. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/complexity.interface.d.ts +0 -0
  186. package/dist/{core/Nestjs/types/interfaces/field-middleware.interface.js → fluent/src/core/Nestjs/types/interfaces/complexity.interface.js} +0 -0
  187. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/field-middleware.interface.d.ts +0 -0
  188. package/dist/{core/Nestjs/types/interfaces/open-api-spec.interface.js → fluent/src/core/Nestjs/types/interfaces/field-middleware.interface.js} +0 -0
  189. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/open-api-spec.interface.d.ts +0 -0
  190. package/dist/{core/Nestjs/types/interfaces/resolve-type-fn.interface.js → fluent/src/core/Nestjs/types/interfaces/open-api-spec.interface.js} +0 -0
  191. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +0 -0
  192. package/dist/{core/Nestjs/types/interfaces/return-type-func.interface.js → fluent/src/core/Nestjs/types/interfaces/resolve-type-fn.interface.js} +0 -0
  193. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/return-type-func.interface.d.ts +0 -0
  194. package/dist/{core/Nestjs/types/interfaces/schema-object-metadata.interface.js → fluent/src/core/Nestjs/types/interfaces/return-type-func.interface.js} +0 -0
  195. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +0 -0
  196. package/dist/{core/Nestjs/types/interfaces/type-options.interface.js → fluent/src/core/Nestjs/types/interfaces/schema-object-metadata.interface.js} +0 -0
  197. package/dist/{core → fluent/src/core}/Nestjs/types/interfaces/type-options.interface.d.ts +0 -0
  198. package/dist/{core/Nestjs/types/metadata/class.metadata.js → fluent/src/core/Nestjs/types/interfaces/type-options.interface.js} +0 -0
  199. package/dist/{core → fluent/src/core}/Nestjs/types/lazy-metadata.storage.d.ts +0 -0
  200. package/dist/{core → fluent/src/core}/Nestjs/types/lazy-metadata.storage.js +0 -0
  201. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/class.metadata.d.ts +0 -0
  202. package/dist/{core/Nestjs/types/metadata/directive.metadata.js → fluent/src/core/Nestjs/types/metadata/class.metadata.js} +0 -0
  203. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/directive.metadata.d.ts +0 -0
  204. package/dist/{core/Nestjs/types/metadata/enum.metadata.js → fluent/src/core/Nestjs/types/metadata/directive.metadata.js} +0 -0
  205. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/enum.metadata.d.ts +0 -0
  206. package/dist/{core/Nestjs/types/metadata/extensions.metadata.js → fluent/src/core/Nestjs/types/metadata/enum.metadata.js} +0 -0
  207. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/extensions.metadata.d.ts +0 -0
  208. package/dist/{core/Nestjs/types/metadata/interface.metadata.js → fluent/src/core/Nestjs/types/metadata/extensions.metadata.js} +0 -0
  209. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/index.d.ts +0 -0
  210. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/index.js +0 -0
  211. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/interface.metadata.d.ts +0 -0
  212. package/dist/{core/Nestjs/types/metadata/object-type.metadata.js → fluent/src/core/Nestjs/types/metadata/interface.metadata.js} +0 -0
  213. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/object-type.metadata.d.ts +0 -0
  214. package/dist/{core/Nestjs/types/metadata/param.metadata.js → fluent/src/core/Nestjs/types/metadata/object-type.metadata.js} +0 -0
  215. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/param.metadata.d.ts +0 -0
  216. package/dist/{core/Nestjs/types/metadata/property.metadata.js → fluent/src/core/Nestjs/types/metadata/param.metadata.js} +0 -0
  217. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/property.metadata.d.ts +0 -0
  218. package/dist/{core/Nestjs/types/metadata/resolver.metadata.js → fluent/src/core/Nestjs/types/metadata/property.metadata.js} +0 -0
  219. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/resolver.metadata.d.ts +0 -0
  220. package/dist/{core/Nestjs/types/metadata/union.metadata.js → fluent/src/core/Nestjs/types/metadata/resolver.metadata.js} +0 -0
  221. package/dist/{core → fluent/src/core}/Nestjs/types/metadata/union.metadata.d.ts +0 -0
  222. package/dist/fluent/src/core/Nestjs/types/metadata/union.metadata.js +2 -0
  223. package/dist/{core → fluent/src/core}/Nestjs/types/object-type.decorator.d.ts +0 -0
  224. package/dist/{core → fluent/src/core}/Nestjs/types/object-type.decorator.js +0 -0
  225. package/dist/{core → fluent/src/core}/Nestjs/types/omit-type.d.ts +0 -0
  226. package/dist/{core → fluent/src/core}/Nestjs/types/omit-type.js +0 -0
  227. package/dist/{core → fluent/src/core}/Nestjs/types/reflection.utils.d.ts +0 -0
  228. package/dist/{core → fluent/src/core}/Nestjs/types/reflection.utils.js +0 -0
  229. package/dist/{core → fluent/src/core}/Nestjs/types/set-metadata.decorator.d.ts +0 -0
  230. package/dist/{core → fluent/src/core}/Nestjs/types/set-metadata.decorator.js +0 -0
  231. package/dist/{core → fluent/src/core}/Nestjs/types/type-metadata.storage.d.ts +0 -0
  232. package/dist/{core → fluent/src/core}/Nestjs/types/type-metadata.storage.js +0 -0
  233. package/dist/{core → fluent/src/core}/Nestjs/types/utils/enum.utils.d.ts +0 -0
  234. package/dist/{core → fluent/src/core}/Nestjs/types/utils/enum.utils.js +0 -0
  235. package/dist/{core → fluent/src/core}/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +0 -0
  236. package/dist/{core → fluent/src/core}/Nestjs/types/utils/get-fields-and-decorator.util.js +0 -0
  237. package/dist/{core → fluent/src/core}/Nestjs/types/utils/mapped-types.utils.d.ts +0 -0
  238. package/dist/{core → fluent/src/core}/Nestjs/types/utils/mapped-types.utils.js +0 -0
  239. package/dist/{core → fluent/src/core}/Nestjs/types/utils/model-properties-accessor.d.ts +0 -0
  240. package/dist/{core → fluent/src/core}/Nestjs/types/utils/model-properties-accessor.js +0 -0
  241. package/dist/{core → fluent/src/core}/Nestjs/types/utils/type-helpers.utils.d.ts +0 -0
  242. package/dist/{core → fluent/src/core}/Nestjs/types/utils/type-helpers.utils.js +0 -0
  243. package/dist/{core → fluent/src/core}/types.d.ts +0 -0
  244. package/dist/{core → fluent/src/core}/types.js +0 -0
  245. package/dist/{decorators.d.ts → fluent/src/decorators.d.ts} +0 -0
  246. package/dist/{decorators.js → fluent/src/decorators.js} +0 -0
  247. package/dist/{generatorDatasource.d.ts → fluent/src/generatorDatasource.d.ts} +0 -0
  248. package/dist/{generatorDatasource.js → fluent/src/generatorDatasource.js} +0 -0
  249. package/dist/{index.d.ts → fluent/src/index.d.ts} +5 -4
  250. package/dist/{index.js → fluent/src/index.js} +2 -1
  251. package/dist/{loadRelations.d.ts → fluent/src/loadRelations.d.ts} +0 -0
  252. package/dist/{loadRelations.js → fluent/src/loadRelations.js} +8 -10
  253. package/dist/{outputKeys.d.ts → fluent/src/outputKeys.d.ts} +0 -0
  254. package/dist/{outputKeys.js → fluent/src/outputKeys.js} +0 -0
  255. package/dist/{types.d.ts → fluent/src/types.d.ts} +37 -20
  256. package/dist/{types.js → fluent/src/types.js} +0 -0
  257. package/dist/fluent-firebase/src/test/firebase.d.ts +16 -0
  258. package/dist/fluent-firebase/src/test/firebase.js +93 -0
  259. package/dist/tsconfig.tsbuildinfo +1 -1
  260. package/package.json +4 -3
  261. package/CHANGELOG.md +0 -1072
  262. package/dist/TypeOrmConnector/TypeOrmConnector.js +0 -760
  263. package/dist/TypeOrmConnector/test/mongo/mongo.memory.d.ts +0 -4
  264. package/dist/TypeOrmConnector/test/mongo/mongo.memory.js +0 -43
  265. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +0 -6
  266. package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +0 -38
  267. package/dist/TypeOrmConnector/test/relations/car/car.schema.js +0 -14
  268. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +0 -1
  269. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +0 -149
  270. package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +0 -35
  271. package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +0 -16
  272. package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +0 -150
  273. package/dist/TypeOrmConnector/test/relations/user/user.schema.js +0 -18
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
File without changes
File without changes
File without changes
@@ -1,22 +1,23 @@
1
1
  import { ApiHideProperty, ApiProperty, Column, HideField, InputType, ObjectType, OmitType, PartialType, getModelSchemaRef } from './core/types';
2
- import type { AnyObject, Deleted, PaginatedData, Paginator, Primitives, PrimitivesArray, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter, SingleQueryOutput } from './types';
2
+ import type { AnyObject, Deleted, PaginatedData, Paginator, Primitives, PrimitivesArray, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter } from './types';
3
3
  import { LogicOperator } from './types';
4
4
  import { BaseConnector } from './BaseConnector';
5
5
  import { Collection } from '@goatlab/js-utils';
6
6
  import { f } from './decorators';
7
7
  import { Fluent } from './Fluent';
8
- import type { FluentConnectorInterface } from './BaseConnector';
8
+ import type { FluentConnectorInterface } from './FluentConnectorInterface';
9
9
  import type { SchemaObject } from './core/types';
10
- import { getRelationsFromModelGenerator, TypeOrmConnector } from './TypeOrmConnector/TypeOrmConnector';
10
+ import { TypeOrmConnector } from './TypeOrmConnector/TypeOrmConnector';
11
11
  import { getOutputKeys } from './outputKeys';
12
12
  import { loadRelations } from './loadRelations';
13
13
  import { modelGeneratorDataSource } from './generatorDatasource';
14
14
  import { Cache } from './cache';
15
15
  import { ValidationError } from 'class-validator';
16
+ import { getRelationsFromModelGenerator } from './TypeOrmConnector/util/getRelationsFromModelGenerator';
16
17
  export { DataSource } from 'typeorm';
17
18
  export { ApiHideProperty, ApiProperty, BaseConnector, Collection, Column, f, Fluent, getModelSchemaRef, getOutputKeys, HideField, InputType, loadRelations, modelGeneratorDataSource, ObjectType, OmitType, PartialType, TypeOrmConnector, Cache, getRelationsFromModelGenerator, LogicOperator };
18
19
  interface ValidatedInput<T> {
19
20
  errors: ValidationError[] | null;
20
21
  result: Awaited<T>;
21
22
  }
22
- export type { AnyObject, Deleted, FluentConnectorInterface, PaginatedData, Paginator, Primitives, PrimitivesArray, SchemaObject, ValidatedInput, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter, SingleQueryOutput };
23
+ export type { AnyObject, Deleted, FluentConnectorInterface, PaginatedData, Paginator, Primitives, PrimitivesArray, SchemaObject, ValidatedInput, FluentQuery, QueryOutput, LoadedResult, FindByIdFilter };
@@ -22,7 +22,6 @@ Object.defineProperty(exports, "f", { enumerable: true, get: function () { retur
22
22
  const Fluent_1 = require("./Fluent");
23
23
  Object.defineProperty(exports, "Fluent", { enumerable: true, get: function () { return Fluent_1.Fluent; } });
24
24
  const TypeOrmConnector_1 = require("./TypeOrmConnector/TypeOrmConnector");
25
- Object.defineProperty(exports, "getRelationsFromModelGenerator", { enumerable: true, get: function () { return TypeOrmConnector_1.getRelationsFromModelGenerator; } });
26
25
  Object.defineProperty(exports, "TypeOrmConnector", { enumerable: true, get: function () { return TypeOrmConnector_1.TypeOrmConnector; } });
27
26
  const outputKeys_1 = require("./outputKeys");
28
27
  Object.defineProperty(exports, "getOutputKeys", { enumerable: true, get: function () { return outputKeys_1.getOutputKeys; } });
@@ -32,5 +31,7 @@ const generatorDatasource_1 = require("./generatorDatasource");
32
31
  Object.defineProperty(exports, "modelGeneratorDataSource", { enumerable: true, get: function () { return generatorDatasource_1.modelGeneratorDataSource; } });
33
32
  const cache_1 = require("./cache");
34
33
  Object.defineProperty(exports, "Cache", { enumerable: true, get: function () { return cache_1.Cache; } });
34
+ const getRelationsFromModelGenerator_1 = require("./TypeOrmConnector/util/getRelationsFromModelGenerator");
35
+ Object.defineProperty(exports, "getRelationsFromModelGenerator", { enumerable: true, get: function () { return getRelationsFromModelGenerator_1.getRelationsFromModelGenerator; } });
35
36
  var typeorm_1 = require("typeorm");
36
37
  Object.defineProperty(exports, "DataSource", { enumerable: true, get: function () { return typeorm_1.DataSource; } });
@@ -21,14 +21,13 @@ const loadRelations = async ({ data, relations, modelRelations, provider, self,
21
21
  const chunks = js_utils_1.Arrays.chunk(Array.from(ids), chunkSize);
22
22
  const promises = [];
23
23
  for (const relatedIds of chunks) {
24
- const results = await Repository.findMany({
24
+ promises.push(Repository.findMany({
25
25
  where: {
26
26
  [relationModel.inverseSidePropertyPath]: {
27
27
  in: relatedIds
28
28
  }
29
29
  }
30
- });
31
- promises.push(results);
30
+ }));
32
31
  }
33
32
  const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
34
33
  const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r[relationModel.inverseSidePropertyPath]);
@@ -45,14 +44,13 @@ const loadRelations = async ({ data, relations, modelRelations, provider, self,
45
44
  const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
46
45
  const promises = [];
47
46
  for (const relatedIds of chunks) {
48
- const results = await Repository.findMany({
47
+ promises.push(Repository.findMany({
49
48
  where: {
50
49
  id: {
51
50
  in: relatedIds
52
51
  }
53
52
  }
54
- });
55
- promises.push(results);
53
+ }));
56
54
  }
57
55
  const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
58
56
  const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
@@ -121,10 +119,10 @@ const loadRelations = async ({ data, relations, modelRelations, provider, self,
121
119
  if (!d[calleeKey]) {
122
120
  d[calleeKey] = [];
123
121
  }
124
- d[calleeKey] = [
125
- ...d[calleeKey],
126
- ...groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]]
127
- ];
122
+ const mapped = groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]];
123
+ if (mapped) {
124
+ d[calleeKey] = [...d[calleeKey], ...mapped];
125
+ }
128
126
  });
129
127
  });
130
128
  return data;
File without changes
@@ -1,15 +1,21 @@
1
1
  import { ObjectID } from 'bson';
2
2
  export interface AnyObject {
3
- id?: string;
4
- _id?: string;
5
3
  [key: string]: any;
6
4
  }
7
5
  declare type Unpacked<T> = T extends (infer U)[] ? U : T;
6
+ export declare type ExpandRecursively<T> = T extends (...args: infer A) => infer R ? (...args: ExpandRecursively<A>) => ExpandRecursively<R> : T extends object ? T extends infer O ? O extends any[] ? {
7
+ [K in keyof Unpacked<O>]: ExpandRecursively<Unpacked<O>[K]>;
8
+ }[] : {
9
+ [K in keyof O]: ExpandRecursively<O[K]>;
10
+ } : never : T;
8
11
  export declare type Concrete<Type> = {
9
12
  [Property in keyof Type]-?: Type[Property];
10
13
  };
14
+ export declare type Subset<T, U> = {
15
+ [key in keyof T]: key extends keyof U ? T[key] : never;
16
+ };
11
17
  export declare type QueryFieldSelector<T> = Partial<{
12
- [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Unpacked<Partial<QueryFieldSelector<Concrete<T>[K]>>> : boolean | undefined;
18
+ [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? true | Unpacked<Partial<QueryFieldSelector<Concrete<T>[K]>>> : true | undefined;
13
19
  }>;
14
20
  export declare type QueryOrderSelector<T> = Partial<{
15
21
  [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Partial<QueryOrderSelector<Concrete<T>[K]>> : 'asc' | 'desc' | undefined;
@@ -18,14 +24,16 @@ export declare type QueryOperations<T> = {
18
24
  [key in LogicOperator]: key extends LogicOperator.in ? T[] : key extends LogicOperator.notIn ? T[] : T;
19
25
  };
20
26
  export declare type QueryWhereFitler<T> = Partial<{
21
- [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Partial<QueryWhereFitler<Concrete<T>[K]>> : Partial<QueryOperations<Concrete<T>[K]>> | T[K];
27
+ [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Unpacked<Partial<QueryWhereFitler<Concrete<T>[K]>>> : Unpacked<Partial<QueryOperations<Concrete<T>[K]>>> | T[K];
22
28
  }>;
23
29
  export declare type QueryInsert<T> = {
24
30
  [K in keyof T]: T[K] extends object ? QueryInsert<T[K]> : T[K];
25
31
  };
26
32
  export declare type ModelRelation<T> = T;
27
33
  export declare type QueryIncludeRelation<T> = {
28
- [K in keyof Partial<T>]: FluentQuery<Unpacked<T[K]>> | boolean;
34
+ [K in keyof Partial<T>]: (FluentQuery<Unpacked<T[K]>> & {
35
+ withPivot?: true;
36
+ }) | true;
29
37
  };
30
38
  export declare type FluentQuery<T> = {
31
39
  select?: QueryFieldSelector<T>;
@@ -36,29 +44,38 @@ export declare type FluentQuery<T> = {
36
44
  orderBy?: QueryOrderSelector<T>[];
37
45
  limit?: number;
38
46
  offset?: number;
47
+ take?: number;
39
48
  include?: QueryIncludeRelation<T>;
40
49
  paginated?: Paginator;
41
50
  };
42
51
  export declare type AddUndefinedIfNullable<T> = T extends null | undefined ? undefined : never;
43
- export declare type GetSelectedFromObject<T extends FluentQuery<Model>, Model, OutputDTO> = {
44
- [P in keyof T['select']]: T['select'][P] extends object ? QueryOutput<{
45
- select: T['select'][P];
46
- }, NonNullable<Model[P]>, OutputDTO[P]> | AddUndefinedIfNullable<Model[P]> : OutputDTO[P];
52
+ export declare type GetSelectedFromInclude<T extends FluentQuery<Model>, Model> = {
53
+ [P in keyof T['include']]: T['include'][P] extends object ? NonNullable<Model[P]> extends any[] ? T['include'][P] extends {
54
+ withPivot: true;
55
+ } ? (QueryOutput<T['include'][P], Unpacked<NonNullable<Model[P]>>> & {
56
+ pivot: AnyObject;
57
+ })[] | AddUndefinedIfNullable<Model[P]> : (QueryOutput<T['include'][P], Unpacked<NonNullable<Model[P]>>> & {
58
+ pivot: AnyObject;
59
+ })[] | AddUndefinedIfNullable<Model[P]> : T['include'][P] extends {
60
+ withPivot: true;
61
+ } ? (QueryOutput<T['include'][P], Unpacked<NonNullable<Model[P]>>> & {
62
+ pivot: AnyObject;
63
+ }) | AddUndefinedIfNullable<Model[P]> : QueryOutput<T['include'][P], Unpacked<NonNullable<Model[P]>>> | AddUndefinedIfNullable<Model[P]> : Model[P];
47
64
  };
48
- export declare type QueryOutput<T extends FluentQuery<Model>, Model, OutputDTO> = T extends {
49
- select: T['select'];
50
- } ? T extends {
51
- paginated: T['paginated'];
52
- } ? PaginatedData<GetSelectedFromObject<T, Model, OutputDTO>> : GetSelectedFromObject<T, Model, OutputDTO>[] : T extends {
53
- paginated: T['paginated'];
54
- } ? PaginatedData<OutputDTO> : OutputDTO[];
55
- export declare type SingleQueryOutput<T extends FluentQuery<Model>, Model, OutputDTO> = T extends {
65
+ export declare type GetSelectedFromObject<T extends FluentQuery<Model>, Model> = {
66
+ [P in keyof T['select']]: T['select'][P] extends object ? NonNullable<Model[P]> extends any[] ? QueryOutput<{
67
+ select: T['select'][P];
68
+ }, Unpacked<NonNullable<Model[P]>>>[] | AddUndefinedIfNullable<Model[P]> : QueryOutput<{
69
+ select: T['select'][P];
70
+ }, Unpacked<NonNullable<Model[P]>>> | AddUndefinedIfNullable<Model[P]> : Model[P];
71
+ } & GetSelectedFromInclude<T, Model>;
72
+ export declare type QueryOutput<T extends FluentQuery<Model>, Model> = ExpandRecursively<T extends {
56
73
  select: T['select'];
57
74
  } ? T extends {
58
75
  paginated: T['paginated'];
59
- } ? PaginatedData<GetSelectedFromObject<T, Model, OutputDTO>> : GetSelectedFromObject<T, Model, OutputDTO> : T extends {
76
+ } ? PaginatedData<GetSelectedFromObject<T, Model>> : ExpandRecursively<GetSelectedFromObject<T, Model>> : T extends {
60
77
  paginated: T['paginated'];
61
- } ? PaginatedData<OutputDTO> : OutputDTO;
78
+ } ? PaginatedData<Model> : Model & GetSelectedFromInclude<T, Model>>;
62
79
  export interface PaginatedData<T> {
63
80
  currentPage: number;
64
81
  data: T[];
@@ -103,7 +120,7 @@ export declare enum LogicOperator {
103
120
  notExists = "notExists"
104
121
  }
105
122
  export declare type FluentHasManyRelatedAttribute<T> = Partial<{
106
- [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Unpacked<Partial<FluentHasManyRelatedAttribute<Concrete<T>[K]>>> | boolean : boolean | undefined;
123
+ [K in keyof Concrete<T>]: Concrete<T>[K] extends object ? Unpacked<Partial<FluentHasManyRelatedAttribute<Concrete<T>[K]>>> | true : true | undefined;
107
124
  }>;
108
125
  export declare type FluentHasManyParams<T extends FluentHasManyParams<T>> = {
109
126
  repository: new () => InstanceType<T['repository']>;
File without changes
@@ -0,0 +1,16 @@
1
+ import { Options as WithContainerOptions } from '@goatlab/fluent/src/TypeOrmConnector/test/docker/docker';
2
+ export interface Options extends Omit<WithContainerOptions, 'internalPort' | 'enableDebugInstructions' | 'testConnection'> {
3
+ mongoUser: string;
4
+ mongoPassword: string;
5
+ mongoDb: string;
6
+ }
7
+ export declare function waitForConnection(databaseURL: string, timeoutSeconds: number): Promise<void>;
8
+ export default function getDatabase(options?: Partial<Options>): Promise<{
9
+ proc: any;
10
+ databaseURL: string;
11
+ kill: () => Promise<void>;
12
+ user: string;
13
+ password: string;
14
+ port: number;
15
+ dbName: string;
16
+ }>;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForConnection = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const docker_1 = tslib_1.__importDefault(require("@goatlab/fluent/src/TypeOrmConnector/test/docker/docker"));
6
+ const mongodb_1 = require("mongodb");
7
+ const DEFAULT_IMAGE = 'mongo:6.0.1';
8
+ const DEFAULT_CONTAINER_NAME = `fluent-${DEFAULT_IMAGE.replace(':', '-')}-test`;
9
+ const DEFAULT_CONNECT_TIMEOUT_SECONDS = 10;
10
+ const DEFAULT_MONGO_PORT = 27017;
11
+ const DEFAULT_MONGO_USER = 'test-user';
12
+ const DEFAULT_MONGO_PASSWORD = 'password';
13
+ const DEFAULT_MONGO_DB = 'test-db';
14
+ const DEFAULT_MONGO_DEBUG = false;
15
+ async function waitForConnection(databaseURL, timeoutSeconds) {
16
+ const start = Date.now();
17
+ const timeoutMilliseconds = timeoutSeconds * 1000;
18
+ let lastAttempt = false;
19
+ while (true) {
20
+ await new Promise(resolve => setTimeout(resolve, 1000));
21
+ const conn = new mongodb_1.MongoClient(databaseURL);
22
+ try {
23
+ try {
24
+ await conn.connect();
25
+ const db = conn.db('anyDB');
26
+ const result = await db.command({
27
+ ping: 1
28
+ });
29
+ if (result.ok) {
30
+ break;
31
+ }
32
+ else {
33
+ if (lastAttempt) {
34
+ throw new Error('Got unexpected result: ' + JSON.stringify(result));
35
+ }
36
+ }
37
+ }
38
+ catch (ex) {
39
+ console.log(ex);
40
+ if (lastAttempt) {
41
+ throw ex;
42
+ }
43
+ }
44
+ }
45
+ finally {
46
+ await conn.close();
47
+ }
48
+ if (Date.now() - timeoutMilliseconds > start) {
49
+ lastAttempt = true;
50
+ }
51
+ }
52
+ }
53
+ exports.waitForConnection = waitForConnection;
54
+ async function getDatabase(options = {}) {
55
+ const { mongoUser, mongoPassword, mongoDb, environment, ...rawOptions } = {
56
+ debug: DEFAULT_MONGO_DEBUG,
57
+ image: DEFAULT_IMAGE,
58
+ containerName: DEFAULT_CONTAINER_NAME,
59
+ connectTimeoutSeconds: DEFAULT_CONNECT_TIMEOUT_SECONDS,
60
+ mongoUser: DEFAULT_MONGO_USER,
61
+ mongoPassword: DEFAULT_MONGO_PASSWORD,
62
+ mongoDb: DEFAULT_MONGO_DB,
63
+ defaultExternalPort: DEFAULT_MONGO_PORT,
64
+ ...options
65
+ };
66
+ const { proc, externalPort, kill } = await (0, docker_1.default)({
67
+ ...rawOptions,
68
+ internalPort: DEFAULT_MONGO_PORT,
69
+ environment: {
70
+ MONGO_HOST: '127.0.0.1',
71
+ ...environment,
72
+ MONGO_INITDB_ROOT_USERNAME: mongoUser,
73
+ MONGO_INITDB_ROOT_PASSWORD: mongoPassword,
74
+ MONGO_DB_USER: mongoUser,
75
+ MONGO_DB_PASSWORD: mongoPassword,
76
+ MONGO_PASSWORD: mongoPassword,
77
+ MONGO_INITDB_DATABASE: mongoDb
78
+ },
79
+ enableDebugInstructions: `To view logs, run with MONGO_TEST_DEBUG=true environment variable.`
80
+ });
81
+ const databaseURL = `mongodb://${mongoUser}:${mongoPassword}@localhost:${externalPort}`;
82
+ await waitForConnection(databaseURL, rawOptions.connectTimeoutSeconds);
83
+ return {
84
+ proc,
85
+ databaseURL,
86
+ kill,
87
+ user: mongoUser,
88
+ password: mongoPassword,
89
+ port: externalPort,
90
+ dbName: mongoDb
91
+ };
92
+ }
93
+ exports.default = getDatabase;