@goatlab/fluent 0.7.39 → 0.7.41

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 (276) hide show
  1. package/dist/BaseConnector.d.ts +112 -0
  2. package/dist/BaseConnector.js +347 -0
  3. package/dist/BaseConnector.js.map +1 -0
  4. package/dist/Fluent.d.ts +11 -0
  5. package/dist/Fluent.js +27 -0
  6. package/dist/Fluent.js.map +1 -0
  7. package/dist/FluentConnectorInterface.d.ts +17 -0
  8. package/dist/FluentConnectorInterface.js +3 -0
  9. package/dist/FluentConnectorInterface.js.map +1 -0
  10. package/dist/FluentEntity.d.ts +7 -0
  11. package/dist/FluentEntity.js +34 -0
  12. package/dist/FluentEntity.js.map +1 -0
  13. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +123 -0
  14. package/dist/TypeOrmConnector/TypeOrmConnector.js +765 -0
  15. package/dist/TypeOrmConnector/TypeOrmConnector.js.map +1 -0
  16. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +12 -0
  17. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +167 -0
  18. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js.map +1 -0
  19. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +11 -0
  20. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +52 -0
  21. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js.map +1 -0
  22. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.d.ts +4 -0
  23. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js +20 -0
  24. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js.map +1 -0
  25. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +7 -0
  26. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +19 -0
  27. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js.map +1 -0
  28. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +11 -0
  29. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +173 -0
  30. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js.map +1 -0
  31. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +13 -0
  32. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +207 -0
  33. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js.map +1 -0
  34. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +11 -0
  35. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +214 -0
  36. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js.map +1 -0
  37. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +44 -0
  38. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +87 -0
  39. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js.map +1 -0
  40. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +38 -0
  41. package/dist/TypeOrmConnector/test/basic/goat.entity.js +82 -0
  42. package/dist/TypeOrmConnector/test/basic/goat.entity.js.map +1 -0
  43. package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
  44. package/dist/TypeOrmConnector/test/flock.js +26 -0
  45. package/dist/TypeOrmConnector/test/flock.js.map +1 -0
  46. package/dist/TypeOrmConnector/util/clearEmpties.d.ts +7 -0
  47. package/dist/TypeOrmConnector/util/clearEmpties.js +33 -0
  48. package/dist/TypeOrmConnector/util/clearEmpties.js.map +1 -0
  49. package/dist/TypeOrmConnector/util/extractConditions.d.ts +12 -0
  50. package/dist/TypeOrmConnector/util/extractConditions.js +89 -0
  51. package/dist/TypeOrmConnector/util/extractConditions.js.map +1 -0
  52. package/dist/TypeOrmConnector/util/extractInclude.d.ts +2 -0
  53. package/dist/TypeOrmConnector/util/extractInclude.js +26 -0
  54. package/dist/TypeOrmConnector/util/extractInclude.js.map +1 -0
  55. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +12 -0
  56. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js +49 -0
  57. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js.map +1 -0
  58. package/dist/TypeOrmConnector/util/extractOrderBy.d.ts +2 -0
  59. package/dist/TypeOrmConnector/util/extractOrderBy.js +24 -0
  60. package/dist/TypeOrmConnector/util/extractOrderBy.js.map +1 -0
  61. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +19 -0
  62. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js +27 -0
  63. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js.map +1 -0
  64. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +6 -0
  65. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +29 -0
  66. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js.map +1 -0
  67. package/dist/TypeOrmConnector/util/isAnyObject.d.ts +1 -0
  68. package/dist/TypeOrmConnector/util/isAnyObject.js +8 -0
  69. package/dist/TypeOrmConnector/util/isAnyObject.js.map +1 -0
  70. package/dist/TypeOrmConnector/util/nestQueryResults.d.ts +2 -0
  71. package/dist/TypeOrmConnector/util/nestQueryResults.js +38 -0
  72. package/dist/TypeOrmConnector/util/nestQueryResults.js.map +1 -0
  73. package/dist/core/Loopback/build-schema.d.ts +148 -0
  74. package/dist/core/Loopback/build-schema.js +443 -0
  75. package/dist/core/Loopback/build-schema.js.map +1 -0
  76. package/dist/core/Loopback/common-types.d.ts +96 -0
  77. package/dist/core/Loopback/common-types.js +24 -0
  78. package/dist/core/Loopback/common-types.js.map +1 -0
  79. package/dist/core/Loopback/json-to-schema.d.ts +41 -0
  80. package/dist/core/Loopback/json-to-schema.js +113 -0
  81. package/dist/core/Loopback/json-to-schema.js.map +1 -0
  82. package/dist/core/Loopback/mapValues.js +2280 -0
  83. package/dist/core/Loopback/metadata.d.ts +16 -0
  84. package/dist/core/Loopback/metadata.js +49 -0
  85. package/dist/core/Loopback/metadata.js.map +1 -0
  86. package/dist/core/Loopback/model.d.ts +233 -0
  87. package/dist/core/Loopback/model.js +394 -0
  88. package/dist/core/Loopback/model.js.map +1 -0
  89. package/dist/core/Loopback/query.d.ts +394 -0
  90. package/dist/core/Loopback/query.js +484 -0
  91. package/dist/core/Loopback/query.js.map +1 -0
  92. package/dist/core/Loopback/relation.types.d.ts +141 -0
  93. package/dist/core/Loopback/relation.types.js +18 -0
  94. package/dist/core/Loopback/relation.types.js.map +1 -0
  95. package/dist/core/Loopback/type-resolver.d.ts +42 -0
  96. package/dist/core/Loopback/type-resolver.js +60 -0
  97. package/dist/core/Loopback/type-resolver.js.map +1 -0
  98. package/dist/core/Loopback/type.d.ts +38 -0
  99. package/dist/core/Loopback/type.js +7 -0
  100. package/dist/core/Loopback/type.js.map +1 -0
  101. package/dist/core/Nestjs/applyDecorators.d.ts +10 -0
  102. package/dist/core/Nestjs/applyDecorators.js +26 -0
  103. package/dist/core/Nestjs/applyDecorators.js.map +1 -0
  104. package/dist/core/Nestjs/types/common.d.ts +16 -0
  105. package/dist/core/Nestjs/types/common.js +38 -0
  106. package/dist/core/Nestjs/types/common.js.map +1 -0
  107. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
  108. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +8 -0
  109. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js.map +1 -0
  110. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
  111. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +66 -0
  112. package/dist/core/Nestjs/types/decorators/api-property.decorator.js.map +1 -0
  113. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
  114. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +136 -0
  115. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js.map +1 -0
  116. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +4 -0
  117. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +24 -0
  118. package/dist/core/Nestjs/types/decorators/args-type.decorator.js.map +1 -0
  119. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
  120. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +55 -0
  121. package/dist/core/Nestjs/types/decorators/create-property.decorator.js.map +1 -0
  122. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +4 -0
  123. package/dist/core/Nestjs/types/decorators/directive.decorator.js +39 -0
  124. package/dist/core/Nestjs/types/decorators/directive.decorator.js.map +1 -0
  125. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +4 -0
  126. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +28 -0
  127. package/dist/core/Nestjs/types/decorators/extensions.decorator.js.map +1 -0
  128. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +48 -0
  129. package/dist/core/Nestjs/types/decorators/field.decorator.js +63 -0
  130. package/dist/core/Nestjs/types/decorators/field.decorator.js.map +1 -0
  131. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +25 -0
  132. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +29 -0
  133. package/dist/core/Nestjs/types/decorators/input-type.decorator.js.map +1 -0
  134. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +33 -0
  135. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +35 -0
  136. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js.map +1 -0
  137. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
  138. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +46 -0
  139. package/dist/core/Nestjs/types/decorators/partial-type.helper.js.map +1 -0
  140. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
  141. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +10 -0
  142. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js.map +1 -0
  143. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
  144. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +10 -0
  145. package/dist/core/Nestjs/types/errors/directive-parsing.error.js.map +1 -0
  146. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
  147. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +10 -0
  148. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js.map +1 -0
  149. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
  150. package/dist/core/Nestjs/types/errors/undefined-type.error.js +11 -0
  151. package/dist/core/Nestjs/types/errors/undefined-type.error.js.map +1 -0
  152. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
  153. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +11 -0
  154. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js.map +1 -0
  155. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +11 -0
  156. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +3 -0
  157. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js.map +1 -0
  158. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
  159. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +3 -0
  160. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js.map +1 -0
  161. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
  162. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +3 -0
  163. package/dist/core/Nestjs/types/interfaces/complexity.interface.js.map +1 -0
  164. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
  165. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +3 -0
  166. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js.map +1 -0
  167. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +239 -0
  168. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +7 -0
  169. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js.map +1 -0
  170. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
  171. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +3 -0
  172. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js.map +1 -0
  173. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
  174. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +3 -0
  175. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js.map +1 -0
  176. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
  177. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +3 -0
  178. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js.map +1 -0
  179. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
  180. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +3 -0
  181. package/dist/core/Nestjs/types/interfaces/type-options.interface.js.map +1 -0
  182. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
  183. package/dist/core/Nestjs/types/lazy-metadata.storage.js +66 -0
  184. package/dist/core/Nestjs/types/lazy-metadata.storage.js.map +1 -0
  185. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
  186. package/dist/core/Nestjs/types/metadata/class.metadata.js +3 -0
  187. package/dist/core/Nestjs/types/metadata/class.metadata.js.map +1 -0
  188. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
  189. package/dist/core/Nestjs/types/metadata/directive.metadata.js +3 -0
  190. package/dist/core/Nestjs/types/metadata/directive.metadata.js.map +1 -0
  191. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
  192. package/dist/core/Nestjs/types/metadata/enum.metadata.js +3 -0
  193. package/dist/core/Nestjs/types/metadata/enum.metadata.js.map +1 -0
  194. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
  195. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +3 -0
  196. package/dist/core/Nestjs/types/metadata/extensions.metadata.js.map +1 -0
  197. package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
  198. package/dist/core/Nestjs/types/metadata/index.js +12 -0
  199. package/dist/core/Nestjs/types/metadata/index.js.map +1 -0
  200. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
  201. package/dist/core/Nestjs/types/metadata/interface.metadata.js +3 -0
  202. package/dist/core/Nestjs/types/metadata/interface.metadata.js.map +1 -0
  203. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
  204. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +3 -0
  205. package/dist/core/Nestjs/types/metadata/object-type.metadata.js.map +1 -0
  206. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
  207. package/dist/core/Nestjs/types/metadata/param.metadata.js +3 -0
  208. package/dist/core/Nestjs/types/metadata/param.metadata.js.map +1 -0
  209. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
  210. package/dist/core/Nestjs/types/metadata/property.metadata.js +3 -0
  211. package/dist/core/Nestjs/types/metadata/property.metadata.js.map +1 -0
  212. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
  213. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +3 -0
  214. package/dist/core/Nestjs/types/metadata/resolver.metadata.js.map +1 -0
  215. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
  216. package/dist/core/Nestjs/types/metadata/union.metadata.js +3 -0
  217. package/dist/core/Nestjs/types/metadata/union.metadata.js.map +1 -0
  218. package/dist/core/Nestjs/types/object-type.decorator.d.ts +32 -0
  219. package/dist/core/Nestjs/types/object-type.decorator.js +33 -0
  220. package/dist/core/Nestjs/types/object-type.decorator.js.map +1 -0
  221. package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
  222. package/dist/core/Nestjs/types/omit-type.js +34 -0
  223. package/dist/core/Nestjs/types/omit-type.js.map +1 -0
  224. package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
  225. package/dist/core/Nestjs/types/reflection.utils.js +65 -0
  226. package/dist/core/Nestjs/types/reflection.utils.js.map +1 -0
  227. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +20 -0
  228. package/dist/core/Nestjs/types/set-metadata.decorator.js +33 -0
  229. package/dist/core/Nestjs/types/set-metadata.decorator.js.map +1 -0
  230. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +73 -0
  231. package/dist/core/Nestjs/types/type-metadata.storage.js +349 -0
  232. package/dist/core/Nestjs/types/type-metadata.storage.js.map +1 -0
  233. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
  234. package/dist/core/Nestjs/types/utils/enum.utils.js +31 -0
  235. package/dist/core/Nestjs/types/utils/enum.utils.js.map +1 -0
  236. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +13 -0
  237. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
  238. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js.map +1 -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/mapped-types.utils.js.map +1 -0
  242. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
  243. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +37 -0
  244. package/dist/core/Nestjs/types/utils/model-properties-accessor.js.map +1 -0
  245. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
  246. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
  247. package/dist/core/Nestjs/types/utils/type-helpers.utils.js.map +1 -0
  248. package/dist/core/types.d.ts +23 -0
  249. package/dist/core/types.js +31 -0
  250. package/dist/core/types.js.map +1 -0
  251. package/dist/decorators.d.ts +92 -0
  252. package/dist/decorators.js +163 -0
  253. package/dist/decorators.js.map +1 -0
  254. package/dist/generatorDatasource.d.ts +2 -0
  255. package/dist/generatorDatasource.js +13 -0
  256. package/dist/generatorDatasource.js.map +1 -0
  257. package/dist/index.d.ts +34 -0
  258. package/dist/index.js +59 -0
  259. package/dist/index.js.map +1 -0
  260. package/dist/loadRelations.d.ts +12 -0
  261. package/dist/loadRelations.js +139 -0
  262. package/dist/loadRelations.js.map +1 -0
  263. package/dist/outputKeys.d.ts +2 -0
  264. package/dist/outputKeys.js +18 -0
  265. package/dist/outputKeys.js.map +1 -0
  266. package/dist/testing/genericUnifiedTestSuite.d.ts +21 -0
  267. package/dist/testing/genericUnifiedTestSuite.js +256 -0
  268. package/dist/testing/genericUnifiedTestSuite.js.map +1 -0
  269. package/dist/testing/unifiedTestFactory.d.ts +38 -0
  270. package/dist/testing/unifiedTestFactory.js +297 -0
  271. package/dist/testing/unifiedTestFactory.js.map +1 -0
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/dist/types.d.ts +104 -0
  274. package/dist/types.js +23 -0
  275. package/dist/types.js.map +1 -0
  276. package/package.json +48 -24
@@ -0,0 +1,148 @@
1
+ import { MetadataAccessor } from '@loopback/metadata';
2
+ import { SchemaObject as JsonSchema } from 'openapi3-ts/oas30';
3
+ export interface SchemaObject extends JsonSchema {
4
+ definitions?: {
5
+ [key: string]: SchemaObject;
6
+ };
7
+ $ref?: string;
8
+ }
9
+ import { RelationMetadata } from './relation.types';
10
+ import { PropertyDefinition, PropertyType } from './model';
11
+ export declare const JSON_SCHEMA_KEY: MetadataAccessor<{
12
+ [key: string]: SchemaObject;
13
+ }, ClassDecorator>;
14
+ export interface JsonSchemaOptions<T extends object> {
15
+ /**
16
+ * The title to use in the generated schema.
17
+ *
18
+ * When using options like `exclude`, the auto-generated title can be
19
+ * difficult to read for humans. Use this option to change the title to
20
+ * a more meaningful value.
21
+ */
22
+ title?: string;
23
+ /**
24
+ * Set this flag if you want the schema to define navigational properties
25
+ * for model relations.
26
+ */
27
+ includeRelations?: boolean;
28
+ /**
29
+ * Set this flag to mark all model properties as optional. This is typically
30
+ * used to describe request body of PATCH endpoints. This option will be
31
+ * overridden by the "optional" option if it is set and non-empty.
32
+ *
33
+ * The flag also applies to nested model instances if its value is set to
34
+ * 'deep', such as:
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * @model()
39
+ * class Address {
40
+ * @property()
41
+ * street: string;
42
+ * @property()
43
+ * city: string;
44
+ * @property()
45
+ * state: string;
46
+ * @property()
47
+ * zipCode: string;
48
+ * }
49
+ *
50
+ * @model()
51
+ * class Customer {
52
+ * @property()
53
+ * address: Address;
54
+ * }
55
+ *
56
+ * // The following schema allows properties of `customer` optional, but not
57
+ * // `customer.address`
58
+ * const schemaRef1 = getModelSchemaRef(Customer, {partial: true});
59
+ *
60
+ * // The following schema allows properties of `customer` and
61
+ * // `customer.address` optional
62
+ * const schemaRef2 = getModelSchemaRef(Customer, {partial: 'deep'});
63
+ * ```
64
+ */
65
+ partial?: boolean | 'deep';
66
+ /**
67
+ * List of model properties to exclude from the schema.
68
+ */
69
+ exclude?: (keyof T)[];
70
+ /**
71
+ * List of model properties to mark as optional. Overrides the "partial"
72
+ * option if it is not empty.
73
+ */
74
+ optional?: (keyof T)[];
75
+ /**
76
+ * @internal
77
+ */
78
+ visited?: {
79
+ [key: string]: SchemaObject;
80
+ };
81
+ }
82
+ /**
83
+ * @internal
84
+ */
85
+ export declare function buildModelCacheKey<T extends object>(options?: JsonSchemaOptions<T>): string;
86
+ /**
87
+ * Gets the JSON Schema of a TypeScript model/class by seeing if one exists
88
+ * in a cache. If not, one is generated and then cached.
89
+ * @param ctor - Constructor of class to get JSON Schema from
90
+ */
91
+ export declare function getJsonSchema<T extends object>(ctor: Function & {
92
+ prototype: T;
93
+ }, options?: JsonSchemaOptions<T>): SchemaObject;
94
+ /**
95
+ * Describe the provided Model as a reference to a definition shared by multiple
96
+ * endpoints. The definition is included in the returned schema.
97
+ *
98
+ * @example
99
+ *
100
+ * ```ts
101
+ * const schema = {
102
+ * $ref: '/definitions/Product',
103
+ * definitions: {
104
+ * Product: {
105
+ * title: 'Product',
106
+ * properties: {
107
+ * // etc.
108
+ * }
109
+ * }
110
+ * }
111
+ * }
112
+ * ```
113
+ *
114
+ * @param modelCtor - The model constructor (e.g. `Product`)
115
+ * @param options - Additional options
116
+ */
117
+ export declare function getJsonSchemaRef<T extends object>(modelCtor: Function & {
118
+ prototype: T;
119
+ }, options?: JsonSchemaOptions<T>): SchemaObject;
120
+ /**
121
+ * Gets the wrapper function of primitives string, number, and boolean
122
+ * @param type - Name of type
123
+ */
124
+ export declare function stringTypeToWrapper(type: string | Function): Function;
125
+ /**
126
+ * Determines whether a given string or constructor is array type or not
127
+ * @param type - Type as string or wrapper
128
+ */
129
+ export declare function isArrayType(type: string | Function | PropertyType): boolean;
130
+ /**
131
+ * Converts property metadata into a JSON property definition
132
+ * @param meta
133
+ */
134
+ export declare function metaToJsonProperty(meta: PropertyDefinition): SchemaObject;
135
+ /**
136
+ * Checks and return navigational property definition for the relation
137
+ * @param relMeta Relation metadata object
138
+ * @param targetRef Schema definition for the target model
139
+ */
140
+ export declare function getNavigationalPropertyForRelation(relMeta: RelationMetadata, targetRef: SchemaObject): SchemaObject;
141
+ /**
142
+ * Converts a TypeScript class into a JSON Schema using TypeScript's
143
+ * reflection API
144
+ * @param ctor - Constructor of class to convert from
145
+ */
146
+ export declare function modelToJsonSchema<T extends object>(ctor: Function & {
147
+ prototype: T;
148
+ }, jsonSchemaOptions?: JsonSchemaOptions<T>): SchemaObject;
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JSON_SCHEMA_KEY = void 0;
4
+ exports.buildModelCacheKey = buildModelCacheKey;
5
+ exports.getJsonSchema = getJsonSchema;
6
+ exports.getJsonSchemaRef = getJsonSchemaRef;
7
+ exports.stringTypeToWrapper = stringTypeToWrapper;
8
+ exports.isArrayType = isArrayType;
9
+ exports.metaToJsonProperty = metaToJsonProperty;
10
+ exports.getNavigationalPropertyForRelation = getNavigationalPropertyForRelation;
11
+ exports.modelToJsonSchema = modelToJsonSchema;
12
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
13
+ // Node module: @loopback/repository-json-schema
14
+ // This file is licensed under the MIT License.
15
+ // License text available at https://opensource.org/licenses/MIT
16
+ const metadata_1 = require("@loopback/metadata");
17
+ const util_1 = require("util");
18
+ const type_resolver_1 = require("./type-resolver");
19
+ const metadata_2 = require("./metadata");
20
+ exports.JSON_SCHEMA_KEY = metadata_1.MetadataAccessor.create('loopback:json-schema');
21
+ const debug = console.log;
22
+ /**
23
+ * @internal
24
+ */
25
+ function buildModelCacheKey(options = {}) {
26
+ // Backwards compatibility: preserve cache key "modelOnly"
27
+ if (Object.keys(options).length === 0) {
28
+ return 'modelOnly';
29
+ }
30
+ // New key schema: use the same suffix as we use for schema title
31
+ // For example: "modelPartialWithRelations"
32
+ // Note this new key schema preserves the old key "modelWithRelations"
33
+ return `model${options.title ?? ''}${getTitleSuffix(options)}`;
34
+ }
35
+ /**
36
+ * Gets the JSON Schema of a TypeScript model/class by seeing if one exists
37
+ * in a cache. If not, one is generated and then cached.
38
+ * @param ctor - Constructor of class to get JSON Schema from
39
+ */
40
+ function getJsonSchema(ctor, options) {
41
+ // In the near future the metadata will be an object with
42
+ // different titles as keys
43
+ const cached = metadata_1.MetadataInspector.getClassMetadata(exports.JSON_SCHEMA_KEY, ctor, {
44
+ ownMetadataOnly: true
45
+ });
46
+ const key = buildModelCacheKey(options);
47
+ let schema = cached?.[key];
48
+ if (!schema) {
49
+ // Create new json schema from model
50
+ // if not found in cache for specific key
51
+ schema = modelToJsonSchema(ctor, options);
52
+ if (cached) {
53
+ // Add a new key to the cached schema of the model
54
+ cached[key] = schema;
55
+ }
56
+ else {
57
+ // Define new metadata and set in cache
58
+ metadata_1.MetadataInspector.defineMetadata(exports.JSON_SCHEMA_KEY.key, { [key]: schema }, ctor);
59
+ }
60
+ }
61
+ return schema;
62
+ }
63
+ /**
64
+ * Describe the provided Model as a reference to a definition shared by multiple
65
+ * endpoints. The definition is included in the returned schema.
66
+ *
67
+ * @example
68
+ *
69
+ * ```ts
70
+ * const schema = {
71
+ * $ref: '/definitions/Product',
72
+ * definitions: {
73
+ * Product: {
74
+ * title: 'Product',
75
+ * properties: {
76
+ * // etc.
77
+ * }
78
+ * }
79
+ * }
80
+ * }
81
+ * ```
82
+ *
83
+ * @param modelCtor - The model constructor (e.g. `Product`)
84
+ * @param options - Additional options
85
+ */
86
+ function getJsonSchemaRef(modelCtor, options) {
87
+ const schemaWithDefinitions = getJsonSchema(modelCtor, options);
88
+ const key = schemaWithDefinitions.title;
89
+ // ctor is not a model
90
+ if (!key)
91
+ return schemaWithDefinitions;
92
+ const definitions = { ...schemaWithDefinitions.definitions };
93
+ const schema = { ...schemaWithDefinitions };
94
+ delete schema.definitions;
95
+ definitions[key] = schema;
96
+ return {
97
+ $ref: `#/definitions/${key}`,
98
+ definitions
99
+ };
100
+ }
101
+ /**
102
+ * Gets the wrapper function of primitives string, number, and boolean
103
+ * @param type - Name of type
104
+ */
105
+ function stringTypeToWrapper(type) {
106
+ if (typeof type === 'function') {
107
+ return type;
108
+ }
109
+ type = type.toLowerCase();
110
+ let wrapper;
111
+ switch (type) {
112
+ case 'number': {
113
+ wrapper = Number;
114
+ break;
115
+ }
116
+ case 'string': {
117
+ wrapper = String;
118
+ break;
119
+ }
120
+ case 'boolean': {
121
+ wrapper = Boolean;
122
+ break;
123
+ }
124
+ case 'array': {
125
+ wrapper = Array;
126
+ break;
127
+ }
128
+ case 'object':
129
+ case 'any': {
130
+ wrapper = Object;
131
+ break;
132
+ }
133
+ case 'date': {
134
+ wrapper = Date;
135
+ break;
136
+ }
137
+ case 'buffer': {
138
+ wrapper = Buffer;
139
+ break;
140
+ }
141
+ case 'null': {
142
+ wrapper = type_resolver_1.Null;
143
+ break;
144
+ }
145
+ default: {
146
+ throw new Error(`Unsupported type: ${type}`);
147
+ }
148
+ }
149
+ return wrapper;
150
+ }
151
+ /**
152
+ * Determines whether a given string or constructor is array type or not
153
+ * @param type - Type as string or wrapper
154
+ */
155
+ function isArrayType(type) {
156
+ return type === Array || type === 'array';
157
+ }
158
+ /**
159
+ * Converts property metadata into a JSON property definition
160
+ * @param meta
161
+ */
162
+ function metaToJsonProperty(meta) {
163
+ const propDef = {};
164
+ let result;
165
+ let propertyType = meta.type;
166
+ if (isArrayType(propertyType) && meta.itemType) {
167
+ if (isArrayType(meta.itemType) && !meta.jsonSchema) {
168
+ throw new Error('You must provide the "jsonSchema" field when define ' +
169
+ 'a nested array property');
170
+ }
171
+ result = { type: 'array', items: propDef };
172
+ propertyType = meta.itemType;
173
+ }
174
+ else {
175
+ result = propDef;
176
+ }
177
+ const wrappedType = stringTypeToWrapper(propertyType);
178
+ const resolvedType = (0, type_resolver_1.resolveType)(wrappedType);
179
+ if (resolvedType === Date) {
180
+ Object.assign(propDef, {
181
+ type: 'string',
182
+ format: 'date-time'
183
+ });
184
+ }
185
+ else if (propertyType === 'any') {
186
+ // no-op, the json schema for any type is {}
187
+ }
188
+ else if ((0, type_resolver_1.isBuiltinType)(resolvedType)) {
189
+ Object.assign(propDef, {
190
+ type: resolvedType.name.toLowerCase()
191
+ });
192
+ }
193
+ else {
194
+ Object.assign(propDef, { $ref: `#/definitions/${resolvedType.name}` });
195
+ }
196
+ if (meta.description) {
197
+ Object.assign(propDef, {
198
+ description: meta.description
199
+ });
200
+ }
201
+ if (meta.jsonSchema) {
202
+ Object.assign(propDef, meta.jsonSchema);
203
+ }
204
+ return result;
205
+ }
206
+ /**
207
+ * Checks and return navigational property definition for the relation
208
+ * @param relMeta Relation metadata object
209
+ * @param targetRef Schema definition for the target model
210
+ */
211
+ function getNavigationalPropertyForRelation(relMeta, targetRef) {
212
+ if (relMeta.targetsMany === true) {
213
+ // Targets an array of object, like, hasMany
214
+ return {
215
+ type: 'array',
216
+ items: targetRef
217
+ };
218
+ }
219
+ if (relMeta.targetsMany === false) {
220
+ // Targets single object, like, hasOne, belongsTo
221
+ return targetRef;
222
+ }
223
+ // targetsMany is undefined or null
224
+ // not allowed if includeRelations is true
225
+ throw new Error(`targetsMany attribute missing for ${relMeta.name}`);
226
+ }
227
+ function buildSchemaTitle(ctor, meta, options) {
228
+ if (options.title)
229
+ return options.title;
230
+ const title = meta.title || ctor.name;
231
+ return title + getTitleSuffix(options);
232
+ }
233
+ /**
234
+ * Checks the options and generates a descriptive suffix using compatible chars
235
+ * @param options json schema options
236
+ */
237
+ function getTitleSuffix(options = {}) {
238
+ let suffix = '';
239
+ if (options.optional?.length) {
240
+ suffix += `Optional_${options.optional.join('-')}_`;
241
+ }
242
+ else if (options.partial) {
243
+ suffix += 'Partial';
244
+ }
245
+ if (options.exclude?.length) {
246
+ suffix += `Excluding_${options.exclude.join('-')}_`;
247
+ }
248
+ if (options.includeRelations) {
249
+ suffix += 'WithRelations';
250
+ }
251
+ return suffix;
252
+ }
253
+ function stringifyOptions(modelSettings = {}) {
254
+ return (0, util_1.inspect)(modelSettings, {
255
+ depth: Infinity,
256
+ maxArrayLength: Infinity,
257
+ breakLength: Infinity
258
+ });
259
+ }
260
+ function isEmptyJson(obj) {
261
+ return !(obj && Object.keys(obj).length);
262
+ }
263
+ /**
264
+ * Checks the options and generates a descriptive suffix that contains the
265
+ * TypeScript type and options
266
+ * @param typeName - TypeScript's type name
267
+ * @param options - json schema options
268
+ */
269
+ function getDescriptionSuffix(typeName, rawOptions = {}) {
270
+ const options = { ...rawOptions };
271
+ delete options.visited;
272
+ if (options.optional && !options.optional.length) {
273
+ delete options.optional;
274
+ }
275
+ const type = typeName;
276
+ let tsType = type;
277
+ if (options.includeRelations) {
278
+ tsType = `${type}WithRelations`;
279
+ }
280
+ if (options.partial) {
281
+ tsType = `Partial<${tsType}>`;
282
+ }
283
+ if (options.exclude) {
284
+ const excludedProps = options.exclude.map(p => `'${String(p)}'`);
285
+ tsType = `Omit<${tsType}, ${excludedProps.join(' | ')}>`;
286
+ }
287
+ if (options.optional) {
288
+ const optionalProps = options.optional.map(p => `'${String(p)}'`);
289
+ tsType = `@loopback/repository-json-schema#Optional<${tsType}, ${optionalProps.join(' | ')}>`;
290
+ }
291
+ return !isEmptyJson(options)
292
+ ? `(tsType: ${tsType}, schemaOptions: ${stringifyOptions(options)})`
293
+ : '';
294
+ }
295
+ // NOTE(shimks) no metadata for: union, optional, nested array, any, enum,
296
+ // string literal, anonymous types, and inherited properties
297
+ /**
298
+ * Converts a TypeScript class into a JSON Schema using TypeScript's
299
+ * reflection API
300
+ * @param ctor - Constructor of class to convert from
301
+ */
302
+ function modelToJsonSchema(ctor, jsonSchemaOptions = {}) {
303
+ const options = { ...jsonSchemaOptions };
304
+ options.visited = options.visited ?? {};
305
+ options.optional = options.optional ?? [];
306
+ const partial = options.partial && !options.optional.length;
307
+ if (options.partial && !partial) {
308
+ debug('Overriding "partial" option with "optional" option');
309
+ delete options.partial;
310
+ }
311
+ debug('Creating schema for model %s', ctor.name);
312
+ debug('JSON schema options: %o', options);
313
+ const modelDef = metadata_2.ModelMetadataHelper.getModelMetadata(ctor);
314
+ // returns an empty object if metadata is an empty object
315
+ if (modelDef == null || Object.keys(modelDef).length === 0) {
316
+ return {};
317
+ }
318
+ const meta = modelDef;
319
+ debug('Model settings', meta.settings);
320
+ const title = buildSchemaTitle(ctor, meta, options);
321
+ if (options.visited[title])
322
+ return options.visited[title];
323
+ const result = { title };
324
+ options.visited[title] = result;
325
+ result.type = 'object';
326
+ const descriptionSuffix = getDescriptionSuffix(ctor.name, options);
327
+ if (meta.description) {
328
+ const formatSuffix = descriptionSuffix ? ` ${descriptionSuffix}` : '';
329
+ result.description = meta.description + formatSuffix;
330
+ }
331
+ else if (descriptionSuffix) {
332
+ result.description = descriptionSuffix;
333
+ }
334
+ for (const p in meta.properties) {
335
+ if (options.exclude?.includes(p)) {
336
+ debug('Property % is excluded by %s', p, options.exclude);
337
+ continue;
338
+ }
339
+ if (meta.properties?.[p]?.type == null) {
340
+ // Circular import of model classes can lead to this situation
341
+ throw new Error(`Property ${ctor.name}.${p} does not have "type" in its definition`);
342
+ }
343
+ result.properties = result.properties ?? {};
344
+ result.properties[p] = result.properties[p] || {};
345
+ const metaProperty = { ...meta.properties[p] };
346
+ if (!metaProperty.type) {
347
+ throw new Error(`Property ${p} does not have a type`);
348
+ }
349
+ // populating "properties" key
350
+ result.properties[p] = metaToJsonProperty(metaProperty);
351
+ // handling 'required' metadata
352
+ const optional = options.optional.includes(p);
353
+ if (metaProperty.required && !(partial || optional)) {
354
+ result.required = result.required ?? [];
355
+ result.required.push(p);
356
+ }
357
+ // populating JSON Schema 'definitions'
358
+ // shimks: ugly type casting; this should be replaced by logic to throw
359
+ // error if itemType/type is not a string or a function
360
+ const resolvedType = (0, type_resolver_1.resolveType)(metaProperty.type);
361
+ const referenceType = isArrayType(resolvedType)
362
+ ? // shimks: ugly type casting; this should be replaced by logic to throw
363
+ // error if itemType/type is not a string or a function
364
+ (0, type_resolver_1.resolveType)(metaProperty.itemType)
365
+ : resolvedType;
366
+ if (typeof referenceType !== 'function' || (0, type_resolver_1.isBuiltinType)(referenceType)) {
367
+ continue;
368
+ }
369
+ const propOptions = { ...options };
370
+ if (propOptions.partial !== 'deep') {
371
+ // Do not cascade `partial` to nested properties
372
+ delete propOptions.partial;
373
+ }
374
+ if (propOptions.includeRelations === true) {
375
+ // Do not cascade `includeRelations` to nested properties
376
+ delete propOptions.includeRelations;
377
+ }
378
+ // `title` is the unique identity of a schema,
379
+ // it should be removed from the `options`
380
+ // when generating the relation or property schemas
381
+ delete propOptions.title;
382
+ const propSchema = getJsonSchema(referenceType, propOptions);
383
+ // JSONSchema6Definition allows both boolean and JSONSchema6 types
384
+ if (typeof result.properties[p] !== 'boolean') {
385
+ const prop = result.properties[p];
386
+ const propTitle = propSchema.title ?? referenceType.name;
387
+ const targetRef = { $ref: `#/definitions/${propTitle}` };
388
+ if (prop.type === 'array' && prop.items) {
389
+ // Update $ref for array type
390
+ prop.items = targetRef;
391
+ }
392
+ else {
393
+ result.properties[p] = targetRef;
394
+ }
395
+ includeReferencedSchema(propTitle, propSchema);
396
+ }
397
+ }
398
+ result.additionalProperties = meta.settings.strict === false;
399
+ debug(' additionalProperties?', result.additionalProperties);
400
+ if (options.includeRelations) {
401
+ for (const r in meta.relations) {
402
+ result.properties = result.properties ?? {};
403
+ const relMeta = meta.relations[r];
404
+ if (!relMeta)
405
+ continue;
406
+ const targetType = (0, type_resolver_1.resolveType)(relMeta.target);
407
+ // `title` is the unique identity of a schema,
408
+ // it should be removed from the `options`
409
+ // when generating the relation or property schemas
410
+ const targetOptions = { ...options };
411
+ delete targetOptions.title;
412
+ const targetSchema = getJsonSchema(targetType, targetOptions);
413
+ const targetRef = { $ref: `#/definitions/${targetSchema.title}` };
414
+ const propDef = getNavigationalPropertyForRelation(relMeta, targetRef);
415
+ result.properties[relMeta.name] =
416
+ result.properties[relMeta.name] || propDef;
417
+ includeReferencedSchema(targetSchema.title, targetSchema);
418
+ }
419
+ }
420
+ function includeReferencedSchema(name, schema) {
421
+ if (!schema || !Object.keys(schema).length)
422
+ return;
423
+ // promote nested definition to the top level
424
+ if (result !== schema?.definitions) {
425
+ for (const key in schema.definitions) {
426
+ if (key === title)
427
+ continue;
428
+ result.definitions = result.definitions ?? {};
429
+ result.definitions[key] = schema.definitions[key];
430
+ }
431
+ delete schema.definitions;
432
+ }
433
+ if (result !== schema) {
434
+ result.definitions = result.definitions ?? {};
435
+ result.definitions[name] = schema;
436
+ }
437
+ }
438
+ if (meta.jsonSchema) {
439
+ Object.assign(result, meta.jsonSchema);
440
+ }
441
+ return result;
442
+ }
443
+ //# sourceMappingURL=build-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-schema.js","sourceRoot":"","sources":["../../../src/core/Loopback/build-schema.ts"],"names":[],"mappings":"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"}