@nocobase/database 0.5.0-alpha.38 → 0.7.0-alpha.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 (458) hide show
  1. package/LICENSE +201 -21
  2. package/esm/collection-importer.d.ts +7 -0
  3. package/esm/collection-importer.js +49 -0
  4. package/esm/collection-importer.js.map +1 -0
  5. package/esm/collection.d.ts +73 -0
  6. package/esm/collection.js +224 -0
  7. package/esm/collection.js.map +1 -0
  8. package/esm/database.d.ts +101 -0
  9. package/esm/database.js +275 -0
  10. package/esm/database.js.map +1 -0
  11. package/esm/fields/array-field.d.ts +11 -0
  12. package/esm/fields/array-field.js +26 -0
  13. package/esm/fields/array-field.js.map +1 -0
  14. package/esm/fields/belongs-to-field.d.ts +12 -0
  15. package/esm/fields/belongs-to-field.js +57 -0
  16. package/esm/fields/belongs-to-field.js.map +1 -0
  17. package/esm/fields/belongs-to-many-field.d.ts +11 -0
  18. package/esm/fields/belongs-to-many-field.js +55 -0
  19. package/esm/fields/belongs-to-many-field.js.map +1 -0
  20. package/esm/fields/boolean-field.d.ts +8 -0
  21. package/esm/fields/boolean-field.js +8 -0
  22. package/esm/fields/boolean-field.js.map +1 -0
  23. package/esm/fields/context-field.d.ts +13 -0
  24. package/esm/fields/context-field.js +43 -0
  25. package/esm/fields/context-field.js.map +1 -0
  26. package/esm/fields/date-field.d.ts +8 -0
  27. package/esm/fields/date-field.js +8 -0
  28. package/esm/fields/date-field.js.map +1 -0
  29. package/esm/fields/field.d.ts +37 -0
  30. package/esm/fields/field.js +74 -0
  31. package/esm/fields/field.js.map +1 -0
  32. package/esm/fields/has-inverse-field.d.ts +4 -0
  33. package/esm/fields/has-inverse-field.js +2 -0
  34. package/esm/fields/has-inverse-field.js.map +1 -0
  35. package/esm/fields/has-many-field.d.ts +64 -0
  36. package/esm/fields/has-many-field.js +58 -0
  37. package/esm/fields/has-many-field.js.map +1 -0
  38. package/esm/fields/has-one-field.d.ts +64 -0
  39. package/esm/fields/has-one-field.js +57 -0
  40. package/esm/fields/has-one-field.js.map +1 -0
  41. package/esm/fields/index.d.ts +40 -0
  42. package/esm/fields/index.js +21 -0
  43. package/esm/fields/index.js.map +1 -0
  44. package/esm/fields/json-field.d.ts +14 -0
  45. package/esm/fields/json-field.js +17 -0
  46. package/esm/fields/json-field.js.map +1 -0
  47. package/esm/fields/number-field.d.ts +32 -0
  48. package/esm/fields/number-field.js +28 -0
  49. package/esm/fields/number-field.js.map +1 -0
  50. package/esm/fields/password-field.d.ts +21 -0
  51. package/esm/fields/password-field.js +71 -0
  52. package/esm/fields/password-field.js.map +1 -0
  53. package/esm/fields/radio-field.d.ts +14 -0
  54. package/esm/fields/radio-field.js +49 -0
  55. package/esm/fields/radio-field.js.map +1 -0
  56. package/esm/fields/relation-field.d.ts +20 -0
  57. package/esm/fields/relation-field.js +27 -0
  58. package/esm/fields/relation-field.js.map +1 -0
  59. package/esm/fields/sort-field.d.ts +16 -0
  60. package/esm/fields/sort-field.js +90 -0
  61. package/esm/fields/sort-field.js.map +1 -0
  62. package/esm/fields/string-field.d.ts +8 -0
  63. package/esm/fields/string-field.js +8 -0
  64. package/esm/fields/string-field.js.map +1 -0
  65. package/esm/fields/text-field.d.ts +8 -0
  66. package/esm/fields/text-field.js +8 -0
  67. package/esm/fields/text-field.js.map +1 -0
  68. package/esm/fields/time-field.d.ts +8 -0
  69. package/esm/fields/time-field.js +8 -0
  70. package/esm/fields/time-field.js.map +1 -0
  71. package/esm/fields/uid-field.d.ts +10 -0
  72. package/esm/fields/uid-field.js +27 -0
  73. package/esm/fields/uid-field.js.map +1 -0
  74. package/esm/fields/virtual-field.d.ts +8 -0
  75. package/esm/fields/virtual-field.js +8 -0
  76. package/esm/fields/virtual-field.js.map +1 -0
  77. package/esm/filter-parser.d.ts +27 -0
  78. package/esm/filter-parser.js +185 -0
  79. package/esm/filter-parser.js.map +1 -0
  80. package/esm/index.d.ts +15 -0
  81. package/esm/index.js +16 -0
  82. package/esm/index.js.map +1 -0
  83. package/esm/magic-attribute-model.d.ts +7 -0
  84. package/esm/magic-attribute-model.js +70 -0
  85. package/esm/magic-attribute-model.js.map +1 -0
  86. package/esm/mock-database.d.ts +22 -0
  87. package/esm/mock-database.js +34 -0
  88. package/esm/mock-database.js.map +1 -0
  89. package/esm/model-hook.d.ts +12 -0
  90. package/esm/model-hook.js +61 -0
  91. package/esm/model-hook.js.map +1 -0
  92. package/esm/model.d.ts +15 -0
  93. package/esm/model.js +80 -0
  94. package/esm/model.js.map +1 -0
  95. package/esm/operators/array.d.ts +26 -0
  96. package/esm/operators/array.js +105 -0
  97. package/esm/operators/array.js.map +1 -0
  98. package/esm/operators/association.d.ts +10 -0
  99. package/esm/operators/association.js +14 -0
  100. package/esm/operators/association.js.map +1 -0
  101. package/esm/operators/date.d.ts +34 -0
  102. package/esm/operators/date.js +35 -0
  103. package/esm/operators/date.js.map +1 -0
  104. package/esm/operators/empty.d.ts +28 -0
  105. package/esm/operators/empty.js +58 -0
  106. package/esm/operators/empty.js.map +1 -0
  107. package/esm/operators/index.d.ts +2 -0
  108. package/esm/operators/index.js +2 -0
  109. package/esm/operators/index.js.map +1 -0
  110. package/esm/operators/ne.d.ts +10 -0
  111. package/esm/operators/ne.js +12 -0
  112. package/esm/operators/ne.js.map +1 -0
  113. package/esm/operators/string.d.ts +21 -0
  114. package/esm/operators/string.js +35 -0
  115. package/esm/operators/string.js.map +1 -0
  116. package/esm/operators/utils.d.ts +4 -0
  117. package/esm/operators/utils.js +11 -0
  118. package/esm/operators/utils.js.map +1 -0
  119. package/esm/options-parser.d.ts +31 -0
  120. package/esm/options-parser.js +225 -0
  121. package/esm/options-parser.js.map +1 -0
  122. package/esm/playground.d.ts +1 -0
  123. package/esm/playground.js +53 -0
  124. package/esm/playground.js.map +1 -0
  125. package/esm/relation-repository/belongs-to-many-repository.d.ts +36 -0
  126. package/esm/relation-repository/belongs-to-many-repository.js +199 -0
  127. package/esm/relation-repository/belongs-to-many-repository.js.map +1 -0
  128. package/esm/relation-repository/belongs-to-repository.d.ts +17 -0
  129. package/esm/relation-repository/belongs-to-repository.js +4 -0
  130. package/esm/relation-repository/belongs-to-repository.js.map +1 -0
  131. package/esm/relation-repository/hasmany-repository.d.ts +23 -0
  132. package/esm/relation-repository/hasmany-repository.js +125 -0
  133. package/esm/relation-repository/hasmany-repository.js.map +1 -0
  134. package/esm/relation-repository/hasone-repository.d.ts +17 -0
  135. package/esm/relation-repository/hasone-repository.js +4 -0
  136. package/esm/relation-repository/hasone-repository.js.map +1 -0
  137. package/esm/relation-repository/multiple-relation-repository.d.ts +23 -0
  138. package/esm/relation-repository/multiple-relation-repository.js +149 -0
  139. package/esm/relation-repository/multiple-relation-repository.js.map +1 -0
  140. package/esm/relation-repository/relation-repository.d.ts +32 -0
  141. package/esm/relation-repository/relation-repository.js +93 -0
  142. package/esm/relation-repository/relation-repository.js.map +1 -0
  143. package/esm/relation-repository/single-relation-repository.d.ts +23 -0
  144. package/esm/relation-repository/single-relation-repository.js +96 -0
  145. package/esm/relation-repository/single-relation-repository.js.map +1 -0
  146. package/esm/relation-repository/types.d.ts +7 -0
  147. package/esm/relation-repository/types.js +2 -0
  148. package/esm/relation-repository/types.js.map +1 -0
  149. package/esm/repository.d.ts +165 -0
  150. package/esm/repository.js +276 -0
  151. package/esm/repository.js.map +1 -0
  152. package/esm/transaction-decorator.d.ts +1 -0
  153. package/esm/transaction-decorator.js +63 -0
  154. package/esm/transaction-decorator.js.map +1 -0
  155. package/esm/update-associations.d.ts +60 -0
  156. package/esm/update-associations.js +362 -0
  157. package/esm/update-associations.js.map +1 -0
  158. package/esm/update-guard.d.ts +26 -0
  159. package/esm/update-guard.js +122 -0
  160. package/esm/update-guard.js.map +1 -0
  161. package/lib/collection-importer.d.ts +7 -0
  162. package/lib/collection-importer.js +75 -0
  163. package/lib/collection-importer.js.map +1 -0
  164. package/lib/collection.d.ts +73 -0
  165. package/lib/collection.js +231 -0
  166. package/lib/collection.js.map +1 -0
  167. package/lib/database.d.ts +93 -43
  168. package/lib/database.js +277 -471
  169. package/lib/database.js.map +1 -1
  170. package/lib/fields/array-field.d.ts +11 -0
  171. package/lib/fields/array-field.js +30 -0
  172. package/lib/fields/array-field.js.map +1 -0
  173. package/lib/fields/belongs-to-field.d.ts +12 -0
  174. package/lib/fields/belongs-to-field.js +61 -0
  175. package/lib/fields/belongs-to-field.js.map +1 -0
  176. package/lib/fields/belongs-to-many-field.d.ts +11 -0
  177. package/lib/fields/belongs-to-many-field.js +59 -0
  178. package/lib/fields/belongs-to-many-field.js.map +1 -0
  179. package/lib/fields/boolean-field.d.ts +8 -0
  180. package/lib/fields/boolean-field.js +12 -0
  181. package/lib/fields/boolean-field.js.map +1 -0
  182. package/lib/fields/context-field.d.ts +13 -0
  183. package/lib/fields/context-field.js +47 -0
  184. package/lib/fields/context-field.js.map +1 -0
  185. package/lib/fields/date-field.d.ts +8 -0
  186. package/lib/fields/date-field.js +12 -0
  187. package/lib/fields/date-field.js.map +1 -0
  188. package/lib/fields/field.d.ts +37 -0
  189. package/lib/fields/field.js +81 -0
  190. package/lib/fields/field.js.map +1 -0
  191. package/lib/fields/has-inverse-field.d.ts +4 -0
  192. package/lib/fields/has-inverse-field.js +3 -0
  193. package/lib/fields/has-inverse-field.js.map +1 -0
  194. package/lib/fields/has-many-field.d.ts +64 -0
  195. package/lib/fields/has-many-field.js +62 -0
  196. package/lib/fields/has-many-field.js.map +1 -0
  197. package/lib/fields/has-one-field.d.ts +64 -0
  198. package/lib/fields/has-one-field.js +61 -0
  199. package/lib/fields/has-one-field.js.map +1 -0
  200. package/lib/fields/index.d.ts +40 -10
  201. package/lib/fields/index.js +31 -138
  202. package/lib/fields/index.js.map +1 -1
  203. package/lib/fields/json-field.d.ts +14 -0
  204. package/lib/fields/json-field.js +22 -0
  205. package/lib/fields/json-field.js.map +1 -0
  206. package/lib/fields/number-field.d.ts +32 -0
  207. package/lib/fields/number-field.js +36 -0
  208. package/lib/fields/number-field.js.map +1 -0
  209. package/lib/fields/password-field.d.ts +21 -0
  210. package/lib/fields/password-field.js +78 -0
  211. package/lib/fields/password-field.js.map +1 -0
  212. package/lib/fields/radio-field.d.ts +14 -0
  213. package/lib/fields/radio-field.js +53 -0
  214. package/lib/fields/radio-field.js.map +1 -0
  215. package/lib/fields/relation-field.d.ts +20 -0
  216. package/lib/fields/relation-field.js +31 -0
  217. package/lib/fields/relation-field.js.map +1 -0
  218. package/lib/fields/sort-field.d.ts +16 -0
  219. package/lib/fields/sort-field.js +94 -0
  220. package/lib/fields/sort-field.js.map +1 -0
  221. package/lib/fields/string-field.d.ts +8 -0
  222. package/lib/fields/string-field.js +12 -0
  223. package/lib/fields/string-field.js.map +1 -0
  224. package/lib/fields/text-field.d.ts +8 -0
  225. package/lib/fields/text-field.js +12 -0
  226. package/lib/fields/text-field.js.map +1 -0
  227. package/lib/fields/time-field.d.ts +8 -0
  228. package/lib/fields/time-field.js +12 -0
  229. package/lib/fields/time-field.js.map +1 -0
  230. package/lib/fields/uid-field.d.ts +10 -0
  231. package/lib/fields/uid-field.js +31 -0
  232. package/lib/fields/uid-field.js.map +1 -0
  233. package/lib/fields/virtual-field.d.ts +8 -0
  234. package/lib/fields/virtual-field.js +12 -0
  235. package/lib/fields/virtual-field.js.map +1 -0
  236. package/lib/filter-parser.d.ts +27 -0
  237. package/lib/filter-parser.js +191 -0
  238. package/lib/filter-parser.js.map +1 -0
  239. package/lib/index.d.ts +13 -6
  240. package/lib/index.js +27 -60
  241. package/lib/index.js.map +1 -1
  242. package/lib/magic-attribute-model.d.ts +7 -0
  243. package/lib/magic-attribute-model.js +77 -0
  244. package/lib/magic-attribute-model.js.map +1 -0
  245. package/lib/mock-database.d.ts +22 -0
  246. package/lib/mock-database.js +40 -0
  247. package/lib/mock-database.js.map +1 -0
  248. package/lib/model-hook.d.ts +12 -0
  249. package/lib/model-hook.js +68 -0
  250. package/lib/model-hook.js.map +1 -0
  251. package/lib/model.d.ts +11 -45
  252. package/lib/model.js +76 -452
  253. package/lib/model.js.map +1 -1
  254. package/lib/operators/array.d.ts +26 -0
  255. package/lib/operators/array.js +107 -0
  256. package/lib/operators/array.js.map +1 -0
  257. package/lib/operators/association.d.ts +10 -0
  258. package/lib/operators/association.js +16 -0
  259. package/lib/operators/association.js.map +1 -0
  260. package/lib/operators/date.d.ts +34 -0
  261. package/lib/operators/date.js +40 -0
  262. package/lib/operators/date.js.map +1 -0
  263. package/lib/operators/empty.d.ts +28 -0
  264. package/lib/operators/empty.js +82 -0
  265. package/lib/operators/empty.js.map +1 -0
  266. package/lib/operators/index.d.ts +2 -0
  267. package/lib/operators/index.js +4 -0
  268. package/lib/operators/index.js.map +1 -0
  269. package/lib/operators/ne.d.ts +10 -0
  270. package/lib/operators/ne.js +14 -0
  271. package/lib/operators/ne.js.map +1 -0
  272. package/lib/operators/string.d.ts +21 -0
  273. package/lib/operators/string.js +37 -0
  274. package/lib/operators/string.js.map +1 -0
  275. package/lib/operators/utils.d.ts +4 -0
  276. package/lib/operators/utils.js +16 -0
  277. package/lib/operators/utils.js.map +1 -0
  278. package/lib/options-parser.d.ts +31 -0
  279. package/lib/options-parser.js +232 -0
  280. package/lib/options-parser.js.map +1 -0
  281. package/lib/playground.d.ts +1 -0
  282. package/lib/playground.js +55 -0
  283. package/lib/playground.js.map +1 -0
  284. package/lib/relation-repository/belongs-to-many-repository.d.ts +36 -0
  285. package/lib/relation-repository/belongs-to-many-repository.js +206 -0
  286. package/lib/relation-repository/belongs-to-many-repository.js.map +1 -0
  287. package/lib/relation-repository/belongs-to-repository.d.ts +17 -0
  288. package/lib/relation-repository/belongs-to-repository.js +8 -0
  289. package/lib/relation-repository/belongs-to-repository.js.map +1 -0
  290. package/lib/relation-repository/hasmany-repository.d.ts +23 -0
  291. package/lib/relation-repository/hasmany-repository.js +129 -0
  292. package/lib/relation-repository/hasmany-repository.js.map +1 -0
  293. package/lib/relation-repository/hasone-repository.d.ts +17 -0
  294. package/lib/relation-repository/hasone-repository.js +8 -0
  295. package/lib/relation-repository/hasone-repository.js.map +1 -0
  296. package/lib/relation-repository/multiple-relation-repository.d.ts +23 -0
  297. package/lib/relation-repository/multiple-relation-repository.js +153 -0
  298. package/lib/relation-repository/multiple-relation-repository.js.map +1 -0
  299. package/lib/relation-repository/relation-repository.d.ts +32 -0
  300. package/lib/relation-repository/relation-repository.js +100 -0
  301. package/lib/relation-repository/relation-repository.js.map +1 -0
  302. package/lib/relation-repository/single-relation-repository.d.ts +23 -0
  303. package/lib/relation-repository/single-relation-repository.js +103 -0
  304. package/lib/relation-repository/single-relation-repository.js.map +1 -0
  305. package/lib/relation-repository/types.d.ts +7 -0
  306. package/lib/relation-repository/types.js +3 -0
  307. package/lib/relation-repository/types.js.map +1 -0
  308. package/lib/repository.d.ts +165 -0
  309. package/lib/repository.js +302 -0
  310. package/lib/repository.js.map +1 -0
  311. package/lib/transaction-decorator.d.ts +1 -0
  312. package/lib/transaction-decorator.js +70 -0
  313. package/lib/transaction-decorator.js.map +1 -0
  314. package/lib/update-associations.d.ts +60 -0
  315. package/lib/update-associations.js +374 -0
  316. package/lib/update-associations.js.map +1 -0
  317. package/lib/update-guard.d.ts +26 -0
  318. package/lib/update-guard.js +129 -0
  319. package/lib/update-guard.js.map +1 -0
  320. package/package.json +17 -5
  321. package/src/__tests__/collection-importer.test.ts +21 -0
  322. package/src/__tests__/collection.sortable.test.ts +65 -0
  323. package/src/__tests__/collection.test.ts +218 -0
  324. package/src/__tests__/database.import.test.ts +33 -0
  325. package/src/__tests__/database.test.ts +229 -0
  326. package/src/__tests__/field-options/hidden.test.ts +302 -0
  327. package/src/__tests__/field-options/sort-by.test.ts +220 -0
  328. package/src/__tests__/fields/belongs-to-field.test.ts +162 -0
  329. package/src/__tests__/fields/belongs-to-many-field.test.ts +61 -0
  330. package/src/__tests__/fields/context-field.test.ts +140 -0
  331. package/src/__tests__/fields/has-many-field.test.ts +152 -0
  332. package/src/__tests__/fields/has-one-field.test.ts +67 -0
  333. package/src/__tests__/fields/password-field.test.ts +30 -0
  334. package/src/__tests__/fields/sort-field.test.ts +133 -0
  335. package/src/__tests__/fields/string-field.test.ts +77 -0
  336. package/src/__tests__/filter-parser.test.ts +104 -0
  337. package/src/__tests__/fixtures/c0/a.ts +6 -0
  338. package/src/__tests__/fixtures/c1/b.ts +6 -0
  339. package/src/__tests__/fixtures/c2/a.ts +6 -0
  340. package/src/__tests__/fixtures/collections/delay-extend.ts +6 -0
  341. package/src/__tests__/fixtures/collections/delay-extend2.ts +6 -0
  342. package/src/__tests__/fixtures/collections/extend.ts +6 -0
  343. package/src/__tests__/fixtures/collections/extend2.ts +6 -0
  344. package/src/__tests__/fixtures/collections/posts.ts +4 -0
  345. package/src/__tests__/fixtures/collections/tags.js +4 -0
  346. package/src/__tests__/fixtures/collections/test.jpg +0 -0
  347. package/src/__tests__/fixtures/collections/user.json +9 -0
  348. package/src/__tests__/index.ts +1 -0
  349. package/src/__tests__/magic-attribute-model.test.ts +103 -0
  350. package/src/__tests__/model.test.ts +60 -0
  351. package/src/__tests__/operator/array-operator.test.ts +268 -0
  352. package/src/__tests__/operator/association-operator.test.ts +263 -0
  353. package/src/__tests__/operator/date-operator.test.ts +165 -0
  354. package/src/__tests__/operator/empty-operator.test.ts +77 -0
  355. package/src/__tests__/operator/ne.test.ts +33 -0
  356. package/src/__tests__/operator/string-operator.test.ts +62 -0
  357. package/src/__tests__/option-parser.test.ts +185 -0
  358. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +697 -0
  359. package/src/__tests__/relation-repository/has-many-repository.test.ts +414 -0
  360. package/src/__tests__/relation-repository/hasone-repository.test.ts +77 -0
  361. package/src/__tests__/repository/count.test.ts +180 -0
  362. package/src/__tests__/repository/create.test.ts +163 -0
  363. package/src/__tests__/repository/destroy.test.ts +196 -0
  364. package/src/__tests__/repository/find.test.ts +247 -0
  365. package/src/__tests__/repository/update.test.ts +60 -0
  366. package/src/__tests__/repository.test.ts +438 -0
  367. package/src/__tests__/update-associations.test.ts +412 -0
  368. package/src/__tests__/update-guard.test.ts +376 -0
  369. package/src/collection-importer.ts +49 -0
  370. package/src/collection.ts +282 -0
  371. package/src/database.ts +340 -0
  372. package/src/fields/array-field.ts +35 -0
  373. package/src/fields/belongs-to-field.ts +76 -0
  374. package/src/fields/belongs-to-many-field.ts +77 -0
  375. package/src/fields/boolean-field.ts +12 -0
  376. package/src/fields/context-field.ts +45 -0
  377. package/src/fields/date-field.ts +12 -0
  378. package/src/fields/field.ts +105 -0
  379. package/src/fields/has-inverse-field.ts +5 -0
  380. package/src/fields/has-many-field.ts +143 -0
  381. package/src/fields/has-one-field.ts +136 -0
  382. package/src/fields/index.ts +72 -0
  383. package/src/fields/json-field.ts +25 -0
  384. package/src/fields/number-field.ts +52 -0
  385. package/src/fields/password-field.ts +72 -0
  386. package/src/fields/radio-field.ts +50 -0
  387. package/src/fields/relation-field.ts +37 -0
  388. package/src/fields/sort-field.ts +96 -0
  389. package/src/fields/string-field.ts +12 -0
  390. package/src/fields/text-field.ts +12 -0
  391. package/src/fields/time-field.ts +12 -0
  392. package/src/fields/uid-field.ts +24 -0
  393. package/src/fields/virtual-field.ts +12 -0
  394. package/src/filter-parser.ts +243 -0
  395. package/src/index.ts +16 -0
  396. package/src/magic-attribute-model.ts +62 -0
  397. package/src/mock-database.ts +42 -0
  398. package/src/model-hook.ts +69 -0
  399. package/src/model.ts +114 -0
  400. package/src/operators/array.ts +145 -0
  401. package/src/operators/association.ts +14 -0
  402. package/src/operators/date.ts +41 -0
  403. package/src/operators/empty.ts +75 -0
  404. package/src/operators/index.ts +8 -0
  405. package/src/operators/ne.ts +12 -0
  406. package/src/operators/string.ts +40 -0
  407. package/src/operators/utils.ts +13 -0
  408. package/src/options-parser.ts +285 -0
  409. package/src/playground.ts +52 -0
  410. package/src/relation-repository/belongs-to-many-repository.ts +240 -0
  411. package/src/relation-repository/belongs-to-repository.ts +23 -0
  412. package/src/relation-repository/hasmany-repository.ts +145 -0
  413. package/src/relation-repository/hasone-repository.ts +23 -0
  414. package/src/relation-repository/multiple-relation-repository.ts +198 -0
  415. package/src/relation-repository/relation-repository.ts +114 -0
  416. package/src/relation-repository/single-relation-repository.ts +99 -0
  417. package/src/relation-repository/types.ts +15 -0
  418. package/src/repository.ts +478 -0
  419. package/src/transaction-decorator.ts +58 -0
  420. package/src/update-associations.ts +478 -0
  421. package/src/update-guard.ts +167 -0
  422. package/tsconfig.build.json +9 -0
  423. package/tsconfig.json +5 -0
  424. package/examples/index.ts +0 -125
  425. package/examples/plugins/db-driven/index.ts +0 -25
  426. package/examples/plugins/db-driven/tables/fields.ts +0 -78
  427. package/examples/plugins/db-driven/tables/tables.ts +0 -53
  428. package/examples/tables/bar.js +0 -26
  429. package/examples/tables/comments.ts +0 -19
  430. package/examples/tables/foo.json +0 -3
  431. package/examples/tables/posts.ts +0 -28
  432. package/examples/tables/profiles.ts +0 -23
  433. package/examples/tables/tags.ts +0 -15
  434. package/examples/tables/users.ts +0 -34
  435. package/lib/database.d.ts.map +0 -1
  436. package/lib/fields/field-types.d.ts +0 -419
  437. package/lib/fields/field-types.d.ts.map +0 -1
  438. package/lib/fields/field-types.js +0 -1222
  439. package/lib/fields/field-types.js.map +0 -1
  440. package/lib/fields/index.d.ts.map +0 -1
  441. package/lib/fields/option-types.d.ts +0 -105
  442. package/lib/fields/option-types.d.ts.map +0 -1
  443. package/lib/fields/option-types.js +0 -18
  444. package/lib/fields/option-types.js.map +0 -1
  445. package/lib/index.d.ts.map +0 -1
  446. package/lib/model.d.ts.map +0 -1
  447. package/lib/op.d.ts +0 -45
  448. package/lib/op.d.ts.map +0 -1
  449. package/lib/op.js +0 -225
  450. package/lib/op.js.map +0 -1
  451. package/lib/table.d.ts +0 -56
  452. package/lib/table.d.ts.map +0 -1
  453. package/lib/table.js +0 -456
  454. package/lib/table.js.map +0 -1
  455. package/lib/utils.d.ts +0 -26
  456. package/lib/utils.d.ts.map +0 -1
  457. package/lib/utils.js +0 -438
  458. package/lib/utils.js.map +0 -1
package/lib/model.d.ts CHANGED
@@ -1,49 +1,15 @@
1
- import { Model as SequelizeModel, ProjectionAlias, SaveOptions } from 'sequelize';
2
- import Database from './database';
3
- export interface ApiJsonOptions {
4
- fields?: string[] | {
5
- only?: string[];
6
- appends?: string[];
7
- } | {
8
- except?: string[];
9
- appends?: string[];
10
- };
11
- filter?: any;
12
- sort?: any;
13
- page?: number;
14
- perPage?: number;
15
- context?: any;
1
+ import { Model as SequelizeModel } from 'sequelize';
2
+ import { Collection } from './collection';
3
+ import { Database } from './database';
4
+ interface IModel {
16
5
  [key: string]: any;
17
6
  }
18
- export interface WithCountAttributeOptions {
19
- association: string;
20
- sourceAlias?: string;
21
- where?: any;
22
- alias?: string;
23
- [key: string]: any;
24
- }
25
- export declare const DEFAULT_OFFSET = 0;
26
- export declare const DEFAULT_LIMIT = 100;
27
- export declare const MAX_LIMIT = 500;
28
- export interface UpdateAssociationOptions extends SaveOptions {
29
- context?: any;
30
- }
31
- export declare abstract class Model extends SequelizeModel {
32
- [key: string]: any;
7
+ export declare class Model<TModelAttributes extends {} = any, TCreationAttributes extends {} = TModelAttributes> extends SequelizeModel<TModelAttributes, TCreationAttributes> implements IModel {
33
8
  static database: Database;
34
- get database(): Database;
35
- static withCountAttribute(options?: string | WithCountAttributeOptions): string | ProjectionAlias;
36
- static selectQuery(options?: {}): string;
37
- static parseApiJson(options: ApiJsonOptions): any;
38
- getValuesByFieldNames(scope?: any[]): {};
39
- updateSingleAssociation(key: string, data: any, options?: UpdateAssociationOptions): Promise<void>;
40
- updateMultipleAssociation(associationName: string, data: any, options?: UpdateAssociationOptions): Promise<void>;
41
- updateAssociation(key: string, data: any, options?: UpdateAssociationOptions): Promise<void>;
42
- updateAssociations(data: any, options?: UpdateAssociationOptions): Promise<void>;
9
+ static collection: Collection;
10
+ toJSON<T extends TModelAttributes>(): T;
11
+ private hiddenObjKey;
12
+ private sortAssociations;
13
+ private sortArray;
43
14
  }
44
- export declare type ModelCtor<M extends Model> = typeof Model & {
45
- new (): M;
46
- } & {
47
- [key: string]: any;
48
- };
49
- export default Model;
15
+ export {};
package/lib/model.js CHANGED
@@ -1,463 +1,87 @@
1
1
  "use strict";
2
-
3
- function _react() {
4
- const data = _interopRequireDefault(require("react"));
5
-
6
- _react = function _react() {
7
- return data;
8
- };
9
-
10
- return data;
11
- }
12
-
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
16
-
17
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
-
19
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
20
-
21
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) {
23
- return value instanceof P ? value : new P(function (resolve) {
24
- resolve(value);
25
- });
26
- }
27
-
28
- return new (P || (P = Promise))(function (resolve, reject) {
29
- function fulfilled(value) {
30
- try {
31
- step(generator.next(value));
32
- } catch (e) {
33
- reject(e);
34
- }
35
- }
36
-
37
- function rejected(value) {
38
- try {
39
- step(generator["throw"](value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- }
44
-
45
- function step(result) {
46
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
47
- }
48
-
49
- step((generator = generator.apply(thisArg, _arguments || [])).next());
50
- });
51
- };
52
-
53
- var __rest = void 0 && (void 0).__rest || function (s, e) {
54
- var t = {};
55
-
56
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
57
-
58
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
59
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
60
- }
61
- return t;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
62
4
  };
63
-
64
- Object.defineProperty(exports, "__esModule", {
65
- value: true
66
- });
67
- exports.Model = exports.MAX_LIMIT = exports.DEFAULT_LIMIT = exports.DEFAULT_OFFSET = void 0;
68
-
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Model = void 0;
69
7
  const sequelize_1 = require("sequelize");
70
-
71
- const fields_1 = require("./fields");
72
-
73
- const utils_1 = require("./utils");
74
-
75
- exports.DEFAULT_OFFSET = 0;
76
- exports.DEFAULT_LIMIT = 100;
77
- exports.MAX_LIMIT = 500;
78
-
8
+ const lodash_1 = __importDefault(require("lodash"));
79
9
  class Model extends sequelize_1.Model {
80
- get database() {
81
- return this.constructor.database;
82
- }
83
-
84
- static withCountAttribute(options) {
85
- if (typeof options === 'string') {
86
- options = {
87
- association: options
88
- };
89
- }
90
-
91
- const _options = options,
92
- sourceAlias = _options.sourceAlias,
93
- association = _options.association,
94
- _options$where = _options.where,
95
- where = _options$where === void 0 ? {} : _options$where,
96
- alias = _options.alias,
97
- restOptions = __rest(options, ["sourceAlias", "association", "where", "alias"]);
98
-
99
- const associator = this.associations[association];
100
- const table = this.database.getTable(this.name);
101
- const field = table.getField(association);
102
- const _field$options = field.options,
103
- targetKey = _field$options.targetKey,
104
- otherKey = _field$options.otherKey,
105
- foreignKey = _field$options.foreignKey,
106
- sourceKey = _field$options.sourceKey;
107
-
108
- if (associator.associationType === 'HasMany') {
109
- where[foreignKey] = {
110
- [sequelize_1.Op.eq]: sequelize_1.Sequelize.col(`${sourceAlias || this.name}.${sourceKey}`)
111
- };
112
- } else if (associator.associationType === 'BelongsToMany') {
113
- where[targetKey] = {
114
- [sequelize_1.Op.in]: sequelize_1.Sequelize.literal(`(${associator.through.model.selectQuery({
115
- attributes: [otherKey],
116
- where: Object.assign({
117
- [foreignKey]: {
118
- [sequelize_1.Op.eq]: sequelize_1.Sequelize.col(`${sourceAlias || this.name}.${sourceKey}`)
10
+ toJSON() {
11
+ const handleObj = (obj, options) => {
12
+ const handles = [
13
+ (data) => {
14
+ if (data instanceof Model) {
15
+ return data.toJSON();
16
+ }
17
+ return data;
18
+ },
19
+ this.hiddenObjKey,
20
+ ];
21
+ return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), obj);
22
+ };
23
+ const handleArray = (arrayOfObj, options) => {
24
+ const handles = [this.sortAssociations];
25
+ return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), arrayOfObj || []);
26
+ };
27
+ const opts = {
28
+ model: this.constructor,
29
+ collection: this.constructor.collection,
30
+ db: this.constructor.database,
31
+ };
32
+ const traverseJSON = (data, options) => {
33
+ const { model, db, collection } = options;
34
+ // handle Object
35
+ data = handleObj(data, options);
36
+ const result = {};
37
+ for (const key of Object.keys(data)) {
38
+ // @ts-ignore
39
+ if (model.hasAlias(key)) {
40
+ const association = model.associations[key];
41
+ const opts = {
42
+ model: association.target,
43
+ collection: db.getCollection(association.target.name),
44
+ db,
45
+ key,
46
+ field: collection.getField(key),
47
+ };
48
+ if (['HasMany', 'BelongsToMany'].includes(association.associationType)) {
49
+ result[key] = handleArray(data[key], opts).map((item) => traverseJSON(item, opts));
50
+ }
51
+ else {
52
+ result[key] = data[key] ? traverseJSON(data[key], opts) : null;
53
+ }
54
+ }
55
+ else {
56
+ result[key] = data[key];
57
+ }
119
58
  }
120
- }, associator.through.scope || {})
121
- })})`)
122
- };
123
- }
124
-
125
- let countLiteral = 'count(*)';
126
-
127
- if (this.database.sequelize.getDialect() === 'postgres') {
128
- countLiteral = 'cast(count(*) as integer)';
59
+ return result;
60
+ };
61
+ return traverseJSON(super.toJSON(), opts);
129
62
  }
130
-
131
- const attribute = [sequelize_1.Sequelize.literal(`(${associator.target.selectQuery(Object.assign(Object.assign({}, restOptions), {
132
- attributes: [[sequelize_1.Sequelize.literal(countLiteral), 'count']],
133
- where: Object.assign(Object.assign({}, where), associator.scope || {})
134
- }))})`), alias || sequelize_1.Utils.underscoredIf(`${association}Count`, this.options.underscored)].filter(Boolean);
135
- return attribute;
136
- }
137
-
138
- static selectQuery(options = {}) {
139
- return this.queryGenerator.selectQuery(this.getTableName(), options, this).replace(/;$/, '');
140
- }
141
-
142
- static parseApiJson(options) {
143
- const fields = options.fields,
144
- filter = options.filter,
145
- sort = options.sort,
146
- context = options.context,
147
- page = options.page,
148
- perPage = options.perPage;
149
- const data = (0, utils_1.toInclude)({
150
- fields,
151
- filter,
152
- sort
153
- }, {
154
- model: this,
155
- associations: this.associations,
156
- dialect: this.sequelize.getDialect(),
157
- ctx: context,
158
- database: this.database
159
- });
160
-
161
- if (page || perPage) {
162
- data.limit = perPage === -1 ? exports.MAX_LIMIT : Math.min(perPage || exports.DEFAULT_LIMIT, exports.MAX_LIMIT);
163
- data.offset = data.limit * (page > 0 ? page - 1 : exports.DEFAULT_OFFSET);
63
+ hiddenObjKey(obj, options) {
64
+ const hiddenFields = Array.from(options.collection.fields.values())
65
+ .filter((field) => field.options.hidden)
66
+ .map((field) => field.options.name);
67
+ return lodash_1.default.omit(obj, hiddenFields);
164
68
  }
165
-
166
- if (data.attributes && data.attributes.length === 0) {
167
- delete data.attributes;
69
+ sortAssociations(data, { field }) {
70
+ const sortBy = field.options.sortBy;
71
+ return sortBy ? this.sortArray(data, sortBy) : data;
168
72
  }
169
-
170
- return data;
171
- }
172
-
173
- getValuesByFieldNames(scope = []) {
174
- const table = this.database.getTable(this.constructor.name);
175
- const Model = table.getModel();
176
- const associations = table.getAssociations();
177
- const where = {};
178
- scope.forEach(col => {
179
- const association = associations.get(col);
180
- const dataKey = association && association instanceof fields_1.BELONGSTO ? association.options.foreignKey : col;
181
-
182
- if (!Model.rawAttributes[dataKey]) {
183
- return;
184
- }
185
-
186
- const value = this.getDataValue(dataKey);
187
-
188
- if (typeof value !== 'undefined') {
189
- where[dataKey] = value;
190
- }
191
- });
192
- return where;
193
- }
194
-
195
- updateSingleAssociation(key, data, options = {}) {
196
- return __awaiter(this, void 0, void 0, function* () {
197
- const fields = options.fields,
198
- _options$transaction = options.transaction,
199
- transaction = _options$transaction === void 0 ? yield this.sequelize.transaction() : _options$transaction,
200
- opts = __rest(options, ["fields", "transaction"]);
201
-
202
- Object.assign(opts, {
203
- transaction
204
- });
205
- const table = this.database.getTable(this.constructor.name);
206
- const association = table.getAssociations().get(key);
207
- const accessors = association.getAccessors();
208
-
209
- if (data == null) {
210
- yield this[accessors.set](null, opts);
211
- return;
212
- }
213
-
214
- if (typeof data === 'number' || typeof data === 'string' || data instanceof sequelize_1.Model) {
215
- yield this[accessors.set](data, opts);
216
- } else if (typeof data === 'object') {
217
- const Target = association.getTargetModel();
218
- const targetAttribute = association instanceof fields_1.BELONGSTO ? association.options.targetKey : association.options.sourceKey;
219
-
220
- if (data[targetAttribute]) {
221
- if (Object.keys(data).length > 0) {
222
- const target = yield Target.findOne({
223
- where: {
224
- [targetAttribute]: data[targetAttribute]
225
- },
226
- transaction
227
- });
228
-
229
- if (target) {
230
- yield this[accessors.set](data[targetAttribute], opts);
231
- yield target.update(data, opts);
232
- yield target.updateAssociations(data, opts);
233
- } else {
234
- const t = yield this[accessors.create](data, opts);
235
- yield t.updateAssociations(data, opts);
236
- }
237
- }
238
- } else {
239
- const t = yield this[accessors.create](data, opts);
240
- yield t.updateAssociations(data, opts);
241
- }
242
- }
243
-
244
- if (!options.transaction) {
245
- yield transaction.commit();
246
- }
247
- });
248
- }
249
-
250
- updateMultipleAssociation(associationName, data, options = {}) {
251
- return __awaiter(this, void 0, void 0, function* () {
252
- const items = Array.isArray(data) ? data : data == null ? [] : [data];
253
-
254
- const fields = options.fields,
255
- _options$transaction2 = options.transaction,
256
- transaction = _options$transaction2 === void 0 ? yield this.sequelize.transaction() : _options$transaction2,
257
- opts = __rest(options, ["fields", "transaction"]);
258
-
259
- Object.assign(opts, {
260
- transaction
261
- });
262
- const table = this.database.getTable(this.constructor.name);
263
- const association = table.getAssociations().get(associationName);
264
- const accessors = association.getAccessors();
265
-
266
- if (!items.length) {
267
- yield this[accessors.set](null, opts);
268
- return;
269
- }
270
-
271
- const Target = association.getTargetModel();
272
- const _association$options$ = association.options.targetKey,
273
- targetKey = _association$options$ === void 0 ? Target.primaryKeyAttribute : _association$options$;
274
- const targetPk = Target.primaryKeyAttribute;
275
- const targetKeyIsPk = targetKey === targetPk;
276
- const toSetPks = new Set();
277
- const toSetUks = new Set();
278
- const toSetItems = new Set();
279
- const toUpsertObjects = [];
280
- items.forEach(item => {
281
- if (item instanceof sequelize_1.Model) {
282
- if (targetKeyIsPk) {
283
- toSetPks.add(item.getDataValue(targetPk));
284
- } else {
285
- toSetUks.add(item.getDataValue(targetKey));
286
- }
287
-
288
- return;
73
+ sortArray(data, sortBy) {
74
+ if (!lodash_1.default.isArray(sortBy)) {
75
+ sortBy = [sortBy];
289
76
  }
290
-
291
- if (typeof item === 'number' || typeof item === 'string') {
292
- let targetKeyType = (0, fields_1.getDataTypeKey)(Target.rawAttributes[targetKey].type).toLocaleLowerCase();
293
-
294
- if (targetKeyType === 'integer') {
295
- targetKeyType = 'number';
296
- }
297
-
298
- if (typeof item !== targetKeyType) {
299
- throw new Error(`target key type [${typeof item}] does not match to [${targetKeyType}]`);
300
- }
301
-
302
- if (targetKeyIsPk) {
303
- toSetPks.add(item);
304
- } else {
305
- toSetUks.add(item);
306
- }
307
-
308
- return;
309
- }
310
-
311
- if (typeof item === 'object') {
312
- toUpsertObjects.push(item);
313
- }
314
- });
315
- const byPkExistItems = toSetPks.size ? yield Target.findAll(Object.assign(Object.assign({}, opts), {
316
- where: {
317
- [targetPk]: {
318
- [sequelize_1.Op.in]: Array.from(toSetPks)
319
- }
320
- },
321
- attributes: [targetPk]
322
- })) : [];
323
- byPkExistItems.forEach(item => {
324
- toSetItems.add(item);
325
- });
326
- const byUkExistItems = toSetUks.size ? yield Target.findAll(Object.assign(Object.assign({}, opts), {
327
- where: {
328
- [targetKey]: {
329
- [sequelize_1.Op.in]: Array.from(toSetUks)
330
- }
331
- },
332
- attributes: [targetPk, targetKey]
333
- })) : [];
334
- byUkExistItems.forEach(item => {
335
- toSetItems.add(item);
336
- });
337
- const belongsToManyList = [];
338
-
339
- for (var _i = 0, _toUpsertObjects = toUpsertObjects; _i < _toUpsertObjects.length; _i++) {
340
- const item = _toUpsertObjects[_i];
341
- let target;
342
-
343
- if (typeof item[targetKey] === 'undefined') {
344
- target = yield this[accessors.create](item, opts);
345
- } else {
346
- target = yield Target.findOne(Object.assign(Object.assign({}, opts), {
347
- where: {
348
- [targetKey]: item[targetKey]
349
- }
350
- }));
351
-
352
- if (!target) {
353
- target = yield this[accessors.create](item, opts);
354
- } else {
355
- yield target.update(item, opts);
356
- }
357
- }
358
-
359
- toSetItems.add(target);
360
-
361
- if (association instanceof fields_1.BELONGSTOMANY) {
362
- belongsToManyList.push({
363
- item,
364
- target
365
- });
366
- }
367
-
368
- yield target.updateAssociations(item, opts);
369
- }
370
-
371
- yield this[accessors.set](Array.from(toSetItems), opts);
372
-
373
- if (belongsToManyList.length) {
374
- const ThroughModel = association.getThroughModel();
375
- const throughName = association.getThroughName();
376
-
377
- var _iterator = _createForOfIteratorHelper(belongsToManyList),
378
- _step;
379
-
380
- try {
381
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
382
- const _step$value = _step.value,
383
- item = _step$value.item,
384
- target = _step$value.target;
385
- const throughValues = item[throughName];
386
-
387
- if (throughValues && typeof throughValues === 'object') {
388
- const _association$options = association.options,
389
- foreignKey = _association$options.foreignKey,
390
- sourceKey = _association$options.sourceKey,
391
- otherKey = _association$options.otherKey;
392
- const through = yield ThroughModel.findOne({
393
- where: {
394
- [foreignKey]: this.get(sourceKey),
395
- [otherKey]: target.get(targetKey)
396
- },
397
- transaction
398
- });
399
- yield through.update(throughValues, opts);
400
- }
401
- }
402
- } catch (err) {
403
- _iterator.e(err);
404
- } finally {
405
- _iterator.f();
406
- }
407
- }
408
-
409
- if (!options.transaction) {
410
- yield transaction.commit();
411
- }
412
- });
413
- }
414
-
415
- updateAssociation(key, data, options = {}) {
416
- return __awaiter(this, void 0, void 0, function* () {
417
- const table = this.database.getTable(this.constructor.name);
418
- const association = table.getAssociations().get(key);
419
-
420
- switch (true) {
421
- case association instanceof fields_1.BELONGSTO:
422
- case association instanceof fields_1.HASONE:
423
- return this.updateSingleAssociation(key, data, options);
424
-
425
- case association instanceof fields_1.HASMANY:
426
- case association instanceof fields_1.BELONGSTOMANY:
427
- return this.updateMultipleAssociation(key, data, options);
428
- }
429
- });
430
- }
431
-
432
- updateAssociations(data, options = {}) {
433
- return __awaiter(this, void 0, void 0, function* () {
434
- const _options$transaction3 = options.transaction,
435
- transaction = _options$transaction3 === void 0 ? yield this.sequelize.transaction() : _options$transaction3;
436
-
437
- for (var _i2 = 0, _Object$keys = Object.keys(this.constructor.associations); _i2 < _Object$keys.length; _i2++) {
438
- const key = _Object$keys[_i2];
439
-
440
- if (!Object.keys(data).includes(key)) {
441
- continue;
442
- }
443
-
444
- yield this.updateAssociation(key, data[key], Object.assign(Object.assign({}, options), {
445
- transaction
446
- }));
447
- }
448
-
449
- yield this.database.emitAsync('afterUpdateAssociations', this, Object.assign(Object.assign({}, options), {
450
- transaction
451
- }));
452
-
453
- if (!options.transaction) {
454
- yield transaction.commit();
455
- }
456
- });
457
- }
458
-
77
+ const orderItems = [];
78
+ const orderDirections = [];
79
+ sortBy.forEach((sortItem) => {
80
+ orderDirections.push(sortItem.startsWith('-') ? 'desc' : 'asc');
81
+ orderItems.push(sortItem.replace('-', ''));
82
+ });
83
+ return lodash_1.default.orderBy(data, orderItems, orderDirections);
84
+ }
459
85
  }
460
-
461
86
  exports.Model = Model;
462
- exports.default = Model;
463
- //# sourceMappingURL=model.js.map
87
+ //# sourceMappingURL=model.js.map