pure-orm 4.0.0-6 → 4.0.0-7

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 (311) hide show
  1. package/README.md +9 -9
  2. package/coverage/clover.xml +371 -589
  3. package/coverage/coverage-final.json +18 -20
  4. package/coverage/lcov-report/dist/src/core.js.html +1014 -0
  5. package/coverage/lcov-report/dist/src/drivers/index.html +97 -0
  6. package/coverage/lcov-report/dist/src/drivers/pgp.js.html +240 -0
  7. package/coverage/lcov-report/dist/src/factory.js.html +285 -198
  8. package/coverage/lcov-report/dist/src/index.html +20 -33
  9. package/coverage/lcov-report/dist/src/index.js.html +16 -10
  10. package/coverage/lcov-report/dist/src/orm.js.html +645 -0
  11. package/coverage/lcov-report/dist/test-utils/blog/entities.js.html +108 -0
  12. package/coverage/lcov-report/dist/test-utils/blog/index.html +6 -6
  13. package/coverage/lcov-report/dist/test-utils/blog/models/article.js.html +1 -1
  14. package/coverage/lcov-report/dist/test-utils/blog/models/article_tag.js.html +1 -1
  15. package/coverage/lcov-report/dist/test-utils/blog/models/index.html +1 -1
  16. package/coverage/lcov-report/dist/test-utils/blog/models/person.js.html +1 -1
  17. package/coverage/lcov-report/dist/test-utils/blog/models/tag.js.html +1 -1
  18. package/coverage/lcov-report/dist/test-utils/blog/orm.js.html +1 -1
  19. package/coverage/lcov-report/dist/test-utils/five/entities.js.html +114 -0
  20. package/coverage/lcov-report/dist/test-utils/five/index.html +6 -6
  21. package/coverage/lcov-report/dist/test-utils/five/models/index.html +1 -1
  22. package/coverage/lcov-report/dist/test-utils/five/models/line-item.js.html +1 -1
  23. package/coverage/lcov-report/dist/test-utils/five/models/order.js.html +1 -1
  24. package/coverage/lcov-report/dist/test-utils/five/models/parcel-event.js.html +1 -1
  25. package/coverage/lcov-report/dist/test-utils/five/models/parcel-line-item.js.html +1 -1
  26. package/coverage/lcov-report/dist/test-utils/five/models/parcel.js.html +1 -1
  27. package/coverage/lcov-report/dist/test-utils/five/orm.js.html +1 -1
  28. package/coverage/lcov-report/dist/test-utils/nine/entities.js.html +84 -0
  29. package/coverage/lcov-report/dist/test-utils/nine/index.html +6 -6
  30. package/coverage/lcov-report/dist/test-utils/nine/models/feature-switch.js.html +1 -1
  31. package/coverage/lcov-report/dist/test-utils/nine/models/index.html +1 -1
  32. package/coverage/lcov-report/dist/test-utils/nine/orm.js.html +1 -1
  33. package/coverage/lcov-report/dist/test-utils/order/entities.js.html +114 -0
  34. package/coverage/lcov-report/dist/test-utils/order/index.html +6 -6
  35. package/coverage/lcov-report/dist/test-utils/order/models/index.html +1 -1
  36. package/coverage/lcov-report/dist/test-utils/order/models/line-item.js.html +1 -1
  37. package/coverage/lcov-report/dist/test-utils/order/models/order.js.html +1 -1
  38. package/coverage/lcov-report/dist/test-utils/order/models/product-variant.js.html +1 -1
  39. package/coverage/lcov-report/dist/test-utils/order/models/product.js.html +1 -1
  40. package/coverage/lcov-report/dist/test-utils/order/models/utm-source.js.html +1 -1
  41. package/coverage/lcov-report/dist/test-utils/order/orm.js.html +1 -1
  42. package/coverage/lcov-report/dist/test-utils/order-more/entities.js.html +204 -0
  43. package/coverage/lcov-report/dist/test-utils/order-more/index.html +6 -6
  44. package/coverage/lcov-report/dist/test-utils/order-more/models/actual-product-variant.js.html +1 -1
  45. package/coverage/lcov-report/dist/test-utils/order-more/models/color.js.html +1 -1
  46. package/coverage/lcov-report/dist/test-utils/order-more/models/customer.js.html +1 -1
  47. package/coverage/lcov-report/dist/test-utils/order-more/models/gender.js.html +1 -1
  48. package/coverage/lcov-report/dist/test-utils/order-more/models/index.html +1 -1
  49. package/coverage/lcov-report/dist/test-utils/order-more/models/inventory-level.js.html +1 -1
  50. package/coverage/lcov-report/dist/test-utils/order-more/models/line-item.js.html +1 -1
  51. package/coverage/lcov-report/dist/test-utils/order-more/models/order.js.html +1 -1
  52. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-event.js.html +1 -1
  53. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-line-item.js.html +1 -1
  54. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel.js.html +1 -1
  55. package/coverage/lcov-report/dist/test-utils/order-more/models/physical-address.js.html +1 -1
  56. package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant-image.js.html +1 -1
  57. package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant.js.html +1 -1
  58. package/coverage/lcov-report/dist/test-utils/order-more/models/product.js.html +1 -1
  59. package/coverage/lcov-report/dist/test-utils/order-more/models/refund.js.html +1 -1
  60. package/coverage/lcov-report/dist/test-utils/order-more/models/shipment-actual-product-variant.js.html +1 -1
  61. package/coverage/lcov-report/dist/test-utils/order-more/models/shipment.js.html +1 -1
  62. package/coverage/lcov-report/dist/test-utils/order-more/models/size.js.html +1 -1
  63. package/coverage/lcov-report/dist/test-utils/order-more/models/utm-medium.js.html +1 -1
  64. package/coverage/lcov-report/dist/test-utils/order-more/models/utm-source.js.html +1 -1
  65. package/coverage/lcov-report/dist/test-utils/order-more/orm.js.html +1 -1
  66. package/coverage/lcov-report/dist/test-utils/six/entities.js.html +114 -0
  67. package/coverage/lcov-report/dist/test-utils/six/index.html +6 -6
  68. package/coverage/lcov-report/dist/test-utils/six/models/customer.js.html +1 -1
  69. package/coverage/lcov-report/dist/test-utils/six/models/index.html +1 -1
  70. package/coverage/lcov-report/dist/test-utils/six/models/line-item.js.html +1 -1
  71. package/coverage/lcov-report/dist/test-utils/six/models/order.js.html +1 -1
  72. package/coverage/lcov-report/dist/test-utils/six/models/parcel-line-item.js.html +1 -1
  73. package/coverage/lcov-report/dist/test-utils/six/models/parcel.js.html +1 -1
  74. package/coverage/lcov-report/dist/test-utils/six/orm.js.html +1 -1
  75. package/coverage/lcov-report/dist/test-utils/thirteen/entities.js.html +132 -0
  76. package/coverage/lcov-report/dist/test-utils/thirteen/index.html +6 -6
  77. package/coverage/lcov-report/dist/test-utils/thirteen/models/audience.js.html +1 -1
  78. package/coverage/lcov-report/dist/test-utils/thirteen/models/brand.js.html +1 -1
  79. package/coverage/lcov-report/dist/test-utils/thirteen/models/category.js.html +1 -1
  80. package/coverage/lcov-report/dist/test-utils/thirteen/models/index.html +1 -1
  81. package/coverage/lcov-report/dist/test-utils/thirteen/models/member.js.html +1 -1
  82. package/coverage/lcov-report/dist/test-utils/thirteen/models/passion.js.html +1 -1
  83. package/coverage/lcov-report/dist/test-utils/thirteen/models/product.js.html +1 -1
  84. package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation-audience.js.html +1 -1
  85. package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation.js.html +1 -1
  86. package/coverage/lcov-report/dist/test-utils/thirteen/orm.js.html +1 -1
  87. package/coverage/lcov-report/dist/test-utils/three/index.html +1 -1
  88. package/coverage/lcov-report/dist/test-utils/three/results.js.html +1 -1
  89. package/coverage/lcov-report/dist/test-utils/twelve/entities.js.html +87 -0
  90. package/coverage/lcov-report/dist/test-utils/twelve/index.html +6 -6
  91. package/coverage/lcov-report/dist/test-utils/twelve/models/index.html +1 -1
  92. package/coverage/lcov-report/dist/test-utils/twelve/models/member.js.html +1 -1
  93. package/coverage/lcov-report/dist/test-utils/twelve/models/prompt.js.html +1 -1
  94. package/coverage/lcov-report/dist/test-utils/twelve/orm.js.html +1 -1
  95. package/coverage/lcov-report/dist/test-utils/two/index.html +1 -1
  96. package/coverage/lcov-report/dist/test-utils/two/results.js.html +1 -1
  97. package/coverage/lcov-report/index.html +47 -47
  98. package/coverage/lcov-report/src/core.ts.html +1527 -0
  99. package/coverage/lcov-report/src/drivers/index.html +97 -0
  100. package/coverage/lcov-report/src/drivers/pgp.ts.html +516 -0
  101. package/coverage/lcov-report/src/factory.ts.html +427 -250
  102. package/coverage/lcov-report/src/index.html +20 -33
  103. package/coverage/lcov-report/src/index.ts.html +23 -5
  104. package/coverage/lcov-report/src/orm.ts.html +954 -0
  105. package/coverage/lcov-report/test-utils/blog/entities.ts.html +102 -0
  106. package/coverage/lcov-report/test-utils/blog/index.html +6 -6
  107. package/coverage/lcov-report/test-utils/blog/models/article.ts.html +1 -1
  108. package/coverage/lcov-report/test-utils/blog/models/article_tag.ts.html +1 -1
  109. package/coverage/lcov-report/test-utils/blog/models/index.html +1 -1
  110. package/coverage/lcov-report/test-utils/blog/models/person.ts.html +1 -1
  111. package/coverage/lcov-report/test-utils/blog/models/tag.ts.html +1 -1
  112. package/coverage/lcov-report/test-utils/blog/orm.ts.html +1 -1
  113. package/coverage/lcov-report/test-utils/five/entities.ts.html +105 -0
  114. package/coverage/lcov-report/test-utils/five/index.html +2 -2
  115. package/coverage/lcov-report/test-utils/five/models/index.html +1 -1
  116. package/coverage/lcov-report/test-utils/five/models/line-item.ts.html +1 -1
  117. package/coverage/lcov-report/test-utils/five/models/order.ts.html +1 -1
  118. package/coverage/lcov-report/test-utils/five/models/parcel-event.ts.html +1 -1
  119. package/coverage/lcov-report/test-utils/five/models/parcel-line-item.ts.html +1 -1
  120. package/coverage/lcov-report/test-utils/five/models/parcel.ts.html +1 -1
  121. package/coverage/lcov-report/test-utils/five/orm.ts.html +1 -1
  122. package/coverage/lcov-report/test-utils/nine/entities.ts.html +75 -0
  123. package/coverage/lcov-report/test-utils/nine/index.html +2 -2
  124. package/coverage/lcov-report/test-utils/nine/models/feature-switch.ts.html +1 -1
  125. package/coverage/lcov-report/test-utils/nine/models/index.html +1 -1
  126. package/coverage/lcov-report/test-utils/nine/orm.ts.html +1 -1
  127. package/coverage/lcov-report/test-utils/order/entities.ts.html +108 -0
  128. package/coverage/lcov-report/test-utils/order/index.html +2 -2
  129. package/coverage/lcov-report/test-utils/order/models/index.html +1 -1
  130. package/coverage/lcov-report/test-utils/order/models/line-item.ts.html +1 -1
  131. package/coverage/lcov-report/test-utils/order/models/order.ts.html +1 -1
  132. package/coverage/lcov-report/test-utils/order/models/product-variant.ts.html +1 -1
  133. package/coverage/lcov-report/test-utils/order/models/product.ts.html +1 -1
  134. package/coverage/lcov-report/test-utils/order/models/utm-source.ts.html +1 -1
  135. package/coverage/lcov-report/test-utils/order/orm.ts.html +1 -1
  136. package/coverage/lcov-report/test-utils/order-more/entities.ts.html +198 -0
  137. package/coverage/lcov-report/test-utils/order-more/index.html +2 -2
  138. package/coverage/lcov-report/test-utils/order-more/models/actual-product-variant.ts.html +1 -1
  139. package/coverage/lcov-report/test-utils/order-more/models/color.ts.html +1 -1
  140. package/coverage/lcov-report/test-utils/order-more/models/customer.ts.html +1 -1
  141. package/coverage/lcov-report/test-utils/order-more/models/gender.ts.html +1 -1
  142. package/coverage/lcov-report/test-utils/order-more/models/index.html +1 -1
  143. package/coverage/lcov-report/test-utils/order-more/models/inventory-level.ts.html +1 -1
  144. package/coverage/lcov-report/test-utils/order-more/models/line-item.ts.html +1 -1
  145. package/coverage/lcov-report/test-utils/order-more/models/order.ts.html +1 -1
  146. package/coverage/lcov-report/test-utils/order-more/models/parcel-event.ts.html +1 -1
  147. package/coverage/lcov-report/test-utils/order-more/models/parcel-line-item.ts.html +1 -1
  148. package/coverage/lcov-report/test-utils/order-more/models/parcel.ts.html +1 -1
  149. package/coverage/lcov-report/test-utils/order-more/models/physical-address.ts.html +1 -1
  150. package/coverage/lcov-report/test-utils/order-more/models/product-variant-image.ts.html +1 -1
  151. package/coverage/lcov-report/test-utils/order-more/models/product-variant.ts.html +1 -1
  152. package/coverage/lcov-report/test-utils/order-more/models/product.ts.html +1 -1
  153. package/coverage/lcov-report/test-utils/order-more/models/refund.ts.html +1 -1
  154. package/coverage/lcov-report/test-utils/order-more/models/shipment-actual-product-variant.ts.html +1 -1
  155. package/coverage/lcov-report/test-utils/order-more/models/shipment.ts.html +1 -1
  156. package/coverage/lcov-report/test-utils/order-more/models/size.ts.html +1 -1
  157. package/coverage/lcov-report/test-utils/order-more/models/utm-medium.ts.html +1 -1
  158. package/coverage/lcov-report/test-utils/order-more/models/utm-source.ts.html +1 -1
  159. package/coverage/lcov-report/test-utils/order-more/orm.ts.html +1 -1
  160. package/coverage/lcov-report/test-utils/six/entities.ts.html +105 -0
  161. package/coverage/lcov-report/test-utils/six/index.html +2 -2
  162. package/coverage/lcov-report/test-utils/six/models/customer.ts.html +1 -1
  163. package/coverage/lcov-report/test-utils/six/models/index.html +1 -1
  164. package/coverage/lcov-report/test-utils/six/models/line-item.ts.html +1 -1
  165. package/coverage/lcov-report/test-utils/six/models/order.ts.html +1 -1
  166. package/coverage/lcov-report/test-utils/six/models/parcel-line-item.ts.html +1 -1
  167. package/coverage/lcov-report/test-utils/six/models/parcel.ts.html +1 -1
  168. package/coverage/lcov-report/test-utils/six/orm.ts.html +1 -1
  169. package/coverage/lcov-report/test-utils/thirteen/entities.ts.html +123 -0
  170. package/coverage/lcov-report/test-utils/thirteen/index.html +2 -2
  171. package/coverage/lcov-report/test-utils/thirteen/models/audience.ts.html +1 -1
  172. package/coverage/lcov-report/test-utils/thirteen/models/brand.ts.html +1 -1
  173. package/coverage/lcov-report/test-utils/thirteen/models/category.ts.html +1 -1
  174. package/coverage/lcov-report/test-utils/thirteen/models/index.html +1 -1
  175. package/coverage/lcov-report/test-utils/thirteen/models/member.ts.html +1 -1
  176. package/coverage/lcov-report/test-utils/thirteen/models/passion.ts.html +1 -1
  177. package/coverage/lcov-report/test-utils/thirteen/models/product.ts.html +1 -1
  178. package/coverage/lcov-report/test-utils/thirteen/models/recommendation-audience.ts.html +1 -1
  179. package/coverage/lcov-report/test-utils/thirteen/models/recommendation.ts.html +1 -1
  180. package/coverage/lcov-report/test-utils/thirteen/orm.ts.html +1 -1
  181. package/coverage/lcov-report/test-utils/three/index.html +1 -1
  182. package/coverage/lcov-report/test-utils/three/results.js.html +1 -1
  183. package/coverage/lcov-report/test-utils/twelve/entities.ts.html +78 -0
  184. package/coverage/lcov-report/test-utils/twelve/index.html +2 -2
  185. package/coverage/lcov-report/test-utils/twelve/models/index.html +1 -1
  186. package/coverage/lcov-report/test-utils/twelve/models/member.ts.html +1 -1
  187. package/coverage/lcov-report/test-utils/twelve/models/prompt.ts.html +1 -1
  188. package/coverage/lcov-report/test-utils/twelve/orm.ts.html +1 -1
  189. package/coverage/lcov-report/test-utils/two/index.html +1 -1
  190. package/coverage/lcov-report/test-utils/two/results.js.html +1 -1
  191. package/coverage/lcov.info +715 -1160
  192. package/dist/example/factories/orm.d.ts +1 -47
  193. package/dist/example/models/employer.d.ts +1 -1
  194. package/dist/example/models/job.d.ts +1 -1
  195. package/dist/example/models/person.d.ts +1 -1
  196. package/dist/src/core.d.ts +66 -0
  197. package/dist/src/{factory.js → core.js} +38 -243
  198. package/dist/src/{factory.spec.d.ts → core.spec.d.ts} +0 -0
  199. package/dist/src/{factory.spec.js → core.spec.js} +56 -43
  200. package/dist/src/driver-integrations/index.d.ts +13 -0
  201. package/dist/src/driver-integrations/index.js +2 -0
  202. package/dist/src/driver-integrations/pgp.d.ts +2 -0
  203. package/dist/src/driver-integrations/pgp.js +57 -0
  204. package/dist/src/index.d.ts +2 -1
  205. package/dist/src/index.js +5 -3
  206. package/dist/src/orm.d.ts +20 -0
  207. package/dist/src/orm.js +190 -0
  208. package/dist/test-utils/blog/entities.d.ts +1 -0
  209. package/dist/test-utils/blog/{orm.js → entities.js} +7 -6
  210. package/dist/test-utils/blog/{orm.ts → entities.ts} +6 -6
  211. package/dist/test-utils/blog/models/article.d.ts +1 -1
  212. package/dist/test-utils/blog/models/article_tag.d.ts +1 -1
  213. package/dist/test-utils/blog/models/person.d.ts +1 -1
  214. package/dist/test-utils/blog/models/tag.d.ts +1 -1
  215. package/dist/test-utils/five/entities.d.ts +6 -0
  216. package/dist/test-utils/five/{orm.js → entities.js} +8 -12
  217. package/dist/test-utils/five/{orm.ts → entities.ts} +7 -12
  218. package/dist/test-utils/five/models/line-item.d.ts +1 -1
  219. package/dist/test-utils/five/models/order.d.ts +1 -1
  220. package/dist/test-utils/five/models/parcel-event.d.ts +1 -1
  221. package/dist/test-utils/five/models/parcel-line-item.d.ts +1 -1
  222. package/dist/test-utils/five/models/parcel.d.ts +1 -1
  223. package/dist/test-utils/nine/entities.d.ts +6 -0
  224. package/dist/test-utils/nine/entities.js +5 -0
  225. package/dist/test-utils/nine/entities.ts +2 -0
  226. package/dist/test-utils/nine/models/feature-switch.d.ts +1 -1
  227. package/dist/test-utils/order/entities.d.ts +26 -0
  228. package/dist/test-utils/order/{orm.js → entities.js} +8 -12
  229. package/{test-utils/order/orm.ts → dist/test-utils/order/entities.ts} +7 -12
  230. package/dist/test-utils/order/models/line-item.d.ts +1 -1
  231. package/dist/test-utils/order/models/order.d.ts +1 -1
  232. package/dist/test-utils/order/models/product-variant.d.ts +1 -1
  233. package/dist/test-utils/order/models/product.d.ts +1 -1
  234. package/dist/test-utils/order/models/utm-source.d.ts +1 -1
  235. package/dist/test-utils/order-more/entities.d.ts +6 -0
  236. package/dist/test-utils/order-more/{orm.js → entities.js} +23 -27
  237. package/dist/test-utils/order-more/{orm.ts → entities.ts} +22 -27
  238. package/dist/test-utils/order-more/models/actual-product-variant.d.ts +1 -1
  239. package/dist/test-utils/order-more/models/color.d.ts +1 -1
  240. package/dist/test-utils/order-more/models/customer.d.ts +1 -1
  241. package/dist/test-utils/order-more/models/gender.d.ts +1 -1
  242. package/dist/test-utils/order-more/models/inventory-level.d.ts +1 -1
  243. package/dist/test-utils/order-more/models/line-item.d.ts +1 -1
  244. package/dist/test-utils/order-more/models/order.d.ts +1 -1
  245. package/dist/test-utils/order-more/models/parcel-event.d.ts +1 -1
  246. package/dist/test-utils/order-more/models/parcel-line-item.d.ts +1 -1
  247. package/dist/test-utils/order-more/models/parcel.d.ts +1 -1
  248. package/dist/test-utils/order-more/models/physical-address.d.ts +1 -1
  249. package/dist/test-utils/order-more/models/product-variant-image.d.ts +1 -1
  250. package/dist/test-utils/order-more/models/product-variant.d.ts +1 -1
  251. package/dist/test-utils/order-more/models/product.d.ts +1 -1
  252. package/dist/test-utils/order-more/models/refund.d.ts +1 -1
  253. package/dist/test-utils/order-more/models/shipment-actual-product-variant.d.ts +1 -1
  254. package/dist/test-utils/order-more/models/shipment.d.ts +1 -1
  255. package/dist/test-utils/order-more/models/size.d.ts +1 -1
  256. package/dist/test-utils/order-more/models/utm-medium.d.ts +1 -1
  257. package/dist/test-utils/order-more/models/utm-source.d.ts +1 -1
  258. package/dist/test-utils/six/entities.d.ts +6 -0
  259. package/dist/test-utils/six/{orm.js → entities.js} +8 -12
  260. package/{test-utils/six/orm.ts → dist/test-utils/six/entities.ts} +7 -12
  261. package/dist/test-utils/six/models/customer.d.ts +1 -1
  262. package/dist/test-utils/six/models/line-item.d.ts +1 -1
  263. package/dist/test-utils/six/models/order.d.ts +1 -1
  264. package/dist/test-utils/six/models/parcel-line-item.d.ts +1 -1
  265. package/dist/test-utils/six/models/parcel.d.ts +1 -1
  266. package/dist/test-utils/thirteen/entities.d.ts +6 -0
  267. package/dist/test-utils/thirteen/{orm.js → entities.js} +11 -15
  268. package/dist/test-utils/thirteen/{orm.ts → entities.ts} +10 -15
  269. package/dist/test-utils/thirteen/models/audience.d.ts +1 -1
  270. package/dist/test-utils/thirteen/models/brand.d.ts +1 -1
  271. package/dist/test-utils/thirteen/models/category.d.ts +1 -1
  272. package/dist/test-utils/thirteen/models/member.d.ts +1 -1
  273. package/dist/test-utils/thirteen/models/passion.d.ts +1 -1
  274. package/dist/test-utils/thirteen/models/product.d.ts +1 -1
  275. package/dist/test-utils/thirteen/models/recommendation-audience.d.ts +1 -1
  276. package/dist/test-utils/thirteen/models/recommendation.d.ts +1 -1
  277. package/dist/test-utils/twelve/entities.d.ts +6 -0
  278. package/dist/test-utils/twelve/entities.js +6 -0
  279. package/dist/test-utils/twelve/entities.ts +3 -0
  280. package/dist/test-utils/twelve/models/member.d.ts +1 -1
  281. package/dist/test-utils/twelve/models/prompt.d.ts +1 -1
  282. package/package.json +4 -3
  283. package/src/{factory.spec.ts → core.spec.ts} +55 -41
  284. package/src/{factory.ts → core.ts} +75 -336
  285. package/src/driver-integrations/index.ts +56 -0
  286. package/src/driver-integrations/pgp.ts +92 -0
  287. package/src/index.ts +5 -3
  288. package/src/orm.ts +291 -0
  289. package/test-utils/blog/{orm.ts → entities.ts} +6 -6
  290. package/test-utils/five/{orm.ts → entities.ts} +7 -12
  291. package/test-utils/nine/entities.ts +2 -0
  292. package/{dist/test-utils/order/orm.ts → test-utils/order/entities.ts} +7 -12
  293. package/test-utils/order-more/{orm.ts → entities.ts} +22 -27
  294. package/{dist/test-utils/six/orm.ts → test-utils/six/entities.ts} +7 -12
  295. package/test-utils/thirteen/{orm.ts → entities.ts} +10 -15
  296. package/test-utils/twelve/entities.ts +3 -0
  297. package/dist/src/factory.d.ts +0 -100
  298. package/dist/test-utils/blog/orm.d.ts +0 -2
  299. package/dist/test-utils/five/orm.d.ts +0 -48
  300. package/dist/test-utils/nine/orm.d.ts +0 -48
  301. package/dist/test-utils/nine/orm.js +0 -9
  302. package/dist/test-utils/nine/orm.ts +0 -7
  303. package/dist/test-utils/order/orm.d.ts +0 -48
  304. package/dist/test-utils/order-more/orm.d.ts +0 -48
  305. package/dist/test-utils/six/orm.d.ts +0 -48
  306. package/dist/test-utils/thirteen/orm.d.ts +0 -48
  307. package/dist/test-utils/twelve/orm.d.ts +0 -48
  308. package/dist/test-utils/twelve/orm.js +0 -10
  309. package/dist/test-utils/twelve/orm.ts +0 -8
  310. package/test-utils/nine/orm.ts +0 -7
  311. package/test-utils/twelve/orm.ts +0 -8
@@ -1,4 +1,4 @@
1
- const camelCase = require('camelcase');
1
+ import camelCase from 'camelcase';
2
2
 
3
3
  export interface IColumnData {
4
4
  column: string;
@@ -54,17 +54,50 @@ export interface IEntityInternal<T extends IModel> {
54
54
  }
55
55
  export type IEntitiesInternal<T extends IModel> = Array<IEntityInternal<T>>;
56
56
 
57
- export interface CreateOptions {
57
+ export interface ICreateCoreOptions {
58
58
  entities: IEntities<IModel>;
59
- db: any;
60
- logError?: (err: Error) => void;
61
59
  }
62
60
 
63
- export const create = ({
64
- entities: externalEntities,
65
- db,
66
- logError
67
- }: CreateOptions) => {
61
+ export interface ICore {
62
+ /* ------------------------------------------------------------------------*/
63
+ /* Object Relational Mapping methods --------------------------------------*/
64
+ /* ------------------------------------------------------------------------*/
65
+
66
+ /* Note these construction methods ensure their count against the number of
67
+ * generated top level business objects - independent of the number of
68
+ * relational rows passed in as a result from a database driver query.
69
+ * Thus, for example, `one` understands that there may be multiple result
70
+ * rows (which a database driver's `one` query method would throw at) but
71
+ * which correctly nest into one Model.)
72
+ */
73
+
74
+ createFromDatabase: <T extends ICollection<IModel>>(rows: any) => T;
75
+ createAnyFromDatabase: <T extends ICollection<IModel>>(
76
+ rows: any,
77
+ rootKey: string | IModel
78
+ ) => T;
79
+ createOneFromDatabase: <T extends IModel>(rows: any) => T;
80
+ createOneOrNoneFromDatabase: <T extends IModel>(rows: any) => T | void;
81
+ createManyFromDatabase: <T extends ICollection<IModel>>(rows: any) => T;
82
+
83
+ /* ------------------------------------------------------------------------*/
84
+ /* Helpful Properties -----------------------------------------------------*/
85
+ /* ------------------------------------------------------------------------*/
86
+
87
+ /* The tables property gives access to the sql select clause string for
88
+ * each entity based on it's `displayName`. This property can be used when
89
+ * writing raw SQL as the select clause, which handles quoting column names
90
+ * and namespacing them to the table to avoid collisions and as required
91
+ * for PureORM mapping.
92
+ */
93
+ tables: { [key: string]: { columns: string } };
94
+ getEntityByModel: (model: IModel) => IEntityInternal<IModel>;
95
+ getEntityByTableName: (tableName: string) => IEntityInternal<IModel>;
96
+ }
97
+
98
+ export const createCore = ({
99
+ entities: externalEntities
100
+ }: ICreateCoreOptions): ICore => {
68
101
  const entities: IEntitiesInternal<IModel> = externalEntities.map(
69
102
  (d: IEntity<IModel>) => {
70
103
  const tableName = d.tableName;
@@ -162,15 +195,6 @@ export const create = ({
162
195
  return entity;
163
196
  };
164
197
 
165
- const defaultErrorHandler = (err: Error) => {
166
- if (!(err.name === 'QueryResultError')) {
167
- if (logError) {
168
- logError(err);
169
- }
170
- }
171
- throw err;
172
- };
173
-
174
198
  /*
175
199
  * In:
176
200
  * [
@@ -388,360 +412,75 @@ export const create = ({
388
412
  }, {});
389
413
  };
390
414
 
391
- const createFromDatabase = <T extends ICollection<IModel>>(
392
- _result: any
393
- ): T | undefined => {
394
- if (!_result || !_result.length) {
395
- return void 0;
396
- }
397
- const result = Array.isArray(_result) ? _result : [_result];
415
+ const createFromDatabase = <T extends ICollection<IModel>>(rows: any): T => {
416
+ const result = Array.isArray(rows) ? rows : [rows];
398
417
  const objectified = result.map(objectifyDatabaseResult);
399
418
  const boified = objectified.map(mapToBos);
400
419
  const clumps = clumpIntoGroups(boified);
401
420
  const nested = clumps.map(nestClump);
402
421
  const models = nested.map((n) => Object.values(n)[0]);
403
422
  const Collection = getEntityByModel(models[0]).Collection;
404
- return models.length ? (new Collection({ models }) as T) : void 0;
423
+ return <T>new Collection({ models });
405
424
  };
406
425
 
407
- const createOneFromDatabase = <T extends IModel>(_result: any): T => {
408
- const collection = createFromDatabase<ICollection<IModel>>(_result);
409
- if (!collection) {
426
+ const createAnyFromDatabase = <T extends ICollection<IModel>>(
427
+ rows: any,
428
+ rootKey: string | IModel
429
+ ): T => {
430
+ if (!rows || !rows.length) {
431
+ const Collection =
432
+ typeof rootKey === 'string'
433
+ ? getEntityByTableName(rootKey).Collection
434
+ : getEntityByModel(rootKey).Collection;
435
+ return new Collection({ models: [] }) as T;
436
+ }
437
+ return <T>createFromDatabase<T>(rows);
438
+ };
439
+
440
+ const createOneFromDatabase = <T extends IModel>(rows: any): T => {
441
+ if (!rows || !rows.length) {
410
442
  throw Error('Did not get one.');
411
443
  }
412
- if (!collection || collection.models.length === 0) {
444
+ const collection = createFromDatabase<ICollection<IModel>>(rows);
445
+ if (!collection || !collection.models || collection.models.length === 0) {
413
446
  throw Error('Did not get one.');
414
447
  } else if (collection.models.length > 1) {
415
448
  throw Error('Got more than one.');
416
449
  }
417
- return collection.models[0] as T;
450
+ return <T>collection.models[0];
418
451
  };
419
452
 
420
453
  const createOneOrNoneFromDatabase = <T extends IModel>(
421
- _result: any
454
+ rows: any
422
455
  ): T | void => {
423
- const collection = createFromDatabase(_result);
424
- if (collection && collection.models.length > 1) {
425
- throw Error('Got more than one.');
456
+ if (!rows || !rows.length) {
457
+ return void 0;
426
458
  }
427
- return collection && (collection.models[0] as T);
459
+ return <T>createOneFromDatabase(rows);
428
460
  };
429
461
 
430
462
  const createManyFromDatabase = <T extends ICollection<IModel>>(
431
- _result: any
463
+ rows: any
432
464
  ): T => {
433
- const collection = createFromDatabase(_result);
434
- if (!collection || collection.models.length === 0) {
465
+ if (!rows || !rows.length) {
435
466
  throw Error('Did not get at least one.');
436
467
  }
437
- return collection as T;
438
- };
439
-
440
- const getSqlInsertParts = (model: IModel) => {
441
- const columns = getEntityByModel(model)
442
- .columnNames.filter(
443
- (column: string, index: number) =>
444
- model[
445
- getEntityByModel(model).propertyNames[index] as keyof typeof model
446
- ] !== void 0
447
- )
448
- .map((col: string) => `"${col}"`)
449
- .join(', ');
450
- const values = getEntityByModel(model)
451
- .propertyNames.map(
452
- (property: string) => model[property as keyof typeof model]
453
- )
454
- .filter((value: any) => value !== void 0);
455
- const valuesVar = values.map(
456
- (value: any, index: number) => `$${index + 1}`
457
- );
458
- return { columns, values, valuesVar };
459
- };
460
-
461
- const getSqlUpdateParts = (model: IModel, on = 'id') => {
462
- const clauseArray = getEntityByModel(model)
463
- .columnNames.filter(
464
- (sqlColumn: string, index: number) =>
465
- model[
466
- getEntityByModel(model).propertyNames[index] as keyof typeof model
467
- ] !== void 0
468
- )
469
- .map(
470
- (sqlColumn: string, index: number) => `"${sqlColumn}" = $${index + 1}`
471
- );
472
- const clause = clauseArray.join(', ');
473
- const idVar = `$${clauseArray.length + 1}`;
474
- const _values = getEntityByModel(model)
475
- .propertyNames.map(
476
- (property: string) => model[property as keyof typeof model]
477
- )
478
- .filter((value: any) => value !== void 0);
479
- const values = [..._values, model[on as keyof typeof model]];
480
- return { clause, idVar, values };
481
- };
482
-
483
- const getMatchingParts = (model: IModel) => {
484
- const whereClause = getEntityByModel(model)
485
- .propertyNames.map((property: string, index: number) =>
486
- model[property as keyof typeof model] != null
487
- ? `"${getEntityByModel(model).tableName}"."${
488
- getEntityByModel(model).columnNames[index]
489
- }"`
490
- : null
491
- )
492
- .filter((x: string | null) => x != null)
493
- .map((x: string | null, i: number) => `${x} = $${i + 1}`)
494
- .join(' AND ');
495
- const values = getEntityByModel(model)
496
- .propertyNames.map((property: string) =>
497
- model[property as keyof typeof model] != null
498
- ? model[property as keyof typeof model]
499
- : null
500
- )
501
- .filter((x: any) => x != null);
502
- return { whereClause, values };
503
- };
504
-
505
- // This one returns an object, which allows it to be more versatile.
506
- // To-do: make this one even better and use it instead of the one above.
507
- const getMatchingPartsObject = (model: IModel) => {
508
- const whereClause = getEntityByModel(model)
509
- .propertyNames.map((property: string, index: number) =>
510
- model[property as keyof typeof model] != null
511
- ? `"${getEntityByModel(model).tableName}"."${
512
- getEntityByModel(model).columnNames[index]
513
- }"`
514
- : null
515
- )
516
- .filter((x: string | null) => x != null)
517
- .map((x: string | null, i: number) => `${x} = $(${i + 1})`)
518
- .join(' AND ');
519
- const values = getEntityByModel(model)
520
- .propertyNames.map((property: string) =>
521
- model[property as keyof typeof model] != null
522
- ? model[property as keyof typeof model]
523
- : null
524
- )
525
- .filter((x: any) => x != null)
526
- .reduce(
527
- (accum: any, val: any, index: number) =>
528
- Object.assign({}, accum, { [index + 1]: val }),
529
- {}
530
- );
531
- return { whereClause, values };
532
- };
533
-
534
- const getNewWith = (model: IModel, sqlColumns: any, values: any) => {
535
- const Constructor = model.constructor as any;
536
- const modelKeys = sqlColumns.map(
537
- (key: string) =>
538
- getEntityByModel(model).propertyNames[
539
- getEntityByModel(model).columnNames.indexOf(key)
540
- ]
541
- );
542
- const modelData = modelKeys.reduce(
543
- (data: any, key: string, index: number) => {
544
- data[key] = values[index];
545
- return data;
546
- },
547
- {}
548
- );
549
- return new Constructor(modelData);
550
- };
551
-
552
- const getValueBySqlColumn = (model: IModel, sqlColumn: string) => {
553
- return model[
554
- getEntityByModel(model).propertyNames[
555
- getEntityByModel(model).columnNames.indexOf(sqlColumn)
556
- ] as keyof typeof model
557
- ];
558
- };
559
- /* ------------------------------------------------------------------------*/
560
- /* Query functions --------------------------------------------------------*/
561
- /* ------------------------------------------------------------------------*/
562
-
563
- const one = <T extends IModel>(
564
- query: string,
565
- values?: object,
566
- errorHandler = defaultErrorHandler
567
- ): T => {
568
- return db
569
- .many(query, values)
570
- .then((rows: any) => createOneFromDatabase(rows))
571
- .catch(errorHandler);
572
- };
573
-
574
- const oneOrNone = <T extends IModel>(
575
- query: string,
576
- values?: object,
577
- errorHandler = defaultErrorHandler
578
- ): T | void => {
579
- return db
580
- .any(query, values)
581
- .then((rows: any) => createOneOrNoneFromDatabase(rows))
582
- .catch(errorHandler);
583
- };
584
-
585
- const many = <T extends ICollection<IModel>>(
586
- query: string,
587
- values?: object,
588
- errorHandler = defaultErrorHandler
589
- ): T => {
590
- return db
591
- .any(query, values)
592
- .then((rows: any) => createManyFromDatabase(rows))
593
- .catch(errorHandler);
594
- };
595
-
596
- const any = <T extends ICollection<IModel>>(
597
- query: string,
598
- values?: object,
599
- errorHandler = defaultErrorHandler
600
- ): T | void => {
601
- return db
602
- .any(query, values)
603
- .then((rows: any) => createFromDatabase(rows))
604
- .catch(errorHandler);
605
- };
606
-
607
- const none = (
608
- query: string,
609
- values?: object,
610
- errorHandler = defaultErrorHandler
611
- ): void => {
612
- return db
613
- .none(query, values)
614
- .then(() => null)
615
- .catch(errorHandler);
616
- };
617
-
618
- /* ------------------------------------------------------------------------*/
619
- /* Built-in basic CRUD functions ------------------------------------------*/
620
- /* ------------------------------------------------------------------------*/
621
-
622
- // Standard create
623
- const create = <T extends IModel>(model: T): T => {
624
- const { columns, values, valuesVar } = getSqlInsertParts(model);
625
- const query = `
626
- INSERT INTO "${getEntityByModel(model).tableName}" ( ${columns} )
627
- VALUES ( ${valuesVar} )
628
- RETURNING ${getEntityByModel(model).selectColumnsClause};
629
- `;
630
- return one<T>(query, values);
631
- };
632
-
633
- // Standard update
634
- const update = <T extends IModel>(model: T, { on = 'id' } = {}): T => {
635
- const { clause, idVar, values } = getSqlUpdateParts(model, on);
636
- const query = `
637
- UPDATE "${getEntityByModel(model).tableName}"
638
- SET ${clause}
639
- WHERE "${getEntityByModel(model).tableName}".${on} = ${idVar}
640
- RETURNING ${getEntityByModel(model).selectColumnsClause};
641
- `;
642
- return one<T>(query, values);
643
- };
644
-
645
- // Standard delete
646
- const _delete = <T extends IModel>(model: T): void => {
647
- const id = (model as any).id;
648
- const query = `
649
- DELETE FROM "${getEntityByModel(model).tableName}"
650
- WHERE "${getEntityByModel(model).tableName}".id = $(id)
651
- `;
652
- return none(query, { id });
653
- };
654
-
655
- const deleteMatching = <T extends IModel>(model: T) => {
656
- const { whereClause, values } = getMatchingParts(model);
657
- const query = `
658
- DELETE FROM "${getEntityByModel(model).tableName}"
659
- WHERE ${whereClause};
660
- `;
661
- return none(query, values);
662
- };
663
-
664
- const getMatching = <T extends IModel>(model: T): T => {
665
- const { whereClause, values } = getMatchingParts(model);
666
- const query = `
667
- SELECT ${getEntityByModel(model).selectColumnsClause}
668
- FROM "${getEntityByModel(model).tableName}"
669
- WHERE ${whereClause};
670
- `;
671
- return one<T>(query, values);
672
- };
673
-
674
- const getOneOrNoneMatching = <T extends IModel>(model: T): T | void => {
675
- const { whereClause, values } = getMatchingParts(model);
676
- const query = `
677
- SELECT ${getEntityByModel(model).selectColumnsClause}
678
- FROM "${getEntityByModel(model).tableName}"
679
- WHERE ${whereClause};
680
- `;
681
- return oneOrNone<T>(query, values);
682
- };
683
-
684
- const getAnyMatching = <T extends ICollection<IModel>>(
685
- model: IModel
686
- ): T | void => {
687
- const { whereClause, values } = getMatchingParts(model);
688
- const query = `
689
- SELECT ${getEntityByModel(model).selectColumnsClause}
690
- FROM "${getEntityByModel(model).tableName}"
691
- WHERE ${whereClause};
692
- `;
693
- return any<T>(query, values);
694
- };
695
-
696
- const getAllMatching = <T extends ICollection<IModel>>(model: IModel): T => {
697
- const { whereClause, values } = getMatchingParts(model);
698
- const query = `
699
- SELECT ${getEntityByModel(model).selectColumnsClause}
700
- FROM "${getEntityByModel(model).tableName}"
701
- WHERE ${whereClause};
702
- `;
703
- return many<T>(query, values);
468
+ return <T>createFromDatabase(rows);
704
469
  };
705
470
 
706
471
  return {
707
- // Query Helper Function
708
- nestClump,
709
- clumpIntoGroups,
710
- mapToBos,
711
- objectifyDatabaseResult,
472
+ getEntityByModel,
473
+ getEntityByTableName,
712
474
  createFromDatabase,
475
+ createAnyFromDatabase,
713
476
  createOneFromDatabase,
714
477
  createOneOrNoneFromDatabase,
715
478
  createManyFromDatabase,
716
- getSqlInsertParts,
717
- getSqlUpdateParts,
718
- getMatchingParts,
719
- getMatchingPartsObject,
720
- getNewWith,
721
- getValueBySqlColumn,
722
- // Query Functions
723
- one,
724
- oneOrNone,
725
- many,
726
- any,
727
- none,
728
- // Built-in basic CRUD functions
729
- create,
730
- update,
731
- delete: _delete,
732
- deleteMatching,
733
- getMatching,
734
- getOneOrNoneMatching,
735
- getAnyMatching,
736
- getAllMatching,
737
- // tables property for access to select columns clause string
738
479
  tables: entities.reduce((accum: any, data: IEntityInternal<IModel>) => {
739
480
  accum[data.displayName] = {
740
481
  columns: data.selectColumnsClause
741
482
  };
742
483
  return accum;
743
- }, {}),
744
- // provide direct access to db
745
- db
484
+ }, {})
746
485
  };
747
486
  };
@@ -0,0 +1,56 @@
1
+ import { ICore, IModel, ICollection } from '../core';
2
+
3
+ export interface ICreateForDriverOptions {
4
+ core: ICore;
5
+ db: any;
6
+ logError?: (err: Error) => never;
7
+ }
8
+
9
+ export interface ICoreIntegratedDriver extends ICore {
10
+ /* ------------------------------------------------------------------------*/
11
+ /* Query methods ----------------------------------------------------------*/
12
+ /* ------------------------------------------------------------------------*/
13
+
14
+ /* Note these query methods ensure their count against the number of
15
+ * generated top level business objects which are created - not the number
16
+ * of relational rows returned from the database driver! Thus, for example,
17
+ * `one` understands that there may be multiple result rows (which a
18
+ * database driver's `one` query method would throw at) but which correctly
19
+ * nest into one Model.)
20
+ */
21
+
22
+ // Execute a query returning a single model, or throws.
23
+ one: <T extends IModel>(
24
+ query: string,
25
+ values?: object,
26
+ errorHandler?: (err: Error) => never
27
+ ) => T;
28
+
29
+ // Execute a query returning either single model or undefined, or throws.
30
+ oneOrNone: <T extends IModel>(
31
+ query: string,
32
+ values?: object,
33
+ errorHandler?: (err: Error) => never
34
+ ) => T | void;
35
+
36
+ // Execute a query returning a Collection with at least one model, or throws.
37
+ many: <T extends ICollection<IModel>>(
38
+ query: string,
39
+ values?: object,
40
+ errorHandler?: (err: Error) => never
41
+ ) => T;
42
+
43
+ // Execute a query returning a Collection.
44
+ any: <T extends ICollection<IModel>>(
45
+ query: string,
46
+ values?: object,
47
+ errorHandler?: (err: Error) => never
48
+ ) => T | void;
49
+
50
+ // Execute a query returning null.
51
+ none: (
52
+ query: string,
53
+ values?: object,
54
+ errorHandler?: (err: Error) => never
55
+ ) => void;
56
+ }
@@ -0,0 +1,92 @@
1
+ import { IModel, ICollection } from '../core';
2
+ import { ICreateForDriverOptions, ICoreIntegratedDriver } from './index';
3
+
4
+ export const createForPGP = ({
5
+ core,
6
+ db,
7
+ logError
8
+ }: ICreateForDriverOptions): ICoreIntegratedDriver => {
9
+ const defaultErrorHandler = (err: Error) => {
10
+ if (!(err.name === 'QueryResultError')) {
11
+ if (logError) {
12
+ logError(err);
13
+ }
14
+ }
15
+ throw err;
16
+ };
17
+
18
+ /* ------------------------------------------------------------------------*/
19
+ /* Query functions --------------------------------------------------------*/
20
+ /* ------------------------------------------------------------------------*/
21
+
22
+ const one = <T extends IModel>(
23
+ query: string,
24
+ values?: object,
25
+ errorHandler = defaultErrorHandler
26
+ ): T => {
27
+ return db
28
+ .many(query, values)
29
+ .then((rows: any) => core.createOneFromDatabase(rows))
30
+ .catch(errorHandler);
31
+ };
32
+
33
+ const oneOrNone = <T extends IModel>(
34
+ query: string,
35
+ values?: object,
36
+ errorHandler = defaultErrorHandler
37
+ ): T | void => {
38
+ return db
39
+ .any(query, values)
40
+ .then((rows: any) => core.createOneOrNoneFromDatabase(rows))
41
+ .catch(errorHandler);
42
+ };
43
+
44
+ const many = <T extends ICollection<IModel>>(
45
+ query: string,
46
+ values?: object,
47
+ errorHandler = defaultErrorHandler
48
+ ): T => {
49
+ return db
50
+ .any(query, values)
51
+ .then((rows: any) => core.createManyFromDatabase(rows))
52
+ .catch(errorHandler);
53
+ };
54
+
55
+ const any = <T extends ICollection<IModel>>(
56
+ query: string,
57
+ values?: object,
58
+ errorHandler = defaultErrorHandler
59
+ ): T | void => {
60
+ return db
61
+ .result(query, values)
62
+ .then((result: any) =>
63
+ core.createAnyFromDatabase(
64
+ result.rows,
65
+ result.fields[0].name.split('#')[0]
66
+ )
67
+ )
68
+ .catch(errorHandler);
69
+ };
70
+
71
+ const none = (
72
+ query: string,
73
+ values?: object,
74
+ errorHandler = defaultErrorHandler
75
+ ): void => {
76
+ return db
77
+ .none(query, values)
78
+ .then(() => null)
79
+ .catch(errorHandler);
80
+ };
81
+
82
+ return Object.assign({}, core, {
83
+ // Query Functions
84
+ one,
85
+ oneOrNone,
86
+ many,
87
+ any,
88
+ none,
89
+ // provide direct access to db
90
+ db
91
+ });
92
+ };
package/src/index.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export {
2
- create,
3
- CreateOptions,
2
+ createCore,
3
+ ICreateCoreOptions,
4
+ ICore,
4
5
  IModel,
5
6
  IModelClass,
6
7
  ICollection,
7
8
  IColumns
8
- } from './factory';
9
+ } from './core';
10
+ export { create, ICreateOptions, IPureORM } from './orm';