@goatlab/fluent 0.7.21 → 0.7.24

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 +2 -2
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterTemplate = exports.FilterBuilder = exports.WhereBuilder = exports.isFilter = void 0;
4
+ const nonWhereFields = ['fields', 'order', 'limit', 'skip', 'offset', 'include'];
5
+ const filterFields = ['where', ...nonWhereFields];
6
+ function isFilter(candidate) {
7
+ if (typeof candidate !== 'object')
8
+ return false;
9
+ for (const key in candidate) {
10
+ if (!filterFields.includes(key)) {
11
+ return false;
12
+ }
13
+ }
14
+ return true;
15
+ }
16
+ exports.isFilter = isFilter;
17
+ class WhereBuilder {
18
+ constructor(w) {
19
+ this.where = w ?? {};
20
+ }
21
+ add(w) {
22
+ for (const k of Object.keys(w)) {
23
+ if (k in this.where) {
24
+ const where = { and: [this.where, w] };
25
+ this.where = where;
26
+ return this;
27
+ }
28
+ }
29
+ this.where = Object.assign(this.where, w);
30
+ return this;
31
+ }
32
+ cast(clause) {
33
+ return clause;
34
+ }
35
+ and(...w) {
36
+ let clauses = [];
37
+ w.forEach(where => {
38
+ clauses = clauses.concat(Array.isArray(where) ? where : [where]);
39
+ });
40
+ return this.add({ and: clauses });
41
+ }
42
+ or(...w) {
43
+ let clauses = [];
44
+ w.forEach(where => {
45
+ clauses = clauses.concat(Array.isArray(where) ? where : [where]);
46
+ });
47
+ return this.add({ or: clauses });
48
+ }
49
+ eq(key, val) {
50
+ const w = {};
51
+ w[key] = val;
52
+ return this.add(w);
53
+ }
54
+ neq(key, val) {
55
+ const w = {};
56
+ w[key] = { neq: val };
57
+ return this.add(w);
58
+ }
59
+ gt(key, val) {
60
+ const w = {};
61
+ w[key] = { gt: val };
62
+ return this.add(w);
63
+ }
64
+ gte(key, val) {
65
+ const w = {};
66
+ w[key] = { gte: val };
67
+ return this.add(w);
68
+ }
69
+ lt(key, val) {
70
+ const w = {};
71
+ w[key] = { lt: val };
72
+ return this.add(w);
73
+ }
74
+ lte(key, val) {
75
+ const w = {};
76
+ w[key] = { lte: val };
77
+ return this.add(w);
78
+ }
79
+ inq(key, val) {
80
+ const w = {};
81
+ w[key] = { inq: val };
82
+ return this.add(w);
83
+ }
84
+ nin(key, val) {
85
+ const w = {};
86
+ w[key] = { nin: val };
87
+ return this.add(w);
88
+ }
89
+ between(key, val1, val2) {
90
+ const w = {};
91
+ w[key] = { between: [val1, val2] };
92
+ return this.add(w);
93
+ }
94
+ exists(key, val) {
95
+ const w = {};
96
+ w[key] = { exists: !!val || val == null };
97
+ return this.add(w);
98
+ }
99
+ impose(where) {
100
+ if (!this.where) {
101
+ this.where = where || {};
102
+ }
103
+ else {
104
+ this.add(where);
105
+ }
106
+ return this;
107
+ }
108
+ like(key, val) {
109
+ const w = {};
110
+ w[key] = { like: val };
111
+ return this.add(w);
112
+ }
113
+ nlike(key, val) {
114
+ const w = {};
115
+ w[key] = { nlike: val };
116
+ return this.add(w);
117
+ }
118
+ ilike(key, val) {
119
+ const w = {};
120
+ w[key] = { ilike: val };
121
+ return this.add(w);
122
+ }
123
+ nilike(key, val) {
124
+ const w = {};
125
+ w[key] = { nilike: val };
126
+ return this.add(w);
127
+ }
128
+ regexp(key, val) {
129
+ const w = {};
130
+ w[key] = { regexp: val };
131
+ return this.add(w);
132
+ }
133
+ build() {
134
+ return this.where;
135
+ }
136
+ }
137
+ exports.WhereBuilder = WhereBuilder;
138
+ class FilterBuilder {
139
+ constructor(f) {
140
+ this.filter = f ?? {};
141
+ }
142
+ limit(limit) {
143
+ if (!(limit >= 1)) {
144
+ throw new Error(`Limit ${limit} must a positive number`);
145
+ }
146
+ this.filter.limit = limit;
147
+ return this;
148
+ }
149
+ offset(offset) {
150
+ this.filter.offset = offset;
151
+ return this;
152
+ }
153
+ skip(skip) {
154
+ return this.offset(skip);
155
+ }
156
+ fields(...f) {
157
+ if (!this.filter.fields) {
158
+ this.filter.fields = {};
159
+ }
160
+ else if (Array.isArray(this.filter.fields)) {
161
+ this.filter.fields = this.filter.fields.reduce((prev, current) => ({ ...prev, [current]: true }), {});
162
+ }
163
+ const { fields } = this.filter;
164
+ for (const field of f) {
165
+ if (Array.isArray(field)) {
166
+ field.forEach(i => (fields[i] = true));
167
+ }
168
+ else if (typeof field === 'string') {
169
+ fields[field] = true;
170
+ }
171
+ else {
172
+ Object.assign(fields, field);
173
+ }
174
+ }
175
+ return this;
176
+ }
177
+ validateOrder(order) {
178
+ if (!(order.match(/^[^\s]+( (ASC|DESC))?$/))) {
179
+ throw new Error(`Invalid order: ${order}`);
180
+ }
181
+ }
182
+ order(...o) {
183
+ if (!this.filter.order) {
184
+ this.filter.order = [];
185
+ }
186
+ o.forEach(order => {
187
+ if (typeof order === 'string') {
188
+ this.validateOrder(order);
189
+ if (!order.endsWith(' ASC') && !order.endsWith(' DESC')) {
190
+ order += ' ASC';
191
+ }
192
+ this.filter.order.push(order);
193
+ return this;
194
+ }
195
+ if (Array.isArray(order)) {
196
+ order.forEach(this.validateOrder);
197
+ order = order.map(i => {
198
+ if (!i.endsWith(' ASC') && !i.endsWith(' DESC')) {
199
+ i += ' ASC';
200
+ }
201
+ return i;
202
+ });
203
+ this.filter.order = this.filter.order.concat(order);
204
+ return this;
205
+ }
206
+ for (const i in order) {
207
+ this.filter.order.push(`${i} ${order[i]}`);
208
+ }
209
+ });
210
+ return this;
211
+ }
212
+ include(...i) {
213
+ if (this.filter.include == null) {
214
+ this.filter.include = [];
215
+ }
216
+ for (const include of i) {
217
+ if (typeof include === 'string') {
218
+ this.filter.include.push({ relation: include });
219
+ }
220
+ else if (Array.isArray(include)) {
221
+ for (const inc of include)
222
+ this.filter.include.push({ relation: inc });
223
+ }
224
+ else {
225
+ this.filter.include.push(include);
226
+ }
227
+ }
228
+ return this;
229
+ }
230
+ where(w) {
231
+ this.filter.where = w;
232
+ return this;
233
+ }
234
+ impose(constraint) {
235
+ if (!this.filter) {
236
+ if (!isFilter(constraint)) {
237
+ constraint = { where: constraint };
238
+ }
239
+ this.filter = constraint || {};
240
+ }
241
+ else {
242
+ if (isFilter(constraint)) {
243
+ for (const key of Object.keys(constraint)) {
244
+ if (nonWhereFields.includes(key)) {
245
+ throw new Error('merging strategy for selection, pagination, and sorting not implemented');
246
+ }
247
+ }
248
+ }
249
+ this.filter.where = isFilter(constraint)
250
+ ? new WhereBuilder(this.filter.where).impose(constraint.where).build()
251
+ : new WhereBuilder(this.filter.where).impose(constraint).build();
252
+ }
253
+ return this;
254
+ }
255
+ build() {
256
+ return this.filter;
257
+ }
258
+ }
259
+ exports.FilterBuilder = FilterBuilder;
260
+ function getDeepProperty(value, path) {
261
+ const props = path.split('.');
262
+ for (const p of props) {
263
+ value = value[p];
264
+ if (value == null) {
265
+ return null;
266
+ }
267
+ }
268
+ return value;
269
+ }
270
+ function filterTemplate(strings, ...keys) {
271
+ return function filter(ctx) {
272
+ const tokens = [strings[0]];
273
+ keys.forEach((key, i) => {
274
+ if (typeof key === 'object' ||
275
+ typeof key === 'boolean' ||
276
+ typeof key === 'number') {
277
+ tokens.push(JSON.stringify(key), strings[i + 1]);
278
+ return;
279
+ }
280
+ const value = getDeepProperty(ctx, key);
281
+ tokens.push(JSON.stringify(value), strings[i + 1]);
282
+ });
283
+ const result = tokens.join('');
284
+ try {
285
+ return JSON.parse(result);
286
+ }
287
+ catch (e) {
288
+ throw new Error(`Invalid JSON: ${result}`);
289
+ }
290
+ };
291
+ }
292
+ exports.filterTemplate = filterTemplate;
@@ -0,0 +1,45 @@
1
+ import { InclusionFilter } from './query';
2
+ import { Options } from './common-types';
3
+ import { Entity } from './model';
4
+ import { TypeResolver } from './type-resolver';
5
+ export declare enum RelationType {
6
+ belongsTo = "belongsTo",
7
+ hasOne = "hasOne",
8
+ hasMany = "hasMany",
9
+ embedsOne = "embedsOne",
10
+ embedsMany = "embedsMany",
11
+ referencesOne = "referencesOne",
12
+ referencesMany = "referencesMany"
13
+ }
14
+ export interface RelationDefinitionBase {
15
+ type: RelationType;
16
+ targetsMany: boolean;
17
+ name: string;
18
+ source: typeof Entity;
19
+ target: TypeResolver<Entity, typeof Entity>;
20
+ }
21
+ export interface HasManyDefinition extends RelationDefinitionBase {
22
+ type: RelationType.hasMany;
23
+ targetsMany: true;
24
+ keyTo?: string;
25
+ keyFrom?: string;
26
+ through?: {
27
+ model: TypeResolver<Entity, typeof Entity>;
28
+ keyFrom?: string;
29
+ keyTo?: string;
30
+ };
31
+ }
32
+ export interface BelongsToDefinition extends RelationDefinitionBase {
33
+ type: RelationType.belongsTo;
34
+ targetsMany: false;
35
+ keyFrom?: string;
36
+ keyTo?: string;
37
+ }
38
+ export interface HasOneDefinition extends RelationDefinitionBase {
39
+ type: RelationType.hasOne;
40
+ targetsMany: false;
41
+ keyTo?: string;
42
+ keyFrom?: string;
43
+ }
44
+ export declare type RelationMetadata = HasManyDefinition | BelongsToDefinition | HasOneDefinition | RelationDefinitionBase;
45
+ export declare type InclusionResolver<S extends Entity, T extends Entity> = (sourceEntities: S[], inclusion: InclusionFilter, options?: Options) => Promise<(T | undefined)[] | (T[] | undefined)[]>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelationType = void 0;
4
+ var RelationType;
5
+ (function (RelationType) {
6
+ RelationType["belongsTo"] = "belongsTo";
7
+ RelationType["hasOne"] = "hasOne";
8
+ RelationType["hasMany"] = "hasMany";
9
+ RelationType["embedsOne"] = "embedsOne";
10
+ RelationType["embedsMany"] = "embedsMany";
11
+ RelationType["referencesOne"] = "referencesOne";
12
+ RelationType["referencesMany"] = "referencesMany";
13
+ })(RelationType = exports.RelationType || (exports.RelationType = {}));
@@ -0,0 +1,7 @@
1
+ import { Class } from './common-types';
2
+ export declare type TypeResolver<Type extends Object, StaticMembers = Function> = () => Class<Type> & StaticMembers;
3
+ export declare function isTypeResolver<T extends object>(fn: any): fn is TypeResolver<T>;
4
+ export declare function Null(): null;
5
+ export declare function isBuiltinType(fn: Function): boolean;
6
+ export declare function resolveType<T extends Object>(fn: TypeResolver<T> | Class<T>): Class<T>;
7
+ export declare function resolveType<T>(fn: T): T;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveType = exports.isBuiltinType = exports.Null = exports.isTypeResolver = void 0;
4
+ function isTypeResolver(fn) {
5
+ if (typeof fn !== 'function')
6
+ return false;
7
+ if (/^class/.test(fn.toString()))
8
+ return false;
9
+ if (isBuiltinType(fn))
10
+ return false;
11
+ return true;
12
+ }
13
+ exports.isTypeResolver = isTypeResolver;
14
+ function Null() {
15
+ return null;
16
+ }
17
+ exports.Null = Null;
18
+ function isBuiltinType(fn) {
19
+ return (fn === Number ||
20
+ fn === Boolean ||
21
+ fn === String ||
22
+ fn === Object ||
23
+ fn === Array ||
24
+ fn === Date ||
25
+ fn === RegExp ||
26
+ fn === Buffer ||
27
+ fn === Null ||
28
+ fn === Function);
29
+ }
30
+ exports.isBuiltinType = isBuiltinType;
31
+ function resolveType(fn) {
32
+ return isTypeResolver(fn) ? fn() : fn;
33
+ }
34
+ exports.resolveType = resolveType;
@@ -0,0 +1,9 @@
1
+ import { Options } from './common-types';
2
+ export interface Type<T> {
3
+ name: string;
4
+ isInstance(value: any): boolean;
5
+ defaultValue(): T | null | undefined;
6
+ isCoercible(value: any, options?: Options): boolean;
7
+ coerce(value: any, options?: Options): T | null | undefined;
8
+ serialize(value: T | null | undefined, options?: Options): any;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare function applyDecorators(...decorators: Array<ClassDecorator | MethodDecorator | PropertyDecorator>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyDecorators = void 0;
4
+ function applyDecorators(...decorators) {
5
+ return (target, propertyKey, descriptor) => {
6
+ for (const decorator of decorators) {
7
+ if (target instanceof Function && !descriptor) {
8
+ ;
9
+ decorator(target);
10
+ continue;
11
+ }
12
+ ;
13
+ decorator(target, propertyKey, descriptor);
14
+ }
15
+ };
16
+ }
17
+ exports.applyDecorators = applyDecorators;
@@ -0,0 +1,16 @@
1
+ export declare const isString: (fn: any) => fn is string;
2
+ export declare enum ClassType {
3
+ ARGS = "args",
4
+ OBJECT = "objectType",
5
+ INPUT = "inputType",
6
+ INTERFACE = "interface"
7
+ }
8
+ export interface Type<T = any> extends Function {
9
+ new (...args: any[]): T;
10
+ }
11
+ export declare function flatten<T extends Array<unknown> = any>(arr: T): T extends Array<infer R> ? R : never;
12
+ export declare const isUndefined: (obj: any) => obj is undefined;
13
+ export declare const isFunction: (fn: any) => boolean;
14
+ export declare type TargetHost = Record<'target', Function>;
15
+ export declare function isTargetEqual<T extends TargetHost, U extends TargetHost>(a: T, b: U): boolean;
16
+ export declare function isThrowing(func: () => unknown): boolean;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isThrowing = exports.isTargetEqual = exports.isFunction = exports.isUndefined = exports.flatten = exports.ClassType = exports.isString = void 0;
4
+ const isString = (fn) => typeof fn === 'string';
5
+ exports.isString = isString;
6
+ var ClassType;
7
+ (function (ClassType) {
8
+ ClassType["ARGS"] = "args";
9
+ ClassType["OBJECT"] = "objectType";
10
+ ClassType["INPUT"] = "inputType";
11
+ ClassType["INTERFACE"] = "interface";
12
+ })(ClassType = exports.ClassType || (exports.ClassType = {}));
13
+ function flatten(arr) {
14
+ const flat = [].concat(...arr);
15
+ return (flat.some(Array.isArray)
16
+ ? flatten(flat)
17
+ : flat);
18
+ }
19
+ exports.flatten = flatten;
20
+ const isUndefined = (obj) => typeof obj === 'undefined';
21
+ exports.isUndefined = isUndefined;
22
+ const isFunction = (fn) => typeof fn === 'function';
23
+ exports.isFunction = isFunction;
24
+ function isTargetEqual(a, b) {
25
+ return a.target === b.target;
26
+ }
27
+ exports.isTargetEqual = isTargetEqual;
28
+ function isThrowing(func) {
29
+ try {
30
+ func();
31
+ return false;
32
+ }
33
+ catch {
34
+ return true;
35
+ }
36
+ }
37
+ exports.isThrowing = isThrowing;
@@ -0,0 +1 @@
1
+ export declare function ApiHideProperty(): PropertyDecorator;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiHideProperty = void 0;
4
+ function ApiHideProperty() {
5
+ return (target, propertyKey) => { };
6
+ }
7
+ exports.ApiHideProperty = ApiHideProperty;
@@ -0,0 +1,27 @@
1
+ import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface';
2
+ export declare const DECORATORS_PREFIX = "swagger";
3
+ export declare const DECORATORS: {
4
+ API_OPERATION: string;
5
+ API_RESPONSE: string;
6
+ API_PRODUCES: string;
7
+ API_CONSUMES: string;
8
+ API_TAGS: string;
9
+ API_PARAMETERS: string;
10
+ API_HEADERS: string;
11
+ API_MODEL_PROPERTIES: string;
12
+ API_MODEL_PROPERTIES_ARRAY: string;
13
+ API_SECURITY: string;
14
+ API_EXCLUDE_ENDPOINT: string;
15
+ API_EXCLUDE_CONTROLLER: string;
16
+ API_EXTRA_MODELS: string;
17
+ API_EXTENSION: string;
18
+ };
19
+ export interface ApiPropertyOptions extends Omit<SchemaObjectMetadata, 'name' | 'enum'> {
20
+ name?: string;
21
+ enum?: any[] | Record<string, any>;
22
+ enumName?: string;
23
+ }
24
+ export declare function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator;
25
+ export declare function createApiPropertyDecorator(options?: ApiPropertyOptions, overrideExisting?: boolean): PropertyDecorator;
26
+ export declare function ApiPropertyOptional(options?: ApiPropertyOptions): PropertyDecorator;
27
+ export declare function ApiResponseProperty(options?: Pick<ApiPropertyOptions, 'type' | 'example' | 'format' | 'enum' | 'deprecated'>): PropertyDecorator;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiResponseProperty = exports.ApiPropertyOptional = exports.createApiPropertyDecorator = exports.ApiProperty = exports.DECORATORS = exports.DECORATORS_PREFIX = void 0;
4
+ const enum_utils_1 = require("../utils/enum.utils");
5
+ const create_property_decorator_1 = require("./create-property.decorator");
6
+ exports.DECORATORS_PREFIX = 'swagger';
7
+ exports.DECORATORS = {
8
+ API_OPERATION: `${exports.DECORATORS_PREFIX}/apiOperation`,
9
+ API_RESPONSE: `${exports.DECORATORS_PREFIX}/apiResponse`,
10
+ API_PRODUCES: `${exports.DECORATORS_PREFIX}/apiProduces`,
11
+ API_CONSUMES: `${exports.DECORATORS_PREFIX}/apiConsumes`,
12
+ API_TAGS: `${exports.DECORATORS_PREFIX}/apiUseTags`,
13
+ API_PARAMETERS: `${exports.DECORATORS_PREFIX}/apiParameters`,
14
+ API_HEADERS: `${exports.DECORATORS_PREFIX}/apiHeaders`,
15
+ API_MODEL_PROPERTIES: `${exports.DECORATORS_PREFIX}/apiModelProperties`,
16
+ API_MODEL_PROPERTIES_ARRAY: `${exports.DECORATORS_PREFIX}/apiModelPropertiesArray`,
17
+ API_SECURITY: `${exports.DECORATORS_PREFIX}/apiSecurity`,
18
+ API_EXCLUDE_ENDPOINT: `${exports.DECORATORS_PREFIX}/apiExcludeEndpoint`,
19
+ API_EXCLUDE_CONTROLLER: `${exports.DECORATORS_PREFIX}/apiExcludeController`,
20
+ API_EXTRA_MODELS: `${exports.DECORATORS_PREFIX}/apiExtraModels`,
21
+ API_EXTENSION: `${exports.DECORATORS_PREFIX}/apiExtension`
22
+ };
23
+ const isEnumArray = (obj) => obj.isArray && !!obj.enum;
24
+ function ApiProperty(options = {}) {
25
+ return createApiPropertyDecorator(options);
26
+ }
27
+ exports.ApiProperty = ApiProperty;
28
+ function createApiPropertyDecorator(options = {}, overrideExisting = true) {
29
+ const [type, isArray] = (0, create_property_decorator_1.getTypeIsArrayTuple)(options.type, options.isArray);
30
+ options = {
31
+ ...options,
32
+ type,
33
+ isArray
34
+ };
35
+ if (isEnumArray(options)) {
36
+ options.type = 'array';
37
+ const enumValues = (0, enum_utils_1.getEnumValues)(options.enum);
38
+ options.items = {
39
+ type: (0, enum_utils_1.getEnumType)(enumValues),
40
+ enum: enumValues
41
+ };
42
+ delete options.enum;
43
+ }
44
+ else if (options.enum) {
45
+ const enumValues = (0, enum_utils_1.getEnumValues)(options.enum);
46
+ options.enum = enumValues;
47
+ options.type = (0, enum_utils_1.getEnumType)(enumValues);
48
+ }
49
+ return (0, create_property_decorator_1.createPropertyDecorator)(exports.DECORATORS.API_MODEL_PROPERTIES, options, overrideExisting);
50
+ }
51
+ exports.createApiPropertyDecorator = createApiPropertyDecorator;
52
+ function ApiPropertyOptional(options = {}) {
53
+ return ApiProperty({
54
+ ...options,
55
+ required: false
56
+ });
57
+ }
58
+ exports.ApiPropertyOptional = ApiPropertyOptional;
59
+ function ApiResponseProperty(options = {}) {
60
+ return ApiProperty({
61
+ readOnly: true,
62
+ ...options
63
+ });
64
+ }
65
+ exports.ApiResponseProperty = ApiResponseProperty;
@@ -0,0 +1,5 @@
1
+ import { Type } from '../common';
2
+ export declare function applyIsOptionalDecorator(targetClass: Function, propertyKey: string): void;
3
+ export declare function inheritValidationMetadata(parentClass: Type<any>, targetClass: Function, isPropertyInherited?: (key: string) => boolean): string[] | undefined;
4
+ export declare function inheritTransformationMetadata(parentClass: Type<any>, targetClass: Function, isPropertyInherited?: (key: string) => boolean): void;
5
+ export declare function inheritPropertyInitializers(target: Record<string, any>, sourceClass: Type<any>, isPropertyInherited?: (key: string) => boolean): void;