@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,333 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelToJsonSchema = exports.getNavigationalPropertyForRelation = exports.metaToJsonProperty = exports.isArrayType = exports.stringTypeToWrapper = exports.getJsonSchemaRef = exports.getJsonSchema = exports.buildModelCacheKey = exports.JSON_SCHEMA_KEY = void 0;
4
+ const metadata_1 = require("@loopback/metadata");
5
+ const util_1 = require("util");
6
+ const type_resolver_1 = require("./type-resolver");
7
+ const metadata_2 = require("./metadata");
8
+ exports.JSON_SCHEMA_KEY = metadata_1.MetadataAccessor.create('loopback:json-schema');
9
+ const debug = console.log;
10
+ function buildModelCacheKey(options = {}) {
11
+ if (Object.keys(options).length === 0) {
12
+ return 'modelOnly';
13
+ }
14
+ return `model${options.title ?? ''}${getTitleSuffix(options)}`;
15
+ }
16
+ exports.buildModelCacheKey = buildModelCacheKey;
17
+ function getJsonSchema(ctor, options) {
18
+ const cached = metadata_1.MetadataInspector.getClassMetadata(exports.JSON_SCHEMA_KEY, ctor, {
19
+ ownMetadataOnly: true
20
+ });
21
+ const key = buildModelCacheKey(options);
22
+ let schema = cached?.[key];
23
+ if (!schema) {
24
+ schema = modelToJsonSchema(ctor, options);
25
+ if (cached) {
26
+ cached[key] = schema;
27
+ }
28
+ else {
29
+ metadata_1.MetadataInspector.defineMetadata(exports.JSON_SCHEMA_KEY.key, { [key]: schema }, ctor);
30
+ }
31
+ }
32
+ return schema;
33
+ }
34
+ exports.getJsonSchema = getJsonSchema;
35
+ function getJsonSchemaRef(modelCtor, options) {
36
+ const schemaWithDefinitions = getJsonSchema(modelCtor, options);
37
+ const key = schemaWithDefinitions.title;
38
+ if (!key)
39
+ return schemaWithDefinitions;
40
+ const definitions = { ...schemaWithDefinitions.definitions };
41
+ const schema = { ...schemaWithDefinitions };
42
+ delete schema.definitions;
43
+ definitions[key] = schema;
44
+ return {
45
+ $ref: `#/definitions/${key}`,
46
+ definitions
47
+ };
48
+ }
49
+ exports.getJsonSchemaRef = getJsonSchemaRef;
50
+ function stringTypeToWrapper(type) {
51
+ if (typeof type === 'function') {
52
+ return type;
53
+ }
54
+ type = type.toLowerCase();
55
+ let wrapper;
56
+ switch (type) {
57
+ case 'number': {
58
+ wrapper = Number;
59
+ break;
60
+ }
61
+ case 'string': {
62
+ wrapper = String;
63
+ break;
64
+ }
65
+ case 'boolean': {
66
+ wrapper = Boolean;
67
+ break;
68
+ }
69
+ case 'array': {
70
+ wrapper = Array;
71
+ break;
72
+ }
73
+ case 'object':
74
+ case 'any': {
75
+ wrapper = Object;
76
+ break;
77
+ }
78
+ case 'date': {
79
+ wrapper = Date;
80
+ break;
81
+ }
82
+ case 'buffer': {
83
+ wrapper = Buffer;
84
+ break;
85
+ }
86
+ case 'null': {
87
+ wrapper = type_resolver_1.Null;
88
+ break;
89
+ }
90
+ default: {
91
+ throw new Error(`Unsupported type: ${type}`);
92
+ }
93
+ }
94
+ return wrapper;
95
+ }
96
+ exports.stringTypeToWrapper = stringTypeToWrapper;
97
+ function isArrayType(type) {
98
+ return type === Array || type === 'array';
99
+ }
100
+ exports.isArrayType = isArrayType;
101
+ function metaToJsonProperty(meta) {
102
+ const propDef = {};
103
+ let result;
104
+ let propertyType = meta.type;
105
+ if (isArrayType(propertyType) && meta.itemType) {
106
+ if (isArrayType(meta.itemType) && !meta.jsonSchema) {
107
+ throw new Error('You must provide the "jsonSchema" field when define ' +
108
+ 'a nested array property');
109
+ }
110
+ result = { type: 'array', items: propDef };
111
+ propertyType = meta.itemType;
112
+ }
113
+ else {
114
+ result = propDef;
115
+ }
116
+ const wrappedType = stringTypeToWrapper(propertyType);
117
+ const resolvedType = (0, type_resolver_1.resolveType)(wrappedType);
118
+ if (resolvedType === Date) {
119
+ Object.assign(propDef, {
120
+ type: 'string',
121
+ format: 'date-time'
122
+ });
123
+ }
124
+ else if (propertyType === 'any') {
125
+ }
126
+ else if ((0, type_resolver_1.isBuiltinType)(resolvedType)) {
127
+ Object.assign(propDef, {
128
+ type: resolvedType.name.toLowerCase()
129
+ });
130
+ }
131
+ else {
132
+ Object.assign(propDef, { $ref: `#/definitions/${resolvedType.name}` });
133
+ }
134
+ if (meta.description) {
135
+ Object.assign(propDef, {
136
+ description: meta.description
137
+ });
138
+ }
139
+ if (meta.jsonSchema) {
140
+ Object.assign(propDef, meta.jsonSchema);
141
+ }
142
+ return result;
143
+ }
144
+ exports.metaToJsonProperty = metaToJsonProperty;
145
+ function getNavigationalPropertyForRelation(relMeta, targetRef) {
146
+ if (relMeta.targetsMany === true) {
147
+ return {
148
+ type: 'array',
149
+ items: targetRef
150
+ };
151
+ }
152
+ if (relMeta.targetsMany === false) {
153
+ return targetRef;
154
+ }
155
+ throw new Error(`targetsMany attribute missing for ${relMeta.name}`);
156
+ }
157
+ exports.getNavigationalPropertyForRelation = getNavigationalPropertyForRelation;
158
+ function buildSchemaTitle(ctor, meta, options) {
159
+ if (options.title)
160
+ return options.title;
161
+ const title = meta.title || ctor.name;
162
+ return title + getTitleSuffix(options);
163
+ }
164
+ function getTitleSuffix(options = {}) {
165
+ let suffix = '';
166
+ if (options.optional?.length) {
167
+ suffix += `Optional_${options.optional.join('-')}_`;
168
+ }
169
+ else if (options.partial) {
170
+ suffix += 'Partial';
171
+ }
172
+ if (options.exclude?.length) {
173
+ suffix += `Excluding_${options.exclude.join('-')}_`;
174
+ }
175
+ if (options.includeRelations) {
176
+ suffix += 'WithRelations';
177
+ }
178
+ return suffix;
179
+ }
180
+ function stringifyOptions(modelSettings = {}) {
181
+ return (0, util_1.inspect)(modelSettings, {
182
+ depth: Infinity,
183
+ maxArrayLength: Infinity,
184
+ breakLength: Infinity
185
+ });
186
+ }
187
+ function isEmptyJson(obj) {
188
+ return !(obj && Object.keys(obj).length);
189
+ }
190
+ function getDescriptionSuffix(typeName, rawOptions = {}) {
191
+ const options = { ...rawOptions };
192
+ delete options.visited;
193
+ if (options.optional && !options.optional.length) {
194
+ delete options.optional;
195
+ }
196
+ const type = typeName;
197
+ let tsType = type;
198
+ if (options.includeRelations) {
199
+ tsType = `${type}WithRelations`;
200
+ }
201
+ if (options.partial) {
202
+ tsType = `Partial<${tsType}>`;
203
+ }
204
+ if (options.exclude) {
205
+ const excludedProps = options.exclude.map(p => `'${p}'`);
206
+ tsType = `Omit<${tsType}, ${excludedProps.join(' | ')}>`;
207
+ }
208
+ if (options.optional) {
209
+ const optionalProps = options.optional.map(p => `'${p}'`);
210
+ tsType = `@loopback/repository-json-schema#Optional<${tsType}, ${optionalProps.join(' | ')}>`;
211
+ }
212
+ return !isEmptyJson(options)
213
+ ? `(tsType: ${tsType}, schemaOptions: ${stringifyOptions(options)})`
214
+ : '';
215
+ }
216
+ function modelToJsonSchema(ctor, jsonSchemaOptions = {}) {
217
+ const options = { ...jsonSchemaOptions };
218
+ options.visited = options.visited ?? {};
219
+ options.optional = options.optional ?? [];
220
+ const partial = options.partial && !options.optional.length;
221
+ if (options.partial && !partial) {
222
+ debug('Overriding "partial" option with "optional" option');
223
+ delete options.partial;
224
+ }
225
+ debug('Creating schema for model %s', ctor.name);
226
+ debug('JSON schema options: %o', options);
227
+ const modelDef = metadata_2.ModelMetadataHelper.getModelMetadata(ctor);
228
+ if (modelDef == null || Object.keys(modelDef).length === 0) {
229
+ return {};
230
+ }
231
+ const meta = modelDef;
232
+ debug('Model settings', meta.settings);
233
+ const title = buildSchemaTitle(ctor, meta, options);
234
+ if (options.visited[title])
235
+ return options.visited[title];
236
+ const result = { title };
237
+ options.visited[title] = result;
238
+ result.type = 'object';
239
+ const descriptionSuffix = getDescriptionSuffix(ctor.name, options);
240
+ if (meta.description) {
241
+ const formatSuffix = descriptionSuffix ? ` ${descriptionSuffix}` : '';
242
+ result.description = meta.description + formatSuffix;
243
+ }
244
+ else if (descriptionSuffix) {
245
+ result.description = descriptionSuffix;
246
+ }
247
+ for (const p in meta.properties) {
248
+ if (options.exclude?.includes(p)) {
249
+ debug('Property % is excluded by %s', p, options.exclude);
250
+ continue;
251
+ }
252
+ if (meta.properties[p].type == null) {
253
+ throw new Error(`Property ${ctor.name}.${p} does not have "type" in its definition`);
254
+ }
255
+ result.properties = result.properties ?? {};
256
+ result.properties[p] = result.properties[p] || {};
257
+ const metaProperty = { ...meta.properties[p] };
258
+ result.properties[p] = metaToJsonProperty(metaProperty);
259
+ const optional = options.optional.includes(p);
260
+ if (metaProperty.required && !(partial || optional)) {
261
+ result.required = result.required ?? [];
262
+ result.required.push(p);
263
+ }
264
+ const resolvedType = (0, type_resolver_1.resolveType)(metaProperty.type);
265
+ const referenceType = isArrayType(resolvedType)
266
+ ?
267
+ (0, type_resolver_1.resolveType)(metaProperty.itemType)
268
+ : resolvedType;
269
+ if (typeof referenceType !== 'function' || (0, type_resolver_1.isBuiltinType)(referenceType)) {
270
+ continue;
271
+ }
272
+ const propOptions = { ...options };
273
+ if (propOptions.partial !== 'deep') {
274
+ delete propOptions.partial;
275
+ }
276
+ if (propOptions.includeRelations === true) {
277
+ delete propOptions.includeRelations;
278
+ }
279
+ delete propOptions.title;
280
+ const propSchema = getJsonSchema(referenceType, propOptions);
281
+ if (typeof result.properties[p] !== 'boolean') {
282
+ const prop = result.properties[p];
283
+ const propTitle = propSchema.title ?? referenceType.name;
284
+ const targetRef = { $ref: `#/definitions/${propTitle}` };
285
+ if (prop.type === 'array' && prop.items) {
286
+ prop.items = targetRef;
287
+ }
288
+ else {
289
+ result.properties[p] = targetRef;
290
+ }
291
+ includeReferencedSchema(propTitle, propSchema);
292
+ }
293
+ }
294
+ result.additionalProperties = meta.settings.strict === false;
295
+ debug(' additionalProperties?', result.additionalProperties);
296
+ if (options.includeRelations) {
297
+ for (const r in meta.relations) {
298
+ result.properties = result.properties ?? {};
299
+ const relMeta = meta.relations[r];
300
+ const targetType = (0, type_resolver_1.resolveType)(relMeta.target);
301
+ const targetOptions = { ...options };
302
+ delete targetOptions.title;
303
+ const targetSchema = getJsonSchema(targetType, targetOptions);
304
+ const targetRef = { $ref: `#/definitions/${targetSchema.title}` };
305
+ const propDef = getNavigationalPropertyForRelation(relMeta, targetRef);
306
+ result.properties[relMeta.name] =
307
+ result.properties[relMeta.name] || propDef;
308
+ includeReferencedSchema(targetSchema.title, targetSchema);
309
+ }
310
+ }
311
+ function includeReferencedSchema(name, schema) {
312
+ if (!schema || !Object.keys(schema).length)
313
+ return;
314
+ if (result !== schema?.definitions) {
315
+ for (const key in schema.definitions) {
316
+ if (key === title)
317
+ continue;
318
+ result.definitions = result.definitions ?? {};
319
+ result.definitions[key] = schema.definitions[key];
320
+ }
321
+ delete schema.definitions;
322
+ }
323
+ if (result !== schema) {
324
+ result.definitions = result.definitions ?? {};
325
+ result.definitions[name] = schema;
326
+ }
327
+ }
328
+ if (meta.jsonSchema) {
329
+ Object.assign(result, meta.jsonSchema);
330
+ }
331
+ return result;
332
+ }
333
+ exports.modelToJsonSchema = modelToJsonSchema;
@@ -0,0 +1,36 @@
1
+ export interface Class<T> {
2
+ new (...args: any[]): T;
3
+ [property: string]: any;
4
+ }
5
+ export interface ConstructorFunction<T> {
6
+ (...args: any[]): T;
7
+ }
8
+ export declare type Constructor<T> = Class<T> | ConstructorFunction<T>;
9
+ export interface AnyObject {
10
+ [property: string]: any;
11
+ }
12
+ export declare type DeepPartial<T> = Partial<T> | {
13
+ [P in keyof T]?: DeepPartial<T[P]>;
14
+ };
15
+ export declare type DataObject<T extends object> = T | DeepPartial<T>;
16
+ export declare type Options = AnyObject;
17
+ export declare type Callback<T> = (err: Error | string | null | undefined, result?: T) => void;
18
+ export declare type Command = string | AnyObject;
19
+ export declare type NamedParameters = AnyObject;
20
+ export declare type PositionalParameters = any[];
21
+ export interface Count {
22
+ count: number;
23
+ }
24
+ export declare const CountSchema: {
25
+ type: "object";
26
+ title: string;
27
+ 'x-typescript-type': string;
28
+ properties: {
29
+ count: {
30
+ type: "number";
31
+ };
32
+ };
33
+ };
34
+ export declare type PrototypeOf<Ctor extends Function> = Ctor extends {
35
+ prototype: infer Proto;
36
+ } ? Proto : never;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CountSchema = void 0;
4
+ exports.CountSchema = {
5
+ type: 'object',
6
+ title: 'loopback.Count',
7
+ 'x-typescript-type': '@loopback/repository#Count',
8
+ properties: {
9
+ count: {
10
+ type: 'number'
11
+ }
12
+ }
13
+ };
@@ -0,0 +1,6 @@
1
+ import { ReferenceObject, SchemaObject, SchemasObject } from 'openapi3-ts';
2
+ export declare type SchemaRef = ReferenceObject & {
3
+ definitions: SchemasObject;
4
+ };
5
+ export declare function jsonToSchemaObject(json: SchemaObject, visited?: Map<SchemaObject, SchemaObject | SchemaRef>): SchemaObject | SchemaRef;
6
+ export declare function jsonOrBooleanToJSON(jsonOrBool: boolean | SchemaObject): SchemaObject;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonOrBooleanToJSON = exports.jsonToSchemaObject = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const mapValues_1 = tslib_1.__importDefault(require("./mapValues"));
6
+ const openapi3_ts_1 = require("openapi3-ts");
7
+ function jsonToSchemaObject(json, visited = new Map()) {
8
+ const converted = 'x-loopback-converted';
9
+ const schema = visited.get(json);
10
+ if (schema != null && (0, openapi3_ts_1.isSchemaObject)(schema) && schema[converted] === false) {
11
+ return { $ref: `#/components/schemas/${json.title}` };
12
+ }
13
+ if (schema != null)
14
+ return schema;
15
+ const result = {
16
+ [converted]: false
17
+ };
18
+ visited.set(json, result);
19
+ const propsToIgnore = ['additionalItems', 'defaultProperties', 'typeof'];
20
+ for (const property in json) {
21
+ if (propsToIgnore.includes(property)) {
22
+ continue;
23
+ }
24
+ switch (property) {
25
+ case 'type': {
26
+ if (json.type === 'array' && !json.items) {
27
+ throw new Error('"items" property must be present if "type" is an array');
28
+ }
29
+ result.type = Array.isArray(json.type) ? json.type[0] : json.type;
30
+ break;
31
+ }
32
+ case 'allOf': {
33
+ result.allOf = json.allOf?.map(item => jsonToSchemaObject(item, visited));
34
+ break;
35
+ }
36
+ case 'anyOf': {
37
+ result.anyOf = json.anyOf?.map(item => jsonToSchemaObject(item, visited));
38
+ break;
39
+ }
40
+ case 'oneOf': {
41
+ result.oneOf = json.oneOf?.map(item => jsonToSchemaObject(item, visited));
42
+ break;
43
+ }
44
+ case 'definitions': {
45
+ result.definitions = (0, mapValues_1.default)(json.definitions, def => jsonToSchemaObject(jsonOrBooleanToJSON(def), visited));
46
+ break;
47
+ }
48
+ case 'properties': {
49
+ result.properties = (0, mapValues_1.default)(json.properties, item => jsonToSchemaObject(jsonOrBooleanToJSON(item), visited));
50
+ break;
51
+ }
52
+ case 'additionalProperties': {
53
+ if (typeof json.additionalProperties === 'boolean') {
54
+ result.additionalProperties = json.additionalProperties;
55
+ }
56
+ else {
57
+ result.additionalProperties = jsonToSchemaObject(json.additionalProperties, visited);
58
+ }
59
+ break;
60
+ }
61
+ case 'items': {
62
+ const items = Array.isArray(json.items) ? json.items[0] : json.items;
63
+ result.items = jsonToSchemaObject(jsonOrBooleanToJSON(items), visited);
64
+ break;
65
+ }
66
+ case '$ref': {
67
+ result.$ref = json.$ref.replace('#/definitions', '#/components/schemas');
68
+ break;
69
+ }
70
+ case 'examples': {
71
+ if (Array.isArray(json.examples)) {
72
+ result.example = json.examples[0];
73
+ }
74
+ break;
75
+ }
76
+ default: {
77
+ result[property] = json[property];
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ delete result[converted];
83
+ const matched = result.description?.match(/^\(tsType: (.+), schemaOptions:/);
84
+ if (matched) {
85
+ result['x-typescript-type'] = matched[1];
86
+ }
87
+ return result;
88
+ }
89
+ exports.jsonToSchemaObject = jsonToSchemaObject;
90
+ function jsonOrBooleanToJSON(jsonOrBool) {
91
+ if (typeof jsonOrBool === 'object') {
92
+ return jsonOrBool;
93
+ }
94
+ return jsonOrBool ? {} : { not: {} };
95
+ }
96
+ exports.jsonOrBooleanToJSON = jsonOrBooleanToJSON;
@@ -0,0 +1,2 @@
1
+ export = mapValues;
2
+ declare function mapValues(object: any, iteratee?: Function | undefined): any;