@loopback/repository 4.0.0-alpha.9 → 4.0.0

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 (463) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +93 -389
  3. package/dist/common-types.d.ts +96 -0
  4. package/dist/common-types.js +24 -0
  5. package/dist/common-types.js.map +1 -0
  6. package/dist/connectors/connector.d.ts +48 -0
  7. package/{lib → dist/connectors}/connector.js +1 -1
  8. package/dist/connectors/connector.js.map +1 -0
  9. package/{lib/crud-connector.d.ts → dist/connectors/crud.connector.d.ts} +51 -51
  10. package/{lib/common-types.js → dist/connectors/crud.connector.js} +2 -2
  11. package/dist/connectors/crud.connector.js.map +1 -0
  12. package/dist/connectors/index.d.ts +3 -0
  13. package/dist/connectors/index.js +11 -0
  14. package/dist/connectors/index.js.map +1 -0
  15. package/{lib6/kv-connector.d.ts → dist/connectors/kv.connector.d.ts} +28 -28
  16. package/{lib/datasource.js → dist/connectors/kv.connector.js} +2 -2
  17. package/dist/connectors/kv.connector.js.map +1 -0
  18. package/dist/datasource.d.ts +27 -0
  19. package/{lib6 → dist}/datasource.js +1 -1
  20. package/dist/datasource.js.map +1 -0
  21. package/dist/decorators/index.d.ts +3 -0
  22. package/dist/decorators/index.js +11 -0
  23. package/dist/decorators/index.js.map +1 -0
  24. package/dist/decorators/metadata.d.ts +12 -0
  25. package/dist/decorators/metadata.js +51 -0
  26. package/dist/decorators/metadata.js.map +1 -0
  27. package/dist/decorators/model.decorator.d.ts +40 -0
  28. package/dist/decorators/model.decorator.js +112 -0
  29. package/dist/decorators/model.decorator.js.map +1 -0
  30. package/dist/decorators/repository.decorator.d.ts +106 -0
  31. package/dist/decorators/repository.decorator.js +114 -0
  32. package/dist/decorators/repository.decorator.js.map +1 -0
  33. package/dist/define-model-class.d.ts +55 -0
  34. package/dist/define-model-class.js +57 -0
  35. package/dist/define-model-class.js.map +1 -0
  36. package/dist/define-repository-class.d.ts +119 -0
  37. package/dist/define-repository-class.js +98 -0
  38. package/dist/define-repository-class.js.map +1 -0
  39. package/dist/errors/entity-not-found.error.d.ts +8 -0
  40. package/dist/errors/entity-not-found.error.js +28 -0
  41. package/dist/errors/entity-not-found.error.js.map +1 -0
  42. package/dist/errors/index.d.ts +2 -0
  43. package/dist/errors/index.js +10 -0
  44. package/dist/errors/index.js.map +1 -0
  45. package/dist/errors/invalid-relation.error.d.ts +10 -0
  46. package/dist/errors/invalid-relation.error.js +28 -0
  47. package/dist/errors/invalid-relation.error.js.map +1 -0
  48. package/dist/index.d.ts +30 -0
  49. package/dist/index.js +39 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/keys.d.ts +34 -0
  52. package/dist/keys.js +44 -0
  53. package/dist/keys.js.map +1 -0
  54. package/dist/mixins/index.d.ts +1 -0
  55. package/dist/mixins/index.js +9 -0
  56. package/dist/mixins/index.js.map +1 -0
  57. package/dist/mixins/repository.mixin.d.ts +377 -0
  58. package/dist/mixins/repository.mixin.js +405 -0
  59. package/dist/mixins/repository.mixin.js.map +1 -0
  60. package/dist/model.d.ts +232 -0
  61. package/dist/model.js +367 -0
  62. package/dist/model.js.map +1 -0
  63. package/dist/relations/belongs-to/belongs-to.accessor.d.ts +17 -0
  64. package/dist/relations/belongs-to/belongs-to.accessor.js +40 -0
  65. package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -0
  66. package/dist/relations/belongs-to/belongs-to.decorator.d.ts +11 -0
  67. package/dist/relations/belongs-to/belongs-to.decorator.js +64 -0
  68. package/dist/relations/belongs-to/belongs-to.decorator.js.map +1 -0
  69. package/dist/relations/belongs-to/belongs-to.helpers.d.ts +17 -0
  70. package/dist/relations/belongs-to/belongs-to.helpers.js +63 -0
  71. package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -0
  72. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +14 -0
  73. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +36 -0
  74. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -0
  75. package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -0
  76. package/dist/relations/belongs-to/belongs-to.repository.js +33 -0
  77. package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -0
  78. package/dist/relations/belongs-to/index.d.ts +4 -0
  79. package/dist/relations/belongs-to/index.js +12 -0
  80. package/dist/relations/belongs-to/index.js.map +1 -0
  81. package/dist/relations/has-many/has-many-through.helpers.d.ts +182 -0
  82. package/dist/relations/has-many/has-many-through.helpers.js +282 -0
  83. package/dist/relations/has-many/has-many-through.helpers.js.map +1 -0
  84. package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +16 -0
  85. package/dist/relations/has-many/has-many-through.inclusion-resolver.js +78 -0
  86. package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -0
  87. package/dist/relations/has-many/has-many-through.repository-factory.d.ts +17 -0
  88. package/dist/relations/has-many/has-many-through.repository-factory.js +37 -0
  89. package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -0
  90. package/dist/relations/has-many/has-many-through.repository.d.ts +114 -0
  91. package/dist/relations/has-many/has-many-through.repository.js +103 -0
  92. package/dist/relations/has-many/has-many-through.repository.js.map +1 -0
  93. package/dist/relations/has-many/has-many.decorator.d.ts +11 -0
  94. package/dist/relations/has-many/has-many.decorator.js +36 -0
  95. package/dist/relations/has-many/has-many.decorator.js.map +1 -0
  96. package/dist/relations/has-many/has-many.helpers.d.ts +26 -0
  97. package/dist/relations/has-many/has-many.helpers.js +78 -0
  98. package/dist/relations/has-many/has-many.helpers.js.map +1 -0
  99. package/dist/relations/has-many/has-many.inclusion-resolver.d.ts +14 -0
  100. package/dist/relations/has-many/has-many.inclusion-resolver.js +45 -0
  101. package/dist/relations/has-many/has-many.inclusion-resolver.js.map +1 -0
  102. package/dist/relations/has-many/has-many.repository-factory.d.ts +28 -0
  103. package/dist/relations/has-many/has-many.repository-factory.js +39 -0
  104. package/dist/relations/has-many/has-many.repository-factory.js.map +1 -0
  105. package/dist/relations/has-many/has-many.repository.d.ts +54 -0
  106. package/dist/relations/has-many/has-many.repository.js +38 -0
  107. package/dist/relations/has-many/has-many.repository.js.map +1 -0
  108. package/dist/relations/has-many/index.d.ts +6 -0
  109. package/dist/relations/has-many/index.js +14 -0
  110. package/dist/relations/has-many/index.js.map +1 -0
  111. package/dist/relations/has-one/has-one.decorator.d.ts +3 -0
  112. package/dist/relations/has-one/has-one.decorator.js +37 -0
  113. package/dist/relations/has-one/has-one.decorator.js.map +1 -0
  114. package/dist/relations/has-one/has-one.helpers.d.ts +17 -0
  115. package/dist/relations/has-one/has-one.helpers.js +64 -0
  116. package/dist/relations/has-one/has-one.helpers.js.map +1 -0
  117. package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +14 -0
  118. package/dist/relations/has-one/has-one.inclusion-resolver.js +35 -0
  119. package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -0
  120. package/dist/relations/has-one/has-one.repository-factory.d.ts +28 -0
  121. package/dist/relations/has-one/has-one.repository-factory.js +39 -0
  122. package/dist/relations/has-one/has-one.repository-factory.js.map +1 -0
  123. package/dist/relations/has-one/has-one.repository.d.ts +53 -0
  124. package/dist/relations/has-one/has-one.repository.js +45 -0
  125. package/dist/relations/has-one/has-one.repository.js.map +1 -0
  126. package/dist/relations/has-one/index.d.ts +3 -0
  127. package/dist/relations/has-one/index.js +11 -0
  128. package/dist/relations/has-one/index.js.map +1 -0
  129. package/dist/relations/index.d.ts +6 -0
  130. package/dist/relations/index.js +14 -0
  131. package/dist/relations/index.js.map +1 -0
  132. package/dist/relations/relation.decorator.d.ts +39 -0
  133. package/dist/relations/relation.decorator.js +88 -0
  134. package/dist/relations/relation.decorator.js.map +1 -0
  135. package/dist/relations/relation.helpers.d.ts +105 -0
  136. package/dist/relations/relation.helpers.js +298 -0
  137. package/dist/relations/relation.helpers.js.map +1 -0
  138. package/dist/relations/relation.types.d.ts +142 -0
  139. package/dist/relations/relation.types.js +21 -0
  140. package/dist/relations/relation.types.js.map +1 -0
  141. package/dist/repositories/constraint-utils.d.ts +49 -0
  142. package/dist/repositories/constraint-utils.js +87 -0
  143. package/dist/repositories/constraint-utils.js.map +1 -0
  144. package/dist/repositories/index.d.ts +5 -0
  145. package/dist/repositories/index.js +13 -0
  146. package/dist/repositories/index.js.map +1 -0
  147. package/dist/repositories/kv.repository.bridge.d.ts +30 -0
  148. package/dist/repositories/kv.repository.bridge.js +76 -0
  149. package/dist/repositories/kv.repository.bridge.js.map +1 -0
  150. package/dist/repositories/kv.repository.d.ts +74 -0
  151. package/{lib/crud-connector.js → dist/repositories/kv.repository.js} +2 -2
  152. package/dist/repositories/kv.repository.js.map +1 -0
  153. package/dist/repositories/legacy-juggler-bridge.d.ts +305 -0
  154. package/dist/repositories/legacy-juggler-bridge.js +452 -0
  155. package/dist/repositories/legacy-juggler-bridge.js.map +1 -0
  156. package/dist/repositories/repository.d.ts +223 -0
  157. package/dist/repositories/repository.js +157 -0
  158. package/dist/repositories/repository.js.map +1 -0
  159. package/dist/transaction.d.ts +30 -0
  160. package/dist/transaction.js +18 -0
  161. package/dist/transaction.js.map +1 -0
  162. package/dist/type-resolver.d.ts +42 -0
  163. package/dist/type-resolver.js +61 -0
  164. package/dist/type-resolver.js.map +1 -0
  165. package/{lib → dist}/types/any.d.ts +1 -1
  166. package/{lib6 → dist}/types/any.js +3 -2
  167. package/dist/types/any.js.map +1 -0
  168. package/{lib6 → dist}/types/array.d.ts +4 -4
  169. package/{lib → dist}/types/array.js +6 -4
  170. package/dist/types/array.js.map +1 -0
  171. package/{lib → dist}/types/boolean.d.ts +1 -1
  172. package/{lib6 → dist}/types/boolean.js +3 -2
  173. package/dist/types/boolean.js.map +1 -0
  174. package/{lib6 → dist}/types/buffer.d.ts +2 -2
  175. package/{lib → dist}/types/buffer.js +8 -6
  176. package/dist/types/buffer.js.map +1 -0
  177. package/{lib → dist}/types/date.d.ts +1 -1
  178. package/{lib → dist}/types/date.js +6 -4
  179. package/dist/types/date.js.map +1 -0
  180. package/{lib → dist}/types/index.d.ts +11 -9
  181. package/dist/types/index.js +49 -0
  182. package/dist/types/index.js.map +1 -0
  183. package/{lib6 → dist}/types/model.d.ts +2 -1
  184. package/{lib6 → dist}/types/model.js +2 -2
  185. package/dist/types/model.js.map +1 -0
  186. package/dist/types/null.d.ts +12 -0
  187. package/{lib/types/boolean.js → dist/types/null.js} +12 -11
  188. package/dist/types/null.js.map +1 -0
  189. package/{lib6 → dist}/types/number.d.ts +1 -1
  190. package/{lib → dist}/types/number.js +6 -4
  191. package/dist/types/number.js.map +1 -0
  192. package/{lib → dist}/types/object.d.ts +1 -1
  193. package/{lib → dist}/types/object.js +7 -6
  194. package/dist/types/object.js.map +1 -0
  195. package/{lib → dist}/types/string.d.ts +1 -1
  196. package/{lib → dist}/types/string.js +3 -2
  197. package/dist/types/string.js.map +1 -0
  198. package/{lib6 → dist}/types/type.d.ts +7 -7
  199. package/{lib6 → dist}/types/type.js +1 -1
  200. package/dist/types/type.js.map +1 -0
  201. package/{lib → dist}/types/union.d.ts +1 -1
  202. package/{lib → dist}/types/union.js +6 -4
  203. package/dist/types/union.js.map +1 -0
  204. package/package.json +49 -33
  205. package/src/common-types.ts +123 -0
  206. package/src/connectors/connector.ts +70 -0
  207. package/src/connectors/crud.connector.ts +208 -0
  208. package/src/connectors/index.ts +8 -0
  209. package/src/connectors/kv.connector.ts +113 -0
  210. package/src/datasource.ts +37 -0
  211. package/src/decorators/index.ts +8 -0
  212. package/src/decorators/metadata.ts +84 -0
  213. package/src/decorators/model.decorator.ts +166 -0
  214. package/src/decorators/repository.decorator.ts +223 -0
  215. package/src/define-model-class.ts +90 -0
  216. package/src/define-repository-class.ts +170 -0
  217. package/src/errors/entity-not-found.error.ts +40 -0
  218. package/src/errors/index.ts +7 -0
  219. package/src/errors/invalid-relation.error.ts +39 -0
  220. package/src/index.ts +36 -0
  221. package/src/keys.ts +40 -0
  222. package/{index.d.ts → src/mixins/index.ts} +2 -2
  223. package/src/mixins/repository.mixin.ts +499 -0
  224. package/src/model.ts +539 -0
  225. package/src/relations/belongs-to/belongs-to.accessor.ts +74 -0
  226. package/src/relations/belongs-to/belongs-to.decorator.ts +81 -0
  227. package/src/relations/belongs-to/belongs-to.helpers.ts +78 -0
  228. package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +71 -0
  229. package/src/relations/belongs-to/belongs-to.repository.ts +55 -0
  230. package/src/relations/belongs-to/index.ts +9 -0
  231. package/src/relations/has-many/has-many-through.helpers.ts +361 -0
  232. package/src/relations/has-many/has-many-through.inclusion-resolver.ts +135 -0
  233. package/src/relations/has-many/has-many-through.repository-factory.ts +121 -0
  234. package/src/relations/has-many/has-many-through.repository.ts +318 -0
  235. package/src/relations/has-many/has-many.decorator.ts +38 -0
  236. package/src/relations/has-many/has-many.helpers.ts +100 -0
  237. package/src/relations/has-many/has-many.inclusion-resolver.ts +88 -0
  238. package/src/relations/has-many/has-many.repository-factory.ts +76 -0
  239. package/src/relations/has-many/has-many.repository.ts +118 -0
  240. package/src/relations/has-many/index.ts +11 -0
  241. package/src/relations/has-one/has-one.decorator.ts +40 -0
  242. package/src/relations/has-one/has-one.helpers.ts +84 -0
  243. package/src/relations/has-one/has-one.inclusion-resolver.ts +65 -0
  244. package/src/relations/has-one/has-one.repository-factory.ts +72 -0
  245. package/src/relations/has-one/has-one.repository.ts +127 -0
  246. package/src/relations/has-one/index.ts +8 -0
  247. package/src/relations/index.ts +11 -0
  248. package/src/relations/relation.decorator.ts +90 -0
  249. package/src/relations/relation.helpers.ts +364 -0
  250. package/src/relations/relation.types.ts +180 -0
  251. package/src/repositories/constraint-utils.ts +98 -0
  252. package/src/repositories/index.ts +10 -0
  253. package/src/repositories/kv.repository.bridge.ts +97 -0
  254. package/src/repositories/kv.repository.ts +87 -0
  255. package/src/repositories/legacy-juggler-bridge.ts +788 -0
  256. package/src/repositories/repository.ts +441 -0
  257. package/src/transaction.ts +39 -0
  258. package/src/type-resolver.ts +98 -0
  259. package/src/types/any.ts +38 -0
  260. package/src/types/array.ts +53 -0
  261. package/src/types/boolean.ts +35 -0
  262. package/src/types/buffer.ts +53 -0
  263. package/src/types/date.ts +61 -0
  264. package/src/types/index.ts +52 -0
  265. package/src/types/model.ts +24 -0
  266. package/src/types/null.ts +35 -0
  267. package/src/types/number.ts +42 -0
  268. package/src/types/object.ts +53 -0
  269. package/src/types/string.ts +42 -0
  270. package/src/types/type.ts +51 -0
  271. package/src/types/union.ts +55 -0
  272. package/api-docs/apple-touch-icon-114x114-precomposed.png +0 -0
  273. package/api-docs/apple-touch-icon-144x144-precomposed.png +0 -0
  274. package/api-docs/apple-touch-icon-57x57-precomposed.png +0 -0
  275. package/api-docs/apple-touch-icon-72x72-precomposed.png +0 -0
  276. package/api-docs/apple-touch-icon-precomposed.png +0 -0
  277. package/api-docs/apple-touch-icon.png +0 -0
  278. package/api-docs/css/bootstrap.min.css +0 -9
  279. package/api-docs/css/code-themes/arta.css +0 -158
  280. package/api-docs/css/code-themes/ascetic.css +0 -50
  281. package/api-docs/css/code-themes/brown_paper.css +0 -104
  282. package/api-docs/css/code-themes/brown_papersq.png +0 -0
  283. package/api-docs/css/code-themes/dark.css +0 -103
  284. package/api-docs/css/code-themes/default.css +0 -135
  285. package/api-docs/css/code-themes/far.css +0 -111
  286. package/api-docs/css/code-themes/github.css +0 -127
  287. package/api-docs/css/code-themes/googlecode.css +0 -144
  288. package/api-docs/css/code-themes/idea.css +0 -121
  289. package/api-docs/css/code-themes/ir_black.css +0 -104
  290. package/api-docs/css/code-themes/magula.css +0 -121
  291. package/api-docs/css/code-themes/monokai.css +0 -114
  292. package/api-docs/css/code-themes/pojoaque.css +0 -104
  293. package/api-docs/css/code-themes/pojoaque.jpg +0 -0
  294. package/api-docs/css/code-themes/rainbow.css +0 -114
  295. package/api-docs/css/code-themes/school_book.css +0 -111
  296. package/api-docs/css/code-themes/school_book.png +0 -0
  297. package/api-docs/css/code-themes/sl-theme.css +0 -45
  298. package/api-docs/css/code-themes/solarized_dark.css +0 -88
  299. package/api-docs/css/code-themes/solarized_light.css +0 -88
  300. package/api-docs/css/code-themes/sunburst.css +0 -158
  301. package/api-docs/css/code-themes/tomorrow-night-blue.css +0 -52
  302. package/api-docs/css/code-themes/tomorrow-night-bright.css +0 -51
  303. package/api-docs/css/code-themes/tomorrow-night-eighties.css +0 -51
  304. package/api-docs/css/code-themes/tomorrow-night.css +0 -52
  305. package/api-docs/css/code-themes/tomorrow.css +0 -49
  306. package/api-docs/css/code-themes/vs.css +0 -86
  307. package/api-docs/css/code-themes/xcode.css +0 -154
  308. package/api-docs/css/code-themes/zenburn.css +0 -115
  309. package/api-docs/css/main.css +0 -139
  310. package/api-docs/favicon.ico +0 -0
  311. package/api-docs/fonts/0ihfXUL2emPh0ROJezvraLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  312. package/api-docs/fonts/OsJ2DjdpjqFRVUSto6IffLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  313. package/api-docs/fonts/_aijTyevf54tkVDLy-dlnLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  314. package/api-docs/index.html +0 -18017
  315. package/api-docs/js/main.js +0 -19
  316. package/api-docs/js/vendor/bootstrap.min.js +0 -6
  317. package/api-docs/js/vendor/jquery-1.10.1.min.js +0 -6
  318. package/api-docs/js/vendor/jquery.scrollTo-1.4.3.1.js +0 -218
  319. package/api-docs/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +0 -11
  320. package/index.js +0 -9
  321. package/lib/common-types.d.ts +0 -44
  322. package/lib/common-types.js.map +0 -1
  323. package/lib/connector.d.ts +0 -12
  324. package/lib/connector.js.map +0 -1
  325. package/lib/crud-connector.js.map +0 -1
  326. package/lib/datasource.d.ts +0 -11
  327. package/lib/datasource.js.map +0 -1
  328. package/lib/decorators/model.d.ts +0 -17
  329. package/lib/decorators/model.js +0 -55
  330. package/lib/decorators/model.js.map +0 -1
  331. package/lib/decorators/relation.d.ts +0 -65
  332. package/lib/decorators/relation.js +0 -126
  333. package/lib/decorators/relation.js.map +0 -1
  334. package/lib/decorators/repository.d.ts +0 -61
  335. package/lib/decorators/repository.js +0 -107
  336. package/lib/decorators/repository.js.map +0 -1
  337. package/lib/index.d.ts +0 -17
  338. package/lib/index.js +0 -21
  339. package/lib/index.js.map +0 -1
  340. package/lib/kv-connector.d.ts +0 -77
  341. package/lib/kv-connector.js +0 -7
  342. package/lib/kv-connector.js.map +0 -1
  343. package/lib/kv-repository.d.ts +0 -78
  344. package/lib/kv-repository.js +0 -7
  345. package/lib/kv-repository.js.map +0 -1
  346. package/lib/legacy-juggler-bridge.d.ts +0 -53
  347. package/lib/legacy-juggler-bridge.js +0 -142
  348. package/lib/legacy-juggler-bridge.js.map +0 -1
  349. package/lib/loopback-datasource-juggler.d.ts +0 -666
  350. package/lib/loopback-datasource-juggler.js +0 -8
  351. package/lib/loopback-datasource-juggler.js.map +0 -1
  352. package/lib/mixin.d.ts +0 -43
  353. package/lib/mixin.js +0 -34
  354. package/lib/mixin.js.map +0 -1
  355. package/lib/model.d.ts +0 -137
  356. package/lib/model.js +0 -182
  357. package/lib/model.js.map +0 -1
  358. package/lib/query.d.ts +0 -112
  359. package/lib/query.js +0 -25
  360. package/lib/query.js.map +0 -1
  361. package/lib/repository-mixin.d.ts +0 -20
  362. package/lib/repository-mixin.js +0 -111
  363. package/lib/repository-mixin.js.map +0 -1
  364. package/lib/repository.d.ts +0 -172
  365. package/lib/repository.js +0 -128
  366. package/lib/repository.js.map +0 -1
  367. package/lib/types/any.js +0 -35
  368. package/lib/types/any.js.map +0 -1
  369. package/lib/types/array.d.ts +0 -14
  370. package/lib/types/array.js.map +0 -1
  371. package/lib/types/boolean.js.map +0 -1
  372. package/lib/types/buffer.d.ts +0 -14
  373. package/lib/types/buffer.js.map +0 -1
  374. package/lib/types/date.js.map +0 -1
  375. package/lib/types/index.js +0 -33
  376. package/lib/types/index.js.map +0 -1
  377. package/lib/types/model.d.ts +0 -11
  378. package/lib/types/model.js +0 -25
  379. package/lib/types/model.js.map +0 -1
  380. package/lib/types/number.d.ts +0 -12
  381. package/lib/types/number.js.map +0 -1
  382. package/lib/types/object.js.map +0 -1
  383. package/lib/types/string.js.map +0 -1
  384. package/lib/types/type.d.ts +0 -38
  385. package/lib/types/type.js +0 -7
  386. package/lib/types/type.js.map +0 -1
  387. package/lib/types/union.js.map +0 -1
  388. package/lib6/common-types.d.ts +0 -44
  389. package/lib6/common-types.js +0 -7
  390. package/lib6/common-types.js.map +0 -1
  391. package/lib6/connector.d.ts +0 -12
  392. package/lib6/connector.js +0 -7
  393. package/lib6/connector.js.map +0 -1
  394. package/lib6/crud-connector.d.ts +0 -130
  395. package/lib6/crud-connector.js +0 -7
  396. package/lib6/crud-connector.js.map +0 -1
  397. package/lib6/datasource.d.ts +0 -11
  398. package/lib6/datasource.js.map +0 -1
  399. package/lib6/decorators/model.d.ts +0 -17
  400. package/lib6/decorators/model.js +0 -55
  401. package/lib6/decorators/model.js.map +0 -1
  402. package/lib6/decorators/relation.d.ts +0 -65
  403. package/lib6/decorators/relation.js +0 -126
  404. package/lib6/decorators/relation.js.map +0 -1
  405. package/lib6/decorators/repository.d.ts +0 -61
  406. package/lib6/decorators/repository.js +0 -117
  407. package/lib6/decorators/repository.js.map +0 -1
  408. package/lib6/index.d.ts +0 -17
  409. package/lib6/index.js +0 -21
  410. package/lib6/index.js.map +0 -1
  411. package/lib6/kv-connector.js +0 -7
  412. package/lib6/kv-connector.js.map +0 -1
  413. package/lib6/kv-repository.d.ts +0 -78
  414. package/lib6/kv-repository.js +0 -7
  415. package/lib6/kv-repository.js.map +0 -1
  416. package/lib6/legacy-juggler-bridge.d.ts +0 -53
  417. package/lib6/legacy-juggler-bridge.js +0 -158
  418. package/lib6/legacy-juggler-bridge.js.map +0 -1
  419. package/lib6/loopback-datasource-juggler.d.ts +0 -666
  420. package/lib6/loopback-datasource-juggler.js +0 -8
  421. package/lib6/loopback-datasource-juggler.js.map +0 -1
  422. package/lib6/mixin.d.ts +0 -43
  423. package/lib6/mixin.js +0 -34
  424. package/lib6/mixin.js.map +0 -1
  425. package/lib6/model.d.ts +0 -137
  426. package/lib6/model.js +0 -182
  427. package/lib6/model.js.map +0 -1
  428. package/lib6/query.d.ts +0 -112
  429. package/lib6/query.js +0 -25
  430. package/lib6/query.js.map +0 -1
  431. package/lib6/repository-mixin.d.ts +0 -20
  432. package/lib6/repository-mixin.js +0 -111
  433. package/lib6/repository-mixin.js.map +0 -1
  434. package/lib6/repository.d.ts +0 -172
  435. package/lib6/repository.js +0 -128
  436. package/lib6/repository.js.map +0 -1
  437. package/lib6/types/any.d.ts +0 -12
  438. package/lib6/types/any.js.map +0 -1
  439. package/lib6/types/array.js +0 -53
  440. package/lib6/types/array.js.map +0 -1
  441. package/lib6/types/boolean.d.ts +0 -12
  442. package/lib6/types/boolean.js.map +0 -1
  443. package/lib6/types/buffer.js +0 -57
  444. package/lib6/types/buffer.js.map +0 -1
  445. package/lib6/types/date.d.ts +0 -12
  446. package/lib6/types/date.js +0 -60
  447. package/lib6/types/date.js.map +0 -1
  448. package/lib6/types/index.d.ts +0 -30
  449. package/lib6/types/index.js +0 -33
  450. package/lib6/types/index.js.map +0 -1
  451. package/lib6/types/model.js.map +0 -1
  452. package/lib6/types/number.js +0 -40
  453. package/lib6/types/number.js.map +0 -1
  454. package/lib6/types/object.d.ts +0 -15
  455. package/lib6/types/object.js +0 -49
  456. package/lib6/types/object.js.map +0 -1
  457. package/lib6/types/string.d.ts +0 -12
  458. package/lib6/types/string.js +0 -40
  459. package/lib6/types/string.js.map +0 -1
  460. package/lib6/types/type.js.map +0 -1
  461. package/lib6/types/union.d.ts +0 -14
  462. package/lib6/types/union.js +0 -51
  463. package/lib6/types/union.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ // Copyright IBM Corp. 2017,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ /**
7
+ * Common types/interfaces such as Class/Constructor/Options/Callback
8
+ */
9
+ /* eslint-disable @typescript-eslint/no-explicit-any */
10
+
11
+ /**
12
+ * Interface for classes with `new` operator and static properties/methods
13
+ */
14
+ export interface Class<T> {
15
+ // new MyClass(...args) ==> T
16
+ new (...args: any[]): T;
17
+ // Other static properties/operations
18
+ [property: string]: any;
19
+ }
20
+
21
+ /**
22
+ * Interface for constructor functions without `new` operator.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * function Foo(x) {
27
+ * if (!(this instanceof Foo)) { return new Foo(x); }
28
+ * this.x = x;
29
+ * }
30
+ * ```
31
+ */
32
+ export interface ConstructorFunction<T> {
33
+ (...args: any[]): T;
34
+ }
35
+
36
+ /**
37
+ * Constructor type - class or function
38
+ */
39
+ export type Constructor<T> = Class<T> | ConstructorFunction<T>;
40
+
41
+ /**
42
+ * Objects with open properties
43
+ */
44
+ export interface AnyObject {
45
+ [property: string]: any;
46
+ }
47
+
48
+ /**
49
+ * An extension of the built-in Partial<T> type which allows partial values
50
+ * in deeply nested properties too.
51
+ */
52
+ export type DeepPartial<T> =
53
+ | Partial<T> // handle free-form properties, e.g. DeepPartial<AnyObject>
54
+ | {[P in keyof T]?: DeepPartial<T[P]>};
55
+
56
+ /**
57
+ * Type alias for strongly or weakly typed objects of T
58
+ */
59
+ export type DataObject<T extends object> = T | DeepPartial<T>;
60
+
61
+ /**
62
+ * Type alias for Node.js options object
63
+ */
64
+ export type Options = AnyObject;
65
+
66
+ /**
67
+ * Type alias for Node.js callback functions
68
+ */
69
+ export type Callback<T> = (
70
+ err: Error | string | null | undefined,
71
+ result?: T,
72
+ ) => void;
73
+
74
+ /**
75
+ * Type for a command
76
+ */
77
+ export type Command = string | AnyObject;
78
+
79
+ /**
80
+ * Named parameters, such as `{x: 1, y: 'a'}`
81
+ */
82
+ export type NamedParameters = AnyObject;
83
+
84
+ /**
85
+ * Positional parameters, such as [1, 'a']
86
+ */
87
+ export type PositionalParameters = any[];
88
+
89
+ /**
90
+ * Count of Model instances that were successful for methods like `updateAll`,
91
+ * `deleteAll`, etc.
92
+ */
93
+ export interface Count {
94
+ count: number;
95
+ }
96
+
97
+ /**
98
+ * JSON Schema describing the Count interface. It's the response type for
99
+ * REST calls to APIs which return `count`. The type is compatible with
100
+ * `SchemaObject` from `@loopback/openapi-v3`, which is not an explicit
101
+ * dependency for `@loopback/repository`.
102
+ */
103
+ export const CountSchema /* :SchemaObject */ = {
104
+ type: 'object' as const, // Force to be `object` type instead of `string`
105
+ title: 'loopback.Count',
106
+ 'x-typescript-type': '@loopback/repository#Count',
107
+ properties: {
108
+ count: {
109
+ type: 'number' as const, // Force to be `number` type instead of `string`
110
+ },
111
+ },
112
+ };
113
+
114
+ /**
115
+ * Type helper to infer prototype from a constructor function.
116
+ *
117
+ * Example: `PrototypeOf<typeof Entity>` is resolved to `Entity`.
118
+ */
119
+ export type PrototypeOf<Ctor extends Function> = Ctor extends {
120
+ prototype: infer Proto;
121
+ }
122
+ ? Proto
123
+ : never;
@@ -0,0 +1,70 @@
1
+ // Copyright IBM Corp. 2018,2019. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {
7
+ AnyObject,
8
+ Command,
9
+ NamedParameters,
10
+ Options,
11
+ PositionalParameters,
12
+ } from '../common-types';
13
+ import {Model} from '../model';
14
+
15
+ /**
16
+ * Interfaces adopted by a {@link Connector}.
17
+ *
18
+ * @experimental
19
+ */
20
+ export namespace ConnectorInterfaces {
21
+ /**
22
+ * Strong relation interfaces adopted by a {@link Connector}
23
+ *
24
+ * @experimental
25
+ */
26
+ export const enum StrongRelation {
27
+ BELONGS_TO = 'strongBelongsTo',
28
+ HAS_ONE = 'strongHasOne',
29
+ HAS_MANY = 'strongHasMany',
30
+ HAS_MANY_THROUGH = 'strongHasManyThrough',
31
+ HAS_AND_BELONGS_TO_MANY = 'strongHasAndBelongsToMany',
32
+ EMBEDS_ONE = 'strongEmbedsOne',
33
+ EMBEDS_MANY = 'strongEmbedsMany',
34
+ REFERNCES_MANY = 'strongReferencesMany',
35
+ }
36
+
37
+ /**
38
+ * Strong query join interfaces adopted by a {@link Connector}
39
+ *
40
+ * @experimental
41
+ */
42
+ export const enum StrongJoins {
43
+ INNER = 'strongInnerJoin',
44
+ LEFT = 'strongLeftJoin',
45
+ RIGHT = 'strongRightJoin',
46
+ FULL = 'strongFullJoin',
47
+ CARTESIAN = 'strongCartesianJoin',
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Common properties/operations for connectors
53
+ */
54
+ export interface Connector {
55
+ name: string; // Name/type of the connector
56
+ configModel?: Model; // The configuration model
57
+ interfaces?: (
58
+ | string
59
+ | ConnectorInterfaces.StrongRelation
60
+ | ConnectorInterfaces.StrongJoins
61
+ )[]; // A list of interfaces implemented by the connector
62
+ connect(): Promise<void>; // Connect to the underlying system
63
+ disconnect(): Promise<void>; // Disconnect from the underlying system
64
+ ping(): Promise<void>; // Ping the underlying system
65
+ execute?(
66
+ command: Command,
67
+ parameters: NamedParameters | PositionalParameters,
68
+ options?: Options,
69
+ ): Promise<AnyObject>;
70
+ }
@@ -0,0 +1,208 @@
1
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {Filter, Where} from '@loopback/filter';
7
+ import {Class, Count, Options} from '../common-types';
8
+ import {Entity, EntityData} from '../model';
9
+ import {Connector} from './connector';
10
+
11
+ /**
12
+ * CRUD operations for connector implementations
13
+ */
14
+ export interface CrudConnector extends Connector {
15
+ /**
16
+ * Create a new entity
17
+ * @param modelClass - The model class
18
+ * @param entity - The entity instance or data
19
+ * @param options - Options for the operation
20
+ * @returns A promise of the entity created
21
+ */
22
+ create(
23
+ modelClass: Class<Entity>,
24
+ entity: EntityData,
25
+ options?: Options,
26
+ ): Promise<EntityData>;
27
+
28
+ /**
29
+ * Create multiple entities
30
+ * @param modelClass - The model class
31
+ * @param entities - An array of entity instances or data
32
+ * @param options - Options for the operation
33
+ * @returns A promise of an array of entities created
34
+ */
35
+ createAll?(
36
+ modelClass: Class<Entity>,
37
+ entities: EntityData[],
38
+ options?: Options,
39
+ ): Promise<EntityData[]>;
40
+
41
+ /**
42
+ * Save an entity
43
+ * @param modelClass - The model class
44
+ * @param entity - The entity instance or data
45
+ * @param options - Options for the operation
46
+ * @returns A promise of the entity saved
47
+ */
48
+ save?(
49
+ modelClass: Class<Entity>,
50
+ entity: EntityData,
51
+ options?: Options,
52
+ ): Promise<EntityData>;
53
+
54
+ /**
55
+ * Find matching entities by the filter
56
+ * @param modelClass - The model class
57
+ * @param filter - The query filter
58
+ * @param options - Options for the operation
59
+ * @returns A promise of an array of entities found for the filter
60
+ */
61
+ find(
62
+ modelClass: Class<Entity>,
63
+ filter?: Filter,
64
+ options?: Options,
65
+ ): Promise<EntityData[]>;
66
+
67
+ /**
68
+ * Find an entity by id
69
+ * @param modelClass - The model class
70
+ * @param id - The entity id value
71
+ * @param options - Options for the operation
72
+ * @returns A promise of the entity found for the id
73
+ */
74
+ findById?<IdType>(
75
+ modelClass: Class<Entity>,
76
+ id: IdType,
77
+ options?: Options,
78
+ ): Promise<EntityData>;
79
+
80
+ /**
81
+ * Update an entity
82
+ * @param modelClass - The model class
83
+ * @param entity - The entity instance or data
84
+ * @param options - Options for the operation
85
+ * @returns Promise<true> if an entity is updated, otherwise
86
+ * Promise<false>
87
+ */
88
+ update?(
89
+ modelClass: Class<Entity>,
90
+ entity: EntityData,
91
+ options?: Options,
92
+ ): Promise<boolean>;
93
+
94
+ /**
95
+ * Delete an entity
96
+ * @param modelClass - The model class
97
+ * @param entity - The entity instance or data
98
+ * @param options - Options for the operation
99
+ * @returns Promise<true> if an entity is deleted, otherwise
100
+ * Promise<false>
101
+ */
102
+ delete?(
103
+ modelClass: Class<Entity>,
104
+ entity: EntityData,
105
+ options?: Options,
106
+ ): Promise<boolean>;
107
+
108
+ /**
109
+ * Update matching entities
110
+ * @param modelClass - The model class
111
+ * @param data - The data attributes to be updated
112
+ * @param where - The matching criteria
113
+ * @param options - Options for the operation
114
+ * @returns A promise of number of matching entities deleted
115
+ */
116
+ updateAll(
117
+ modelClass: Class<Entity>,
118
+ data: EntityData,
119
+ where?: Where<Entity>,
120
+ options?: Options,
121
+ ): Promise<Count>;
122
+
123
+ /**
124
+ * Update an entity by id
125
+ * @param modelClass - The model class
126
+ * @param id - The entity id value
127
+ * @param data - The data attributes to be updated
128
+ * @param options - Options for the operation
129
+ * @returns Promise<true> if an entity is updated for the id, otherwise
130
+ * Promise<false>
131
+ */
132
+ updateById?<IdType>(
133
+ modelClass: Class<Entity>,
134
+ id: IdType,
135
+ data: EntityData,
136
+ options?: Options,
137
+ ): Promise<boolean>;
138
+
139
+ /**
140
+ * Replace an entity by id
141
+ * @param modelClass - The model class
142
+ * @param id - The entity id value
143
+ * @param data - The data attributes to be updated
144
+ * @param options - Options for the operation
145
+ * @returns Promise<true> if an entity is replaced for the id, otherwise
146
+ * Promise<false>
147
+ */
148
+ replaceById?<IdType>(
149
+ modelClass: Class<Entity>,
150
+ id: IdType,
151
+ data: EntityData,
152
+ options?: Options,
153
+ ): Promise<boolean>;
154
+
155
+ /**
156
+ * Delete matching entities
157
+ * @param modelClass - The model class
158
+ * @param where - The matching criteria
159
+ * @param options - Options for the operation
160
+ * @returns A promise of number of matching entities deleted
161
+ */
162
+ deleteAll(
163
+ modelClass: Class<Entity>,
164
+ where?: Where<Entity>,
165
+ options?: Options,
166
+ ): Promise<Count>;
167
+
168
+ /**
169
+ * Delete an entity by id
170
+ * @param modelClass - The model class
171
+ * @param id - The entity id value
172
+ * @param options - Options for the operation
173
+ * @returns Promise<true> if an entity is deleted for the id, otherwise
174
+ * Promise<false>
175
+ */
176
+ deleteById?<IdType>(
177
+ modelClass: Class<Entity>,
178
+ id: IdType,
179
+ options?: Options,
180
+ ): Promise<boolean>;
181
+
182
+ /**
183
+ * Count matching entities
184
+ * @param modelClass - The model class
185
+ * @param where - The matching criteria
186
+ * @param options - Options for the operation
187
+ * @returns A promise of number of matching entities
188
+ */
189
+ count(
190
+ modelClass: Class<Entity>,
191
+ where?: Where<Entity>,
192
+ options?: Options,
193
+ ): Promise<Count>;
194
+
195
+ /**
196
+ * Check if an entity exists for the id
197
+ * @param modelClass - The model class
198
+ * @param id - The entity id value
199
+ * @param options - Options for the operation
200
+ * @returns Promise<true> if an entity exists for the id, otherwise
201
+ * Promise<false>
202
+ */
203
+ exists?<IdType>(
204
+ modelClass: Class<Entity>,
205
+ id: IdType,
206
+ options?: Options,
207
+ ): Promise<boolean>;
208
+ }
@@ -0,0 +1,8 @@
1
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ export * from './connector';
7
+ export * from './crud.connector';
8
+ export * from './kv.connector';
@@ -0,0 +1,113 @@
1
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {Filter} from '@loopback/filter';
7
+ import {Class, Options} from '../common-types';
8
+ import {Entity, EntityData} from '../model';
9
+ import {Connector} from './connector';
10
+
11
+ /**
12
+ * Key/Value operations for connector implementations
13
+ */
14
+ export interface KVConnector<T extends Entity> extends Connector {
15
+ /**
16
+ * Delete an entry by key
17
+ * @param modelClass - Model class
18
+ * @param key - Key for the entry
19
+ * @param options - Options for the operation
20
+ * @returns Promise<true> if an entry is deleted for the id, otherwise
21
+ * Promise<false>
22
+ */
23
+ delete(
24
+ modelClass: Class<Entity>,
25
+ key: string,
26
+ options?: Options,
27
+ ): Promise<boolean>;
28
+
29
+ /**
30
+ * Delete all entries
31
+ * @param modelClass - Model class
32
+ * @param options - Options for the operation
33
+ * @returns A promise of the number of entries deleted
34
+ */
35
+ deleteAll(modelClass: Class<Entity>, options?: Options): Promise<number>;
36
+
37
+ /**
38
+ * Get an entry by key
39
+ * @param modelClass - Model class
40
+ * @param key - Key for the entry
41
+ * @param options - Options for the operation
42
+ * @returns A promise of the entry found for the key
43
+ */
44
+ get(modelClass: Class<Entity>, key: string, options?: Options): Promise<T>;
45
+
46
+ /**
47
+ * Set an entry with key/value
48
+ * @param modelClass - Model class
49
+ * @param key - Key for the entry
50
+ * @param value - Value for the entry
51
+ * @param options - Options for the operation
52
+ * @returns Promise<true> if an entry is set for the key, otherwise
53
+ * Promise<false>
54
+ */
55
+ set(
56
+ modelClass: Class<Entity>,
57
+ key: string,
58
+ value: EntityData,
59
+ options?: Options,
60
+ ): Promise<boolean>;
61
+
62
+ /**
63
+ * Set up ttl for an entry by key
64
+ * @param modelClass - Model class
65
+ * @param key - Key for the entry
66
+ * @param options - Options for the operation
67
+ * @returns Promise<true> if an entry is configured for the key, otherwise
68
+ * Promise<false>
69
+ */
70
+ expire(
71
+ modelClass: Class<Entity>,
72
+ key: string,
73
+ ttl: number,
74
+ options?: Options,
75
+ ): Promise<boolean>;
76
+
77
+ /**
78
+ * Get ttl for an entry by key
79
+ * @param modelClass - Model class
80
+ * @param key - Key for the entry
81
+ * @param ttl - Time to live in millisenconds
82
+ * @param options - Options for the operation
83
+ * @returns A promise of the TTL value
84
+ */
85
+ ttl?(
86
+ modelClass: Class<Entity>,
87
+ key: string,
88
+ ttl: number,
89
+ options?: Options,
90
+ ): Promise<number>;
91
+
92
+ /**
93
+ * Fetch all keys
94
+ * @param modelClass - Model class
95
+ * @param key - Key for the entry
96
+ * @param options - Options for the operation
97
+ * @returns A promise of an array of keys for all entries
98
+ */
99
+ keys?(modelClass: Class<Entity>, options?: Options): Promise<string[]>;
100
+
101
+ /**
102
+ * Get an Iterator for matching keys
103
+ * @param modelClass - Model class
104
+ * @param filter - Matching filter
105
+ * @param options - Options for the operation
106
+ * @returns A promise of an iterator of entries
107
+ */
108
+ iterateKeys?(
109
+ modelClass: Class<Entity>,
110
+ filter?: Filter,
111
+ options?: Options,
112
+ ): Promise<Iterator<T>>;
113
+ }
@@ -0,0 +1,37 @@
1
+ // Copyright IBM Corp. 2017,2019. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {AnyObject, Options} from './common-types';
7
+ import {Connector} from './connectors';
8
+
9
+ /**
10
+ * DataSource denotes a configured connector
11
+ */
12
+ export interface DataSource {
13
+ name: string; // Name of the data source
14
+ connector?: Connector; // The underlying connector instance
15
+
16
+ settings: AnyObject; // Settings
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ [property: string]: any; // Other properties that vary by connectors
19
+ }
20
+
21
+ export interface SchemaMigrationOptions extends Options {
22
+ /**
23
+ * When set to 'drop', schema migration will drop existing tables and recreate
24
+ * them from scratch, removing any existing data along the way.
25
+ *
26
+ * When set to 'alter', schema migration will try to preserve current schema
27
+ * and data, and perform a non-destructive incremental update.
28
+ */
29
+ existingSchema?: 'drop' | 'alter';
30
+
31
+ /**
32
+ * List of model names to migrate.
33
+ *
34
+ * By default, all models are migrated.
35
+ */
36
+ models?: string[];
37
+ }
@@ -0,0 +1,8 @@
1
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ export * from './metadata';
7
+ export * from './model.decorator';
8
+ export * from './repository.decorator';
@@ -0,0 +1,84 @@
1
+ // Copyright IBM Corp. 2017,2020. All Rights Reserved.
2
+ // Node module: @loopback/repository
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {InspectionOptions, MetadataInspector} from '@loopback/core';
7
+ import {ModelDefinition, RelationDefinitionMap} from '../model';
8
+ import {RELATIONS_KEY} from '../relations';
9
+ import {
10
+ MODEL_KEY,
11
+ MODEL_PROPERTIES_KEY,
12
+ MODEL_WITH_PROPERTIES_KEY,
13
+ PropertyMap,
14
+ } from './model.decorator';
15
+
16
+ export class ModelMetadataHelper {
17
+ /**
18
+ * A utility function to simplify retrieving metadata from a target model and
19
+ * its properties.
20
+ * @param target - The class from which to retrieve metadata.
21
+ * @param options - An options object for the MetadataInspector to customize
22
+ * the output of the metadata retrieval functions.
23
+ */
24
+ static getModelMetadata(
25
+ target: Function,
26
+ options?: InspectionOptions,
27
+ ): ModelDefinition | {} {
28
+ const classDef = MetadataInspector.getClassMetadata(
29
+ MODEL_WITH_PROPERTIES_KEY,
30
+ target,
31
+ // https://github.com/loopbackio/loopback-next/issues/4721
32
+ // The `target` can be a subclass for a base model
33
+ {...options, ownMetadataOnly: true},
34
+ );
35
+ // Return the cached value, if it exists.
36
+ // XXX(kjdelisle): If we're going to support dynamic updates, then this
37
+ // will be problematic in the future, since it will never update.
38
+ if (classDef) {
39
+ return classDef;
40
+ } else {
41
+ const modelMeta = MetadataInspector.getClassMetadata<ModelDefinition>(
42
+ MODEL_KEY,
43
+ target,
44
+ options,
45
+ );
46
+ if (!modelMeta) {
47
+ return {};
48
+ } else {
49
+ // sets the metadata to a dedicated key if cached value does not exist
50
+
51
+ // set ModelDefinition properties if they don't already exist
52
+ const meta = new ModelDefinition({...modelMeta});
53
+
54
+ // set properties lost from creating instance of ModelDefinition
55
+ Object.assign(meta, modelMeta);
56
+
57
+ meta.properties = Object.assign(
58
+ <PropertyMap>meta.properties,
59
+ MetadataInspector.getAllPropertyMetadata(
60
+ MODEL_PROPERTIES_KEY,
61
+ target.prototype,
62
+ options,
63
+ ),
64
+ );
65
+
66
+ meta.relations = Object.assign(
67
+ <RelationDefinitionMap>meta.relations,
68
+ MetadataInspector.getAllPropertyMetadata(
69
+ RELATIONS_KEY,
70
+ target.prototype,
71
+ options,
72
+ ),
73
+ );
74
+
75
+ MetadataInspector.defineMetadata(
76
+ MODEL_WITH_PROPERTIES_KEY.key,
77
+ meta,
78
+ target,
79
+ );
80
+ return meta;
81
+ }
82
+ }
83
+ }
84
+ }