@loopback/repository 4.0.0-alpha.6 → 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 (457) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +94 -372
  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/{lib6 → 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/{lib → 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/{lib6 → 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/{lib6 → 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/{lib → 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/{lib6/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/{lib6 → 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/{lib6 → 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/{lib → 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/{lib6 → dist}/types/union.js +6 -4
  203. package/dist/types/union.js.map +1 -0
  204. package/package.json +49 -32
  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 -17872
  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 -14
  329. package/lib/decorators/model.js +0 -35
  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 -103
  336. package/lib/decorators/repository.js.map +0 -1
  337. package/lib/index.d.ts +0 -15
  338. package/lib/index.js +0 -19
  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 -44
  347. package/lib/legacy-juggler-bridge.js +0 -119
  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 -127
  356. package/lib/model.js +0 -187
  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.d.ts +0 -172
  362. package/lib/repository.js +0 -127
  363. package/lib/repository.js.map +0 -1
  364. package/lib/types/any.d.ts +0 -12
  365. package/lib/types/any.js +0 -35
  366. package/lib/types/any.js.map +0 -1
  367. package/lib/types/array.d.ts +0 -14
  368. package/lib/types/array.js.map +0 -1
  369. package/lib/types/boolean.js.map +0 -1
  370. package/lib/types/buffer.d.ts +0 -14
  371. package/lib/types/buffer.js +0 -57
  372. package/lib/types/buffer.js.map +0 -1
  373. package/lib/types/date.js +0 -60
  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.map +0 -1
  379. package/lib/types/number.d.ts +0 -12
  380. package/lib/types/number.js +0 -40
  381. package/lib/types/number.js.map +0 -1
  382. package/lib/types/object.js +0 -49
  383. package/lib/types/object.js.map +0 -1
  384. package/lib/types/string.js.map +0 -1
  385. package/lib/types/type.js +0 -7
  386. package/lib/types/type.js.map +0 -1
  387. package/lib/types/union.js +0 -51
  388. package/lib/types/union.js.map +0 -1
  389. package/lib6/common-types.d.ts +0 -44
  390. package/lib6/common-types.js +0 -7
  391. package/lib6/common-types.js.map +0 -1
  392. package/lib6/connector.d.ts +0 -12
  393. package/lib6/connector.js +0 -7
  394. package/lib6/connector.js.map +0 -1
  395. package/lib6/crud-connector.d.ts +0 -130
  396. package/lib6/crud-connector.js +0 -7
  397. package/lib6/crud-connector.js.map +0 -1
  398. package/lib6/datasource.d.ts +0 -11
  399. package/lib6/datasource.js.map +0 -1
  400. package/lib6/decorators/model.d.ts +0 -14
  401. package/lib6/decorators/model.js +0 -35
  402. package/lib6/decorators/model.js.map +0 -1
  403. package/lib6/decorators/relation.d.ts +0 -65
  404. package/lib6/decorators/relation.js +0 -126
  405. package/lib6/decorators/relation.js.map +0 -1
  406. package/lib6/decorators/repository.d.ts +0 -61
  407. package/lib6/decorators/repository.js +0 -113
  408. package/lib6/decorators/repository.js.map +0 -1
  409. package/lib6/index.d.ts +0 -15
  410. package/lib6/index.js +0 -19
  411. package/lib6/index.js.map +0 -1
  412. package/lib6/kv-connector.js +0 -7
  413. package/lib6/kv-connector.js.map +0 -1
  414. package/lib6/kv-repository.d.ts +0 -78
  415. package/lib6/kv-repository.js +0 -7
  416. package/lib6/kv-repository.js.map +0 -1
  417. package/lib6/legacy-juggler-bridge.d.ts +0 -44
  418. package/lib6/legacy-juggler-bridge.js +0 -119
  419. package/lib6/legacy-juggler-bridge.js.map +0 -1
  420. package/lib6/loopback-datasource-juggler.d.ts +0 -666
  421. package/lib6/loopback-datasource-juggler.js +0 -8
  422. package/lib6/loopback-datasource-juggler.js.map +0 -1
  423. package/lib6/mixin.d.ts +0 -43
  424. package/lib6/mixin.js +0 -34
  425. package/lib6/mixin.js.map +0 -1
  426. package/lib6/model.d.ts +0 -127
  427. package/lib6/model.js +0 -187
  428. package/lib6/model.js.map +0 -1
  429. package/lib6/query.d.ts +0 -112
  430. package/lib6/query.js +0 -25
  431. package/lib6/query.js.map +0 -1
  432. package/lib6/repository.d.ts +0 -172
  433. package/lib6/repository.js +0 -127
  434. package/lib6/repository.js.map +0 -1
  435. package/lib6/types/any.js.map +0 -1
  436. package/lib6/types/array.js +0 -53
  437. package/lib6/types/array.js.map +0 -1
  438. package/lib6/types/boolean.d.ts +0 -12
  439. package/lib6/types/boolean.js.map +0 -1
  440. package/lib6/types/buffer.js.map +0 -1
  441. package/lib6/types/date.d.ts +0 -12
  442. package/lib6/types/date.js.map +0 -1
  443. package/lib6/types/index.d.ts +0 -30
  444. package/lib6/types/index.js +0 -33
  445. package/lib6/types/index.js.map +0 -1
  446. package/lib6/types/model.js +0 -25
  447. package/lib6/types/model.js.map +0 -1
  448. package/lib6/types/number.js.map +0 -1
  449. package/lib6/types/object.d.ts +0 -15
  450. package/lib6/types/object.js.map +0 -1
  451. package/lib6/types/string.d.ts +0 -12
  452. package/lib6/types/string.js +0 -40
  453. package/lib6/types/string.js.map +0 -1
  454. package/lib6/types/type.d.ts +0 -38
  455. package/lib6/types/type.js.map +0 -1
  456. package/lib6/types/union.d.ts +0 -14
  457. package/lib6/types/union.js.map +0 -1
package/dist/model.js ADDED
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2017,2020. All Rights Reserved.
3
+ // Node module: @loopback/repository
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.rejectNavigationalPropertiesInData = exports.Event = exports.Entity = exports.ValueObject = exports.Model = exports.ModelDefinition = void 0;
8
+ const index_1 = require("./index");
9
+ /**
10
+ * Definition for a model
11
+ */
12
+ class ModelDefinition {
13
+ constructor(nameOrDef) {
14
+ if (typeof nameOrDef === 'string') {
15
+ nameOrDef = { name: nameOrDef };
16
+ }
17
+ const { name, properties, settings, relations } = nameOrDef;
18
+ this.name = name;
19
+ this.properties = {};
20
+ if (properties) {
21
+ for (const p in properties) {
22
+ this.addProperty(p, properties[p]);
23
+ }
24
+ }
25
+ this.settings = settings !== null && settings !== void 0 ? settings : new Map();
26
+ this.relations = relations !== null && relations !== void 0 ? relations : {};
27
+ }
28
+ /**
29
+ * Add a property
30
+ * @param name - Property definition or name (string)
31
+ * @param definitionOrType - Definition or property type
32
+ */
33
+ addProperty(name, definitionOrType) {
34
+ const definition = definitionOrType.type
35
+ ? definitionOrType
36
+ : { type: definitionOrType };
37
+ if (definition.id === true &&
38
+ definition.generated === true &&
39
+ definition.type !== undefined &&
40
+ definition.useDefaultIdType === undefined) {
41
+ definition.useDefaultIdType = false;
42
+ }
43
+ this.properties[name] = definition;
44
+ return this;
45
+ }
46
+ /**
47
+ * Add a setting
48
+ * @param name - Setting name
49
+ * @param value - Setting value
50
+ */
51
+ addSetting(name, value) {
52
+ this.settings[name] = value;
53
+ return this;
54
+ }
55
+ /**
56
+ * Define a new relation.
57
+ * @param definition - The definition of the new relation.
58
+ */
59
+ addRelation(definition) {
60
+ this.relations[definition.name] = definition;
61
+ return this;
62
+ }
63
+ /**
64
+ * Define a new belongsTo relation.
65
+ * @param name - The name of the belongsTo relation.
66
+ * @param definition - The definition of the belongsTo relation.
67
+ */
68
+ belongsTo(name, definition) {
69
+ const meta = {
70
+ ...definition,
71
+ name,
72
+ type: index_1.RelationType.belongsTo,
73
+ targetsMany: false,
74
+ };
75
+ return this.addRelation(meta);
76
+ }
77
+ /**
78
+ * Define a new hasOne relation.
79
+ * @param name - The name of the hasOne relation.
80
+ * @param definition - The definition of the hasOne relation.
81
+ */
82
+ hasOne(name, definition) {
83
+ const meta = {
84
+ ...definition,
85
+ name,
86
+ type: index_1.RelationType.hasOne,
87
+ targetsMany: false,
88
+ };
89
+ return this.addRelation(meta);
90
+ }
91
+ /**
92
+ * Define a new hasMany relation.
93
+ * @param name - The name of the hasMany relation.
94
+ * @param definition - The definition of the hasMany relation.
95
+ */
96
+ hasMany(name, definition) {
97
+ const meta = {
98
+ ...definition,
99
+ name,
100
+ type: index_1.RelationType.hasMany,
101
+ targetsMany: true,
102
+ };
103
+ return this.addRelation(meta);
104
+ }
105
+ /**
106
+ * Get an array of names of ID properties, which are specified in
107
+ * the model settings or properties with `id` attribute.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * {
112
+ * settings: {
113
+ * id: ['id']
114
+ * }
115
+ * properties: {
116
+ * id: {
117
+ * type: 'string',
118
+ * id: true
119
+ * }
120
+ * }
121
+ * }
122
+ * ```
123
+ */
124
+ idProperties() {
125
+ if (typeof this.settings.id === 'string') {
126
+ return [this.settings.id];
127
+ }
128
+ else if (Array.isArray(this.settings.id)) {
129
+ return this.settings.id;
130
+ }
131
+ const idProps = Object.keys(this.properties).filter(prop => this.properties[prop].id);
132
+ return idProps;
133
+ }
134
+ }
135
+ exports.ModelDefinition = ModelDefinition;
136
+ function asJSON(value) {
137
+ if (value == null)
138
+ return value;
139
+ if (typeof value.toJSON === 'function') {
140
+ return value.toJSON();
141
+ }
142
+ // Handle arrays
143
+ if (Array.isArray(value)) {
144
+ return value.map(item => asJSON(item));
145
+ }
146
+ return value;
147
+ }
148
+ /**
149
+ * Convert a value to a plain object as DTO.
150
+ *
151
+ * - The prototype of the value in primitive types are preserved,
152
+ * like `Date`, `ObjectId`.
153
+ * - If the value is an instance of custom model, call `toObject` to convert.
154
+ * - If the value is an array, convert each element recursively.
155
+ *
156
+ * @param value the value to convert
157
+ * @param options the options
158
+ */
159
+ function asObject(value, options) {
160
+ if (value == null)
161
+ return value;
162
+ if (typeof value.toObject === 'function') {
163
+ return value.toObject(options);
164
+ }
165
+ if (Array.isArray(value)) {
166
+ return value.map(item => asObject(item, options));
167
+ }
168
+ return value;
169
+ }
170
+ /**
171
+ * Base class for models
172
+ */
173
+ class Model {
174
+ constructor(data) {
175
+ Object.assign(this, data);
176
+ }
177
+ static get modelName() {
178
+ var _a;
179
+ return ((_a = this.definition) === null || _a === void 0 ? void 0 : _a.name) || this.name;
180
+ }
181
+ /**
182
+ * Serialize into a plain JSON object
183
+ */
184
+ toJSON() {
185
+ const def = this.constructor.definition;
186
+ if (def == null || def.settings.strict === false) {
187
+ return this.toObject({ ignoreUnknownProperties: false });
188
+ }
189
+ const copyPropertyAsJson = (key) => {
190
+ const val = asJSON(this[key]);
191
+ if (val !== undefined) {
192
+ json[key] = val;
193
+ }
194
+ };
195
+ const json = {};
196
+ const hiddenProperties = def.settings.hiddenProperties || [];
197
+ for (const p in def.properties) {
198
+ if (p in this && !hiddenProperties.includes(p)) {
199
+ copyPropertyAsJson(p);
200
+ }
201
+ }
202
+ for (const r in def.relations) {
203
+ const relName = def.relations[r].name;
204
+ if (relName in this) {
205
+ copyPropertyAsJson(relName);
206
+ }
207
+ }
208
+ return json;
209
+ }
210
+ /**
211
+ * Convert to a plain object as DTO
212
+ *
213
+ * If `ignoreUnknownProperty` is set to false, convert all properties in the
214
+ * model instance, otherwise only convert the ones defined in the model
215
+ * definitions.
216
+ *
217
+ * See function `asObject` for each property's conversion rules.
218
+ */
219
+ toObject(options) {
220
+ const def = this.constructor.definition;
221
+ const obj = {};
222
+ if ((options === null || options === void 0 ? void 0 : options.ignoreUnknownProperties) === false) {
223
+ const hiddenProperties = (def === null || def === void 0 ? void 0 : def.settings.hiddenProperties) || [];
224
+ for (const p in this) {
225
+ if (!hiddenProperties.includes(p)) {
226
+ const val = this[p];
227
+ obj[p] = asObject(val, options);
228
+ }
229
+ }
230
+ return obj;
231
+ }
232
+ if (def === null || def === void 0 ? void 0 : def.relations) {
233
+ for (const r in def.relations) {
234
+ const relName = def.relations[r].name;
235
+ if (relName in this) {
236
+ obj[relName] = asObject(this[relName], {
237
+ ...options,
238
+ ignoreUnknownProperties: false,
239
+ });
240
+ }
241
+ }
242
+ }
243
+ const props = def.properties;
244
+ const keys = Object.keys(props);
245
+ for (const i in keys) {
246
+ const propertyName = keys[i];
247
+ const val = this[propertyName];
248
+ if (val === undefined)
249
+ continue;
250
+ obj[propertyName] = asObject(val, options);
251
+ }
252
+ return obj;
253
+ }
254
+ }
255
+ exports.Model = Model;
256
+ /**
257
+ * Base class for value objects - An object that contains attributes but has no
258
+ * conceptual identity. They should be treated as immutable.
259
+ */
260
+ class ValueObject extends Model {
261
+ }
262
+ exports.ValueObject = ValueObject;
263
+ /**
264
+ * Base class for entities which have unique ids
265
+ */
266
+ class Entity extends Model {
267
+ /**
268
+ * Get the names of identity properties (primary keys).
269
+ */
270
+ static getIdProperties() {
271
+ return this.definition.idProperties();
272
+ }
273
+ /**
274
+ * Get the identity value for a given entity instance or entity data object.
275
+ *
276
+ * @param entityOrData - The data object for which to determine the identity
277
+ * value.
278
+ */
279
+ static getIdOf(entityOrData) {
280
+ if (typeof entityOrData.getId === 'function') {
281
+ return entityOrData.getId();
282
+ }
283
+ const idName = this.getIdProperties()[0];
284
+ return entityOrData[idName];
285
+ }
286
+ /**
287
+ * Get the identity value. If the identity is a composite key, returns
288
+ * an object.
289
+ */
290
+ getId() {
291
+ const definition = this.constructor.definition;
292
+ const idProps = definition.idProperties();
293
+ if (idProps.length === 1) {
294
+ return this[idProps[0]];
295
+ }
296
+ if (!idProps.length) {
297
+ throw new Error(`Invalid Entity ${this.constructor.name}:` +
298
+ 'missing primary key (id) property');
299
+ }
300
+ return this.getIdObject();
301
+ }
302
+ /**
303
+ * Get the identity as an object, such as `{id: 1}` or
304
+ * `{schoolId: 1, studentId: 2}`
305
+ */
306
+ getIdObject() {
307
+ const definition = this.constructor.definition;
308
+ const idProps = definition.idProperties();
309
+ const idObj = {};
310
+ for (const idProp of idProps) {
311
+ idObj[idProp] = this[idProp];
312
+ }
313
+ return idObj;
314
+ }
315
+ /**
316
+ * Build the where object for the given id
317
+ * @param id - The id value
318
+ */
319
+ static buildWhereForId(id) {
320
+ const where = {};
321
+ const idProps = this.definition.idProperties();
322
+ if (idProps.length === 1) {
323
+ where[idProps[0]] = id;
324
+ }
325
+ else {
326
+ for (const idProp of idProps) {
327
+ where[idProp] = id[idProp];
328
+ }
329
+ }
330
+ return where;
331
+ }
332
+ }
333
+ exports.Entity = Entity;
334
+ /**
335
+ * Domain events
336
+ */
337
+ class Event {
338
+ }
339
+ exports.Event = Event;
340
+ /**
341
+ * Check model data for navigational properties linking to related models.
342
+ * Throw a descriptive error if any such property is found.
343
+ *
344
+ * @param modelClass Model constructor, e.g. `Product`.
345
+ * @param entityData Model instance or a plain-data object,
346
+ * e.g. `{name: 'pen'}`.
347
+ */
348
+ function rejectNavigationalPropertiesInData(modelClass, data) {
349
+ const def = modelClass.definition;
350
+ const props = def.properties;
351
+ for (const r in def.relations) {
352
+ const relName = def.relations[r].name;
353
+ if (!(relName in data))
354
+ continue;
355
+ let msg = 'Navigational properties are not allowed in model data ' +
356
+ `(model "${modelClass.modelName}" property "${relName}"), ` +
357
+ 'please remove it.';
358
+ if (relName in props) {
359
+ msg +=
360
+ ' The error might be invoked by belongsTo relations, please make' +
361
+ ' sure the relation name is not the same as the property name.';
362
+ }
363
+ throw new Error(msg);
364
+ }
365
+ }
366
+ exports.rejectNavigationalPropertiesInData = rejectNavigationalPropertiesInData;
367
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Entity } from '../../model';
2
+ import { EntityCrudRepository } from '../../repositories/repository';
3
+ import { BelongsToDefinition, Getter, InclusionResolver } from '../relation.types';
4
+ export interface BelongsToAccessor<Target extends Entity, SourceId> {
5
+ /**
6
+ * Invoke the function to obtain HasManyRepository.
7
+ */
8
+ (sourceId: SourceId): Promise<Target>;
9
+ /**
10
+ * Use `resolver` property to obtain an InclusionResolver for this relation.
11
+ */
12
+ inclusionResolver: InclusionResolver<Entity, Target>;
13
+ }
14
+ /**
15
+ * Enforces a BelongsTo constraint on a repository
16
+ */
17
+ export declare function createBelongsToAccessor<Target extends Entity, TargetId, Source extends Entity, SourceId>(belongsToMetadata: BelongsToDefinition, targetRepoGetter: Getter<EntityCrudRepository<Target, TargetId>>, sourceRepository: EntityCrudRepository<Source, SourceId>): BelongsToAccessor<Target, SourceId>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2018,2019. All Rights Reserved.
3
+ // Node module: @loopback/repository
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createBelongsToAccessor = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
10
+ const belongs_to_helpers_1 = require("./belongs-to.helpers");
11
+ const belongs_to_inclusion_resolver_1 = require("./belongs-to.inclusion-resolver");
12
+ const belongs_to_repository_1 = require("./belongs-to.repository");
13
+ const debug = (0, debug_1.default)('loopback:repository:relations:belongs-to:accessor');
14
+ /**
15
+ * Enforces a BelongsTo constraint on a repository
16
+ */
17
+ function createBelongsToAccessor(belongsToMetadata, targetRepoGetter, sourceRepository) {
18
+ const meta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(belongsToMetadata);
19
+ debug('Resolved BelongsTo relation metadata: %o', meta);
20
+ const result = async function getTargetInstanceOfBelongsTo(sourceId) {
21
+ const foreignKey = meta.keyFrom;
22
+ const primaryKey = meta.keyTo;
23
+ const sourceModel = await sourceRepository.findById(sourceId);
24
+ const foreignKeyValue = sourceModel[foreignKey];
25
+ // workaround to check referential integrity.
26
+ // should be removed once the memory connector ref integrity is done
27
+ // GH issue: https://github.com/loopbackio/loopback-next/issues/2333
28
+ if (!foreignKeyValue) {
29
+ return undefined;
30
+ }
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ const constraint = { [primaryKey]: foreignKeyValue };
33
+ const constrainedRepo = new belongs_to_repository_1.DefaultBelongsToRepository(targetRepoGetter, constraint);
34
+ return constrainedRepo.get();
35
+ };
36
+ result.inclusionResolver = (0, belongs_to_inclusion_resolver_1.createBelongsToInclusionResolver)(meta, targetRepoGetter);
37
+ return result;
38
+ }
39
+ exports.createBelongsToAccessor = createBelongsToAccessor;
40
+ //# sourceMappingURL=belongs-to.accessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"belongs-to.accessor.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.accessor.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AASjC,6DAA8D;AAC9D,mFAAiF;AACjF,mEAAmE;AAEnE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,mDAAmD,CAAC,CAAC;AAchF;;GAEG;AACH,SAAgB,uBAAuB,CAMrC,iBAAsC,EACtC,gBAAgE,EAChE,gBAAwD;IAExD,MAAM,IAAI,GAAG,IAAA,6CAAwB,EAAC,iBAAiB,CAAC,CAAC;IACzD,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GACV,KAAK,UAAU,4BAA4B,CAAC,QAAkB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,UAA0B,CAAC,CAAC;QAChE,6CAA6C;QAC7C,oEAAoE;QACpE,oEAAoE;QACpE,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAA8B,CAAC;SACvC;QACD,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,UAAU,CAAC,EAAE,eAAe,EAAC,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,kDAA0B,CACpD,gBAAgB,EAChB,UAAgC,CACjC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAA,gEAAgC,EACzD,IAAI,EACJ,gBAAgB,CACjB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAtCD,0DAsCC"}
@@ -0,0 +1,11 @@
1
+ import { Entity, EntityResolver, PropertyDefinition } from '../../model';
2
+ import { BelongsToDefinition } from '../relation.types';
3
+ /**
4
+ * Decorator for belongsTo
5
+ * @param targetResolver - A resolver function that returns the target model for
6
+ * a belongsTo relation
7
+ * @param definition - Optional metadata for setting up a belongsTo relation
8
+ * @param propertyDefinition - Optional metadata for setting up the property
9
+ * @returns A property decorator
10
+ */
11
+ export declare function belongsTo<T extends Entity>(targetResolver: EntityResolver<T>, definition?: Partial<BelongsToDefinition>, propertyDefinition?: Partial<PropertyDefinition>): (decoratedTarget: Entity, decoratedKey: string) => void;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
3
+ // Node module: @loopback/repository
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.belongsTo = void 0;
8
+ const core_1 = require("@loopback/core");
9
+ const decorators_1 = require("../../decorators");
10
+ const relation_decorator_1 = require("../relation.decorator");
11
+ const relation_types_1 = require("../relation.types");
12
+ /**
13
+ * Decorator for belongsTo
14
+ * @param targetResolver - A resolver function that returns the target model for
15
+ * a belongsTo relation
16
+ * @param definition - Optional metadata for setting up a belongsTo relation
17
+ * @param propertyDefinition - Optional metadata for setting up the property
18
+ * @returns A property decorator
19
+ */
20
+ function belongsTo(targetResolver, definition, propertyDefinition) {
21
+ return function (decoratedTarget, decoratedKey) {
22
+ var _a;
23
+ const propType = (_a = core_1.MetadataInspector.getDesignTypeForProperty(decoratedTarget, decoratedKey)) !== null && _a !== void 0 ? _a : propertyDefinition === null || propertyDefinition === void 0 ? void 0 : propertyDefinition.type;
24
+ if (!propType) {
25
+ const fullPropName = core_1.DecoratorFactory.getTargetName(decoratedTarget, decoratedKey);
26
+ throw new Error(`Cannot infer type of model property ${fullPropName} because ` +
27
+ 'TypeScript compiler option `emitDecoratorMetadata` is not set. ' +
28
+ 'Please enable `emitDecoratorMetadata` or use the third argument of ' +
29
+ '`@belongsTo` decorator to specify the property type explicitly.');
30
+ }
31
+ const propMeta = Object.assign({},
32
+ // properties provided by the caller
33
+ propertyDefinition,
34
+ // properties enforced by the decorator
35
+ {
36
+ type: propType,
37
+ // TODO(bajtos) Make the foreign key required once our REST API layer
38
+ // allows controller methods to exclude required properties
39
+ // required: true,
40
+ });
41
+ (0, decorators_1.property)(propMeta)(decoratedTarget, decoratedKey);
42
+ // @belongsTo() is typically decorating the foreign key property,
43
+ // e.g. customerId. We need to strip the trailing "Id" suffix from the name.
44
+ const relationName = decoratedKey.replace(/Id$/, '');
45
+ const meta = Object.assign(
46
+ // default values, can be customized by the caller
47
+ {
48
+ keyFrom: decoratedKey,
49
+ name: relationName,
50
+ },
51
+ // properties provided by the caller
52
+ definition,
53
+ // properties enforced by the decorator
54
+ {
55
+ type: relation_types_1.RelationType.belongsTo,
56
+ targetsMany: false,
57
+ source: decoratedTarget.constructor,
58
+ target: targetResolver,
59
+ });
60
+ (0, relation_decorator_1.relation)(meta)(decoratedTarget, decoratedKey);
61
+ };
62
+ }
63
+ exports.belongsTo = belongsTo;
64
+ //# sourceMappingURL=belongs-to.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"belongs-to.decorator.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.decorator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAmE;AACnE,iDAA0C;AAC1C,8DAA+C;AAE/C,sDAAoE;AAEpE;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,cAAiC,EACjC,UAAyC,EACzC,kBAAgD;IAEhD,OAAO,UAAU,eAAuB,EAAE,YAAoB;;QAC5D,MAAM,QAAQ,GACZ,MAAA,wBAAiB,CAAC,wBAAwB,CACxC,eAAe,EACf,YAAY,CACb,mCAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC;QAEhC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,YAAY,GAAG,uBAAgB,CAAC,aAAa,CACjD,eAAe,EACf,YAAY,CACb,CAAC;YACF,MAAM,IAAI,KAAK,CACb,uCAAuC,YAAY,WAAW;gBAC5D,iEAAiE;gBACjE,qEAAqE;gBACrE,iEAAiE,CACpE,CAAC;SACH;QAED,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAChD,EAAE;QACF,oCAAoC;QACpC,kBAAkB;QAClB,uCAAuC;QACvC;YACE,IAAI,EAAE,QAAQ;YACd,qEAAqE;YACrE,2DAA2D;YAC3D,kBAAkB;SACnB,CACF,CAAC;QACF,IAAA,qBAAQ,EAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAElD,iEAAiE;QACjE,4EAA4E;QAC5E,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,GAAwB,MAAM,CAAC,MAAM;QAC7C,kDAAkD;QAClD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,YAAY;SACnB;QACD,oCAAoC;QACpC,UAAU;QACV,uCAAuC;QACvC;YACE,IAAI,EAAE,6BAAY,CAAC,SAAS;YAC5B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,MAAM,EAAE,cAAc;SACvB,CACF,CAAC;QACF,IAAA,6BAAQ,EAAC,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AA7DD,8BA6DC"}
@@ -0,0 +1,17 @@
1
+ import { BelongsToDefinition } from '../relation.types';
2
+ /**
3
+ * Relation definition with optional metadata (e.g. `keyTo`) filled in.
4
+ * @internal
5
+ */
6
+ export declare type BelongsToResolvedDefinition = BelongsToDefinition & {
7
+ keyFrom: string;
8
+ keyTo: string;
9
+ };
10
+ /**
11
+ * Resolves given belongsTo metadata if target is specified to be a resolver.
12
+ * Mainly used to infer what the `keyTo` property should be from the target's
13
+ * property id metadata
14
+ * @param relationMeta - belongsTo metadata to resolve
15
+ * @internal
16
+ */
17
+ export declare function resolveBelongsToMetadata(relationMeta: BelongsToDefinition): BelongsToResolvedDefinition;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/repository
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.resolveBelongsToMetadata = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
10
+ const lodash_1 = require("lodash");
11
+ const errors_1 = require("../../errors");
12
+ const type_resolver_1 = require("../../type-resolver");
13
+ const relation_types_1 = require("../relation.types");
14
+ const debug = (0, debug_1.default)('loopback:repository:relations:belongs-to:helpers');
15
+ /**
16
+ * Resolves given belongsTo metadata if target is specified to be a resolver.
17
+ * Mainly used to infer what the `keyTo` property should be from the target's
18
+ * property id metadata
19
+ * @param relationMeta - belongsTo metadata to resolve
20
+ * @internal
21
+ */
22
+ function resolveBelongsToMetadata(relationMeta) {
23
+ if (relationMeta.type !== relation_types_1.RelationType.belongsTo) {
24
+ const reason = 'relation type must be BelongsTo';
25
+ throw new errors_1.InvalidRelationError(reason, relationMeta);
26
+ }
27
+ if (!(0, type_resolver_1.isTypeResolver)(relationMeta.target)) {
28
+ const reason = 'target must be a type resolver';
29
+ throw new errors_1.InvalidRelationError(reason, relationMeta);
30
+ }
31
+ const sourceModel = relationMeta.source;
32
+ if (!sourceModel || !sourceModel.modelName) {
33
+ const reason = 'source model must be defined';
34
+ throw new errors_1.InvalidRelationError(reason, relationMeta);
35
+ }
36
+ const targetModel = relationMeta.target();
37
+ const targetName = targetModel.modelName;
38
+ debug('Resolved model %s from given metadata: %o', targetName, targetModel);
39
+ let keyFrom;
40
+ if (relationMeta.keyFrom &&
41
+ relationMeta.source.definition.properties[relationMeta.keyFrom]) {
42
+ keyFrom = relationMeta.keyFrom;
43
+ }
44
+ else {
45
+ keyFrom = (0, lodash_1.camelCase)(targetName + '_id');
46
+ }
47
+ const targetProperties = targetModel.definition.properties;
48
+ debug('relation metadata from %o: %o', targetName, targetProperties);
49
+ if (relationMeta.keyTo && targetProperties[relationMeta.keyTo]) {
50
+ // The explicit cast is needed because of a limitation of type inference
51
+ return Object.assign(relationMeta, {
52
+ keyFrom,
53
+ });
54
+ }
55
+ const targetPrimaryKey = targetModel.definition.idProperties()[0];
56
+ if (!targetPrimaryKey) {
57
+ const reason = `${targetName} does not have any primary key (id property)`;
58
+ throw new errors_1.InvalidRelationError(reason, relationMeta);
59
+ }
60
+ return Object.assign(relationMeta, { keyFrom, keyTo: targetPrimaryKey });
61
+ }
62
+ exports.resolveBelongsToMetadata = resolveBelongsToMetadata;
63
+ //# sourceMappingURL=belongs-to.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"belongs-to.helpers.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.helpers.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAoE;AAEpE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,kDAAkD,CAAC,CAAC;AAW/E;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,YAAiC;IACxE,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,SAAS,EAAE;QAClE,MAAM,MAAM,GAAG,iCAAiC,CAAC;QACjD,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,IAAI,CAAC,IAAA,8BAAc,EAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,MAAM,GAAG,gCAAgC,CAAC;QAChD,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC1C,MAAM,MAAM,GAAG,8BAA8B,CAAC;QAC9C,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC;IACzC,KAAK,CAAC,2CAA2C,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC;IACZ,IACE,YAAY,CAAC,OAAO;QACpB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAC/D;QACA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;KAChC;SAAM;QACL,OAAO,GAAG,IAAA,kBAAS,EAAC,UAAU,GAAG,KAAK,CAAC,CAAC;KACzC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;IAC3D,KAAK,CAAC,+BAA+B,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAErE,IAAI,YAAY,CAAC,KAAK,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC9D,wEAAwE;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;YACjC,OAAO;SACR,CAAgC,CAAC;KACnC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,MAAM,GAAG,GAAG,UAAU,8CAA8C,CAAC;QAC3E,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAC;AACzE,CAAC;AAhDD,4DAgDC"}
@@ -0,0 +1,14 @@
1
+ import { Entity } from '../../model';
2
+ import { EntityCrudRepository } from '../../repositories';
3
+ import { BelongsToDefinition, Getter, InclusionResolver } from '../relation.types';
4
+ /**
5
+ * Creates InclusionResolver for BelongsTo relation.
6
+ * Notice that this function only generates the inclusionResolver.
7
+ * It doesn't register it for the source repository.
8
+ *
9
+ * Notice: scope field for inclusion is not supported yet
10
+ *
11
+ * @param meta - resolved BelongsToMetadata
12
+ * @param getTargetRepo - target repository i.e where related instances are
13
+ */
14
+ export declare function createBelongsToInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: BelongsToDefinition, getTargetRepo: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>): InclusionResolver<Entity, Target>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019,2020. All Rights Reserved.
3
+ // Node module: @loopback/repository
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createBelongsToInclusionResolver = void 0;
8
+ const relation_helpers_1 = require("../relation.helpers");
9
+ const belongs_to_helpers_1 = require("./belongs-to.helpers");
10
+ /**
11
+ * Creates InclusionResolver for BelongsTo relation.
12
+ * Notice that this function only generates the inclusionResolver.
13
+ * It doesn't register it for the source repository.
14
+ *
15
+ * Notice: scope field for inclusion is not supported yet
16
+ *
17
+ * @param meta - resolved BelongsToMetadata
18
+ * @param getTargetRepo - target repository i.e where related instances are
19
+ */
20
+ function createBelongsToInclusionResolver(meta, getTargetRepo) {
21
+ const relationMeta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(meta);
22
+ return async function fetchIncludedModels(entities, inclusion, options) {
23
+ if (!entities.length)
24
+ return [];
25
+ const sourceKey = relationMeta.keyFrom;
26
+ const sourceIds = entities.map(e => e[sourceKey]);
27
+ const targetKey = relationMeta.keyTo;
28
+ const dedupedSourceIds = (0, relation_helpers_1.deduplicate)(sourceIds);
29
+ const scope = typeof inclusion === 'string' ? {} : inclusion.scope;
30
+ const targetRepo = await getTargetRepo();
31
+ const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, dedupedSourceIds.filter(e => e), scope, options);
32
+ return (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIds, targetsFound, targetKey);
33
+ };
34
+ }
35
+ exports.createBelongsToInclusionResolver = createBelongsToInclusionResolver;
36
+ //# sourceMappingURL=belongs-to.inclusion-resolver.js.map