@nocobase/database 0.5.0-alpha.38 → 0.7.0-alpha.10

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 +50 -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
@@ -0,0 +1,32 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class IntegerField extends Field {
4
+ get dataType(): DataTypes.IntegerDataTypeConstructor;
5
+ }
6
+ export interface IntegerFieldOptions extends BaseColumnFieldOptions {
7
+ type: 'integer';
8
+ }
9
+ export declare class FloatField extends Field {
10
+ get dataType(): DataTypes.FloatDataTypeConstructor;
11
+ }
12
+ export interface FloatFieldOptions extends BaseColumnFieldOptions {
13
+ type: 'float';
14
+ }
15
+ export declare class DoubleField extends Field {
16
+ get dataType(): DataTypes.DoubleDataTypeConstructor;
17
+ }
18
+ export interface DoubleFieldOptions extends BaseColumnFieldOptions {
19
+ type: 'double';
20
+ }
21
+ export declare class RealField extends Field {
22
+ get dataType(): DataTypes.RealDataTypeConstructor;
23
+ }
24
+ export interface RealFieldOptions extends BaseColumnFieldOptions {
25
+ type: 'real';
26
+ }
27
+ export declare class DecimalField extends Field {
28
+ get dataType(): DataTypes.DecimalDataTypeConstructor;
29
+ }
30
+ export interface DecimalFieldOptions extends BaseColumnFieldOptions {
31
+ type: 'decimal';
32
+ }
@@ -0,0 +1,28 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { Field } from './field';
3
+ export class IntegerField extends Field {
4
+ get dataType() {
5
+ return DataTypes.INTEGER;
6
+ }
7
+ }
8
+ export class FloatField extends Field {
9
+ get dataType() {
10
+ return DataTypes.FLOAT;
11
+ }
12
+ }
13
+ export class DoubleField extends Field {
14
+ get dataType() {
15
+ return DataTypes.DOUBLE;
16
+ }
17
+ }
18
+ export class RealField extends Field {
19
+ get dataType() {
20
+ return DataTypes.REAL;
21
+ }
22
+ }
23
+ export class DecimalField extends Field {
24
+ get dataType() {
25
+ return DataTypes.DECIMAL;
26
+ }
27
+ }
28
+ //# sourceMappingURL=number-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.js","sourceRoot":"","sources":["../../src/fields/number-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAMD,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB,CAAC;CACF;AAMD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF;AAMD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAMD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class IntegerField extends Field {\n get dataType() {\n return DataTypes.INTEGER;\n }\n}\n\nexport interface IntegerFieldOptions extends BaseColumnFieldOptions {\n type: 'integer';\n}\n\nexport class FloatField extends Field {\n get dataType() {\n return DataTypes.FLOAT;\n }\n}\n\nexport interface FloatFieldOptions extends BaseColumnFieldOptions {\n type: 'float';\n}\n\nexport class DoubleField extends Field {\n get dataType() {\n return DataTypes.DOUBLE;\n }\n}\n\nexport interface DoubleFieldOptions extends BaseColumnFieldOptions {\n type: 'double';\n}\n\nexport class RealField extends Field {\n get dataType() {\n return DataTypes.REAL;\n }\n}\n\nexport interface RealFieldOptions extends BaseColumnFieldOptions {\n type: 'real';\n}\n\nexport class DecimalField extends Field {\n get dataType() {\n return DataTypes.DECIMAL;\n }\n}\n\nexport interface DecimalFieldOptions extends BaseColumnFieldOptions {\n type: 'decimal';\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export interface PasswordFieldOptions extends BaseColumnFieldOptions {
4
+ type: 'password';
5
+ /**
6
+ * @default 64
7
+ */
8
+ length?: number;
9
+ /**
10
+ * @default 8
11
+ */
12
+ randomBytesSize?: number;
13
+ }
14
+ export declare class PasswordField extends Field {
15
+ get dataType(): DataTypes.StringDataTypeConstructor;
16
+ verify(password: string, hash: string): Promise<unknown>;
17
+ hash(password: string): Promise<unknown>;
18
+ init(): void;
19
+ bind(): void;
20
+ unbind(): void;
21
+ }
@@ -0,0 +1,71 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import crypto from 'crypto';
11
+ import { DataTypes } from 'sequelize';
12
+ import { Field } from './field';
13
+ export class PasswordField extends Field {
14
+ get dataType() {
15
+ return DataTypes.STRING;
16
+ }
17
+ verify(password, hash) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const { length = 64, randomBytesSize = 8 } = this.options;
20
+ return new Promise((resolve, reject) => {
21
+ const salt = hash.substring(0, randomBytesSize * 2);
22
+ const key = hash.substring(randomBytesSize * 2);
23
+ crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {
24
+ if (err)
25
+ reject(err);
26
+ resolve(key == derivedKey.toString('hex'));
27
+ });
28
+ });
29
+ });
30
+ }
31
+ hash(password) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const { length = 64, randomBytesSize = 8 } = this.options;
34
+ return new Promise((resolve, reject) => {
35
+ const salt = crypto.randomBytes(randomBytesSize).toString('hex');
36
+ crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {
37
+ if (err)
38
+ reject(err);
39
+ resolve(salt + derivedKey.toString('hex'));
40
+ });
41
+ });
42
+ });
43
+ }
44
+ init() {
45
+ const { name } = this.options;
46
+ this.listener = (model) => __awaiter(this, void 0, void 0, function* () {
47
+ if (!model.changed(name)) {
48
+ return;
49
+ }
50
+ const value = model.get(name);
51
+ if (value) {
52
+ const hash = yield this.hash(value);
53
+ model.set(name, hash);
54
+ }
55
+ else {
56
+ model.set(name, null);
57
+ }
58
+ });
59
+ }
60
+ bind() {
61
+ super.bind();
62
+ this.on('beforeCreate', this.listener);
63
+ this.on('beforeUpdate', this.listener);
64
+ }
65
+ unbind() {
66
+ super.unbind();
67
+ this.off('beforeCreate', this.listener);
68
+ this.off('beforeUpdate', this.listener);
69
+ }
70
+ }
71
+ //# sourceMappingURL=password-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-field.js","sourceRoot":"","sources":["../../src/fields/password-field.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport interface PasswordFieldOptions extends BaseColumnFieldOptions {\n type: 'password';\n /**\n * @default 64\n */\n length?: number;\n /**\n * @default 8\n */\n randomBytesSize?: number;\n}\n\nexport class PasswordField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n\n async verify(password: string, hash: string) {\n const { length = 64, randomBytesSize = 8 } = this.options;\n return new Promise((resolve, reject) => {\n const salt = hash.substring(0, randomBytesSize * 2);\n const key = hash.substring(randomBytesSize * 2);\n crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {\n if (err) reject(err);\n resolve(key == derivedKey.toString('hex'));\n });\n });\n }\n\n async hash(password: string) {\n const { length = 64, randomBytesSize = 8 } = this.options;\n return new Promise((resolve, reject) => {\n const salt = crypto.randomBytes(randomBytesSize).toString('hex');\n crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {\n if (err) reject(err);\n resolve(salt + derivedKey.toString('hex'));\n });\n });\n }\n\n init() {\n const { name } = this.options;\n this.listener = async (model) => {\n if (!model.changed(name as any)) {\n return;\n }\n const value = model.get(name) as string;\n if (value) {\n const hash = await this.hash(value);\n model.set(name, hash);\n } else {\n model.set(name, null);\n }\n };\n }\n\n bind() {\n super.bind();\n this.on('beforeCreate', this.listener);\n this.on('beforeUpdate', this.listener);\n }\n\n unbind() {\n super.unbind();\n this.off('beforeCreate', this.listener);\n this.off('beforeUpdate', this.listener);\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export interface RadioFieldOptions extends BaseColumnFieldOptions {
4
+ type: 'radio';
5
+ }
6
+ /**
7
+ * 暂时只支持全局,不支持批量
8
+ */
9
+ export declare class RadioField extends Field {
10
+ get dataType(): DataTypes.AbstractDataTypeConstructor;
11
+ init(): void;
12
+ bind(): void;
13
+ unbind(): void;
14
+ }
@@ -0,0 +1,49 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { DataTypes } from 'sequelize';
11
+ import { Field } from './field';
12
+ /**
13
+ * 暂时只支持全局,不支持批量
14
+ */
15
+ export class RadioField extends Field {
16
+ get dataType() {
17
+ return DataTypes.BOOLEAN;
18
+ }
19
+ init() {
20
+ const { name } = this.options;
21
+ this.listener = (model, { transaction }) => __awaiter(this, void 0, void 0, function* () {
22
+ if (!model.changed(name)) {
23
+ return;
24
+ }
25
+ const value = model.get(name);
26
+ if (value) {
27
+ const M = this.collection.model;
28
+ yield M.update({ [name]: false }, {
29
+ where: {
30
+ [name]: true,
31
+ },
32
+ transaction,
33
+ hooks: false,
34
+ });
35
+ }
36
+ });
37
+ }
38
+ bind() {
39
+ super.bind();
40
+ this.on('beforeCreate', this.listener.bind(this));
41
+ this.on('beforeUpdate', this.listener.bind(this));
42
+ }
43
+ unbind() {
44
+ super.unbind();
45
+ this.off('beforeCreate', this.listener.bind(this));
46
+ this.off('beforeUpdate', this.listener.bind(this));
47
+ }
48
+ }
49
+ //# sourceMappingURL=radio-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-field.js","sourceRoot":"","sources":["../../src/fields/radio-field.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAMxD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,CAAO,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAW,CAAC,EAAE;gBAC/B,OAAO;aACR;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAY,CAAC;YACzC,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAChC,MAAM,CAAC,CAAC,MAAM,CACZ,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EACjB;oBACE,KAAK,EAAE;wBACL,CAAC,IAAI,CAAC,EAAE,IAAI;qBACb;oBACD,WAAW;oBACX,KAAK,EAAE,KAAK;iBACb,CACF,CAAC;aACH;QACH,CAAC,CAAA,CAAC;IACJ,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport interface RadioFieldOptions extends BaseColumnFieldOptions {\n type: 'radio';\n}\n\n/**\n * 暂时只支持全局,不支持批量\n */\nexport class RadioField extends Field {\n get dataType() {\n return DataTypes.BOOLEAN;\n }\n\n init() {\n const { name } = this.options;\n this.listener = async (model, { transaction }) => {\n if (!model.changed(name as any)) {\n return;\n }\n const value = model.get(name) as boolean;\n if (value) {\n const M = this.collection.model;\n await M.update(\n { [name]: false },\n {\n where: {\n [name]: true,\n },\n transaction,\n hooks: false,\n },\n );\n }\n };\n }\n\n bind() {\n super.bind();\n this.on('beforeCreate', this.listener.bind(this));\n this.on('beforeUpdate', this.listener.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeCreate', this.listener.bind(this));\n this.off('beforeUpdate', this.listener.bind(this));\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { BaseFieldOptions, Field } from './field';
2
+ export interface BaseRelationFieldOptions extends BaseFieldOptions {
3
+ }
4
+ export interface MultipleRelationFieldOptions extends BaseRelationFieldOptions {
5
+ sortBy?: string | string[];
6
+ }
7
+ export declare abstract class RelationField extends Field {
8
+ /**
9
+ * target relation name
10
+ */
11
+ get target(): any;
12
+ get foreignKey(): any;
13
+ get sourceKey(): any;
14
+ get targetKey(): any;
15
+ /**
16
+ * get target model from database by it's name
17
+ * @constructor
18
+ */
19
+ get TargetModel(): import("sequelize/types").ModelCtor<import("sequelize/types").Model<any, any>>;
20
+ }
@@ -0,0 +1,27 @@
1
+ import { Field } from './field';
2
+ export class RelationField extends Field {
3
+ /**
4
+ * target relation name
5
+ */
6
+ get target() {
7
+ const { target, name } = this.options;
8
+ return target || name;
9
+ }
10
+ get foreignKey() {
11
+ return this.options.foreignKey;
12
+ }
13
+ get sourceKey() {
14
+ return this.options.sourceKey || this.collection.model.primaryKeyAttribute;
15
+ }
16
+ get targetKey() {
17
+ return this.options.targetKey || this.TargetModel.primaryKeyAttribute;
18
+ }
19
+ /**
20
+ * get target model from database by it's name
21
+ * @constructor
22
+ */
23
+ get TargetModel() {
24
+ return this.context.database.sequelize.models[this.target];
25
+ }
26
+ }
27
+ //# sourceMappingURL=relation-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-field.js","sourceRoot":"","sources":["../../src/fields/relation-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAE,MAAM,SAAS,CAAC;AAQlD,MAAM,OAAgB,aAAc,SAAQ,KAAK;IAC/C;;OAEG;IACH,IAAI,MAAM;QACR,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAC7E,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF","sourcesContent":["import { BaseFieldOptions, Field } from './field';\n\nexport interface BaseRelationFieldOptions extends BaseFieldOptions {}\n\nexport interface MultipleRelationFieldOptions extends BaseRelationFieldOptions {\n sortBy?: string | string[];\n}\n\nexport abstract class RelationField extends Field {\n /**\n * target relation name\n */\n get target() {\n const { target, name } = this.options;\n return target || name;\n }\n\n get foreignKey() {\n return this.options.foreignKey;\n }\n\n get sourceKey() {\n return this.options.sourceKey || this.collection.model.primaryKeyAttribute;\n }\n\n get targetKey() {\n return this.options.targetKey || this.TargetModel.primaryKeyAttribute;\n }\n\n /**\n * get target model from database by it's name\n * @constructor\n */\n get TargetModel() {\n return this.context.database.sequelize.models[this.target];\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class SortField extends Field {
4
+ get dataType(): DataTypes.IntegerDataTypeConstructor;
5
+ setSortValue(instance: any, options: any): Promise<void>;
6
+ onScopeChange(instance: any, options: any): Promise<void>;
7
+ initRecordsSortValue({ transaction }: {
8
+ transaction: any;
9
+ }): Promise<void>;
10
+ bind(): void;
11
+ unbind(): void;
12
+ }
13
+ export interface SortFieldOptions extends BaseColumnFieldOptions {
14
+ type: 'sort';
15
+ scopeKey?: string;
16
+ }
@@ -0,0 +1,90 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Mutex } from 'async-mutex';
11
+ import { isNumber } from 'lodash';
12
+ import { DataTypes } from 'sequelize';
13
+ import { Field } from './field';
14
+ const sortFieldMutex = new Mutex();
15
+ export class SortField extends Field {
16
+ get dataType() {
17
+ return DataTypes.INTEGER;
18
+ }
19
+ setSortValue(instance, options) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const { name, scopeKey } = this.options;
22
+ const { model } = this.context.collection;
23
+ if (isNumber(instance.get(name)) && instance._previousDataValues[scopeKey] == instance[scopeKey]) {
24
+ return;
25
+ }
26
+ const where = {};
27
+ if (scopeKey) {
28
+ const value = instance.get(scopeKey);
29
+ if (value !== undefined && value !== null) {
30
+ where[scopeKey] = value;
31
+ }
32
+ }
33
+ yield sortFieldMutex.runExclusive(() => __awaiter(this, void 0, void 0, function* () {
34
+ const max = yield model.max(name, Object.assign(Object.assign({}, options), { where }));
35
+ const newValue = (max || 0) + 1;
36
+ instance.set(name, newValue);
37
+ }));
38
+ });
39
+ }
40
+ onScopeChange(instance, options) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const { scopeKey } = this.options;
43
+ if (scopeKey && !instance.isNewRecord && instance._previousDataValues[scopeKey] != instance[scopeKey]) {
44
+ yield this.setSortValue(instance, options);
45
+ }
46
+ });
47
+ }
48
+ initRecordsSortValue({ transaction }) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const totalCount = yield this.collection.repository.count({
51
+ transaction,
52
+ });
53
+ const emptyCount = yield this.collection.repository.count({
54
+ filter: {
55
+ [this.name]: null,
56
+ },
57
+ transaction,
58
+ });
59
+ if (emptyCount === totalCount && emptyCount > 0) {
60
+ const records = yield this.collection.repository.find({
61
+ order: [this.collection.model.primaryKeyAttribute],
62
+ transaction,
63
+ });
64
+ let start = 1;
65
+ for (const record of records) {
66
+ yield record.update({
67
+ sort: start,
68
+ }, {
69
+ transaction,
70
+ silent: true,
71
+ });
72
+ start += 1;
73
+ }
74
+ }
75
+ });
76
+ }
77
+ bind() {
78
+ super.bind();
79
+ this.on('afterSync', this.initRecordsSortValue.bind(this));
80
+ this.on('beforeUpdate', this.onScopeChange.bind(this));
81
+ this.on('beforeCreate', this.setSortValue.bind(this));
82
+ }
83
+ unbind() {
84
+ super.unbind();
85
+ this.off('beforeUpdate', this.onScopeChange.bind(this));
86
+ this.off('beforeCreate', this.setSortValue.bind(this));
87
+ this.off('afterSync', this.initRecordsSortValue.bind(this));
88
+ }
89
+ }
90
+ //# sourceMappingURL=sort-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-field.js","sourceRoot":"","sources":["../../src/fields/sort-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { Mutex } from 'async-mutex';\nimport { isNumber } from 'lodash';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nconst sortFieldMutex = new Mutex();\n\nexport class SortField extends Field {\n get dataType() {\n return DataTypes.INTEGER;\n }\n\n async setSortValue(instance, options) {\n const { name, scopeKey } = this.options;\n const { model } = this.context.collection;\n\n if (isNumber(instance.get(name)) && instance._previousDataValues[scopeKey] == instance[scopeKey]) {\n return;\n }\n\n const where = {};\n\n if (scopeKey) {\n const value = instance.get(scopeKey);\n if (value !== undefined && value !== null) {\n where[scopeKey] = value;\n }\n }\n\n await sortFieldMutex.runExclusive(async () => {\n const max = await model.max<number, any>(name, { ...options, where });\n const newValue = (max || 0) + 1;\n instance.set(name, newValue);\n });\n }\n\n async onScopeChange(instance, options) {\n const { scopeKey } = this.options;\n if (scopeKey && !instance.isNewRecord && instance._previousDataValues[scopeKey] != instance[scopeKey]) {\n await this.setSortValue(instance, options);\n }\n }\n\n async initRecordsSortValue({ transaction }) {\n const totalCount = await this.collection.repository.count({\n transaction,\n });\n const emptyCount = await this.collection.repository.count({\n filter: {\n [this.name]: null,\n },\n transaction,\n });\n\n if (emptyCount === totalCount && emptyCount > 0) {\n const records = await this.collection.repository.find({\n order: [this.collection.model.primaryKeyAttribute],\n transaction,\n });\n\n let start = 1;\n for (const record of records) {\n await record.update(\n {\n sort: start,\n },\n {\n transaction,\n silent: true,\n },\n );\n\n start += 1;\n }\n }\n }\n\n bind() {\n super.bind();\n this.on('afterSync', this.initRecordsSortValue.bind(this));\n this.on('beforeUpdate', this.onScopeChange.bind(this));\n this.on('beforeCreate', this.setSortValue.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeUpdate', this.onScopeChange.bind(this));\n this.off('beforeCreate', this.setSortValue.bind(this));\n this.off('afterSync', this.initRecordsSortValue.bind(this));\n }\n}\n\nexport interface SortFieldOptions extends BaseColumnFieldOptions {\n type: 'sort';\n scopeKey?: string;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class StringField extends Field {
4
+ get dataType(): DataTypes.StringDataTypeConstructor;
5
+ }
6
+ export interface StringFieldOptions extends BaseColumnFieldOptions {
7
+ type: 'string';
8
+ }
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { Field } from './field';
3
+ export class StringField extends Field {
4
+ get dataType() {
5
+ return DataTypes.STRING;
6
+ }
7
+ }
8
+ //# sourceMappingURL=string-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-field.js","sourceRoot":"","sources":["../../src/fields/string-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class StringField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n}\n\nexport interface StringFieldOptions extends BaseColumnFieldOptions {\n type: 'string';\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class TextField extends Field {
4
+ get dataType(): DataTypes.TextDataTypeConstructor;
5
+ }
6
+ export interface TextFieldOptions extends BaseColumnFieldOptions {
7
+ type: 'text';
8
+ }
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { Field } from './field';
3
+ export class TextField extends Field {
4
+ get dataType() {
5
+ return DataTypes.TEXT;
6
+ }
7
+ }
8
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/fields/text-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class TextField extends Field {\n get dataType() {\n return DataTypes.TEXT;\n }\n}\n\nexport interface TextFieldOptions extends BaseColumnFieldOptions {\n type: 'text';\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class TimeField extends Field {
4
+ get dataType(): DataTypes.AbstractDataTypeConstructor;
5
+ }
6
+ export interface TimeFieldOptions extends BaseColumnFieldOptions {
7
+ type: 'time';
8
+ }
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { Field } from './field';
3
+ export class TimeField extends Field {
4
+ get dataType() {
5
+ return DataTypes.TIME;
6
+ }
7
+ }
8
+ //# sourceMappingURL=time-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-field.js","sourceRoot":"","sources":["../../src/fields/time-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class TimeField extends Field {\n get dataType() {\n return DataTypes.TIME;\n }\n}\n\nexport interface TimeFieldOptions extends BaseColumnFieldOptions {\n type: 'time';\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class UidField extends Field {
4
+ get dataType(): DataTypes.StringDataTypeConstructor;
5
+ init(): void;
6
+ }
7
+ export interface UidFieldOptions extends BaseColumnFieldOptions {
8
+ type: 'uid';
9
+ prefix?: string;
10
+ }
@@ -0,0 +1,27 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { uid } from '@nocobase/utils';
11
+ import { DataTypes } from 'sequelize';
12
+ import { Field } from './field';
13
+ export class UidField extends Field {
14
+ get dataType() {
15
+ return DataTypes.STRING;
16
+ }
17
+ init() {
18
+ const { name, prefix = '' } = this.options;
19
+ const { model } = this.context.collection;
20
+ model.beforeCreate((instance) => __awaiter(this, void 0, void 0, function* () {
21
+ if (!instance.get(name)) {
22
+ instance.set(name, `${prefix}${uid()}`);
23
+ }
24
+ }));
25
+ }
26
+ }
27
+ //# sourceMappingURL=uid-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uid-field.js","sourceRoot":"","sources":["../../src/fields/uid-field.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1C,KAAK,CAAC,YAAY,CAAC,CAAO,QAAQ,EAAE,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;aACzC;QACH,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { uid } from '@nocobase/utils';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class UidField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n\n init() {\n const { name, prefix = '' } = this.options;\n const { model } = this.context.collection;\n model.beforeCreate(async (instance) => {\n if (!instance.get(name)) {\n instance.set(name, `${prefix}${uid()}`);\n }\n });\n }\n}\n\nexport interface UidFieldOptions extends BaseColumnFieldOptions {\n type: 'uid';\n prefix?: string;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class VirtualField extends Field {
4
+ get dataType(): DataTypes.VirtualDataTypeConstructor;
5
+ }
6
+ export interface VirtualFieldOptions extends BaseColumnFieldOptions {
7
+ type: 'virtual';
8
+ }
@@ -0,0 +1,8 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { Field } from './field';
3
+ export class VirtualField extends Field {
4
+ get dataType() {
5
+ return DataTypes.VIRTUAL;
6
+ }
7
+ }
8
+ //# sourceMappingURL=virtual-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-field.js","sourceRoot":"","sources":["../../src/fields/virtual-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class VirtualField extends Field {\n get dataType() {\n return DataTypes.VIRTUAL;\n }\n}\n\nexport interface VirtualFieldOptions extends BaseColumnFieldOptions {\n type: 'virtual';\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { ModelCtor } from 'sequelize';
2
+ import { Collection } from './collection';
3
+ import { Database } from './database';
4
+ import { Model } from './model';
5
+ declare type FilterType = any;
6
+ interface FilterParserContext {
7
+ collection: Collection;
8
+ app?: any;
9
+ }
10
+ export default class FilterParser {
11
+ collection: Collection;
12
+ database: Database;
13
+ model: ModelCtor<Model>;
14
+ filter: FilterType;
15
+ context: FilterParserContext;
16
+ constructor(filter: FilterType, context: FilterParserContext);
17
+ prepareFilter(filter: FilterType): any;
18
+ toSequelizeParams(): {
19
+ where?: undefined;
20
+ include?: undefined;
21
+ } | {
22
+ where: {};
23
+ include: any[];
24
+ };
25
+ private getFieldNameFromQueryPath;
26
+ }
27
+ export {};