@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/database.js CHANGED
@@ -1,498 +1,304 @@
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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
16
-
17
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
18
-
19
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
-
21
- 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); }
22
-
23
- 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; }
24
-
25
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
26
-
27
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
28
-
29
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
30
- function adopt(value) {
31
- return value instanceof P ? value : new P(function (resolve) {
32
- resolve(value);
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
33
28
  });
34
- }
35
-
36
- return new (P || (P = Promise))(function (resolve, reject) {
37
- function fulfilled(value) {
38
- try {
39
- step(generator.next(value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- }
44
-
45
- function rejected(value) {
46
- try {
47
- step(generator["throw"](value));
48
- } catch (e) {
49
- reject(e);
50
- }
51
- }
52
-
53
- function step(result) {
54
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
55
- }
56
-
57
- step((generator = generator.apply(thisArg, _arguments || [])).next());
58
- });
59
29
  };
60
-
61
- var __rest = void 0 && (void 0).__rest || function (s, e) {
62
- var t = {};
63
-
64
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
65
-
66
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
67
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
68
- }
69
- return t;
30
+ var __rest = (this && this.__rest) || function (s, e) {
31
+ var t = {};
32
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
33
+ t[p] = s[p];
34
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
35
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
36
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
37
+ t[p[i]] = s[p[i]];
38
+ }
39
+ return t;
70
40
  };
71
-
72
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
73
- return mod && mod.__esModule ? mod : {
74
- "default": mod
75
- };
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
76
43
  };
77
-
78
- Object.defineProperty(exports, "__esModule", {
79
- value: true
80
- });
81
- exports.extend = exports.Extend = void 0;
82
-
83
- const sequelize_1 = require("sequelize");
84
-
85
- const glob_1 = __importDefault(require("glob"));
86
-
87
- const table_1 = __importDefault(require("./table"));
88
-
89
- const utils_1 = require("./utils");
90
-
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.extendCollection = exports.defineCollection = exports.extend = exports.Database = void 0;
46
+ const utils_1 = require("@nocobase/utils");
91
47
  const events_1 = require("events");
92
-
93
- class Extend {
94
- constructor(tableOptions, mergeOptions) {
95
- this.tableOptions = tableOptions;
96
- this.mergeOptions = mergeOptions;
97
- }
98
-
99
- }
100
-
101
- exports.Extend = Extend;
102
-
103
- function extend(tableOptions, mergeOptions = {}) {
104
- return new Extend(tableOptions, mergeOptions);
105
- }
106
-
107
- exports.extend = extend;
108
-
48
+ const lodash_1 = __importDefault(require("lodash"));
49
+ const sequelize_1 = require("sequelize");
50
+ const collection_1 = require("./collection");
51
+ const collection_importer_1 = require("./collection-importer");
52
+ const FieldTypes = __importStar(require("./fields"));
53
+ const model_hook_1 = require("./model-hook");
54
+ const operators_1 = __importDefault(require("./operators"));
109
55
  class Database extends events_1.EventEmitter {
110
- constructor(options) {
111
- super();
112
- this.associating = new Set();
113
- this.throughTables = new Map();
114
- this.tables = new Map();
115
- this.hooks = {};
116
- this.extTableOptions = new Map();
117
- this.hookTypes = new Map(Object.entries({
118
- beforeValidate: 1,
119
- afterValidate: 1,
120
- beforeCreate: 1,
121
- afterCreate: 1,
122
- beforeDestroy: 1,
123
- afterDestroy: 1,
124
- beforeRestore: 1,
125
- afterRestore: 1,
126
- beforeUpdate: 1,
127
- afterUpdate: 1,
128
- beforeSave: 1,
129
- afterSave: 1,
130
- beforeBulkCreate: 2,
131
- afterBulkCreate: 2,
132
- beforeBulkDestroy: 3,
133
- afterBulkDestroy: 3,
134
- beforeBulkRestore: 3,
135
- afterBulkRestore: 3,
136
- beforeBulkUpdate: 3,
137
- afterBulkUpdate: 3,
138
- beforeSync: 4,
139
- afterSync: 4,
140
- beforeBulkSync: 4,
141
- afterBulkSync: 4,
142
- beforeDefine: 0,
143
- afterDefine: 0,
144
- beforeInit: 0,
145
- afterInit: 0,
146
- beforeConnect: 0,
147
- afterConnect: 0,
148
- beforeDisconnect: 0,
149
- afterDisconnect: 0
150
- }));
151
- this.options = options;
152
- this.sequelize = new sequelize_1.Sequelize(options);
153
- }
154
-
155
- _getHookType(event) {
156
- if (typeof event === 'string') {
157
- event = event.split('.');
56
+ constructor(options) {
57
+ super();
58
+ this.fieldTypes = new Map();
59
+ this.models = new Map();
60
+ this.repositories = new Map();
61
+ this.operators = new Map();
62
+ this.collections = new Map();
63
+ this.pendingFields = new Map();
64
+ this.modelCollection = new Map();
65
+ this.delayCollectionExtend = new Map();
66
+ if (options instanceof sequelize_1.Sequelize) {
67
+ this.sequelize = options;
68
+ }
69
+ else {
70
+ this.sequelize = new sequelize_1.Sequelize(options);
71
+ this.options = options;
72
+ }
73
+ this.collections = new Map();
74
+ this.modelHook = new model_hook_1.ModelHook(this);
75
+ this.on('afterDefineCollection', (collection) => {
76
+ var _a, _b;
77
+ // after collection defined, call bind method on pending fields
78
+ (_a = this.pendingFields.get(collection.name)) === null || _a === void 0 ? void 0 : _a.forEach((field) => field.bind());
79
+ (_b = this.delayCollectionExtend.get(collection.name)) === null || _b === void 0 ? void 0 : _b.forEach((collectionExtend) => {
80
+ collection.updateOptions(collectionExtend.collectionOptions, collectionExtend.mergeOptions);
81
+ });
82
+ });
83
+ // register database field types
84
+ for (const [name, field] of Object.entries(FieldTypes)) {
85
+ if (['Field', 'RelationField'].includes(name)) {
86
+ continue;
87
+ }
88
+ let key = name.replace(/Field$/g, '');
89
+ key = key.substring(0, 1).toLowerCase() + key.substring(1);
90
+ this.registerFieldTypes({
91
+ [key]: field,
92
+ });
93
+ }
94
+ this.initOperators();
95
+ }
96
+ /**
97
+ * Add collection to database
98
+ * @param options
99
+ */
100
+ collection(options) {
101
+ this.emit('beforeDefineCollection', options);
102
+ const collection = new collection_1.Collection(options, {
103
+ database: this,
104
+ });
105
+ this.collections.set(collection.name, collection);
106
+ this.modelCollection.set(collection.model, collection);
107
+ this.emit('afterDefineCollection', collection);
108
+ return collection;
158
109
  }
159
-
160
- if (!Array.isArray(event)) {
161
- return;
110
+ getTablePrefix() {
111
+ return this.options.tablePrefix || '';
162
112
  }
163
-
164
- const hookType = [...event].pop();
165
-
166
- if (!this.hookTypes.has(hookType)) {
167
- return;
113
+ /**
114
+ * get exists collection by its name
115
+ * @param name
116
+ */
117
+ getCollection(name) {
118
+ return this.collections.get(name);
168
119
  }
169
-
170
- return hookType;
171
- }
172
-
173
- on(event, listener) {
174
- const hookType = this._getHookType(event);
175
-
176
- if (hookType) {
177
- const state = this.hookTypes.get(hookType);
178
- this.sequelize.addHook(hookType, (...args) => __awaiter(this, void 0, void 0, function* () {
179
- var _a, _b, _c, _d, _e, _f;
180
-
181
- let modelName;
182
-
183
- switch (state) {
184
- case 1:
185
- modelName = (_b = (_a = args === null || args === void 0 ? void 0 : args[0]) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name;
186
- break;
187
-
188
- case 2:
189
- modelName = (_d = (_c = args === null || args === void 0 ? void 0 : args[1]) === null || _c === void 0 ? void 0 : _c.model) === null || _d === void 0 ? void 0 : _d.name;
190
- break;
191
-
192
- case 3:
193
- modelName = (_f = (_e = args === null || args === void 0 ? void 0 : args[0]) === null || _e === void 0 ? void 0 : _e.model) === null || _f === void 0 ? void 0 : _f.name;
194
- break;
120
+ hasCollection(name) {
121
+ return this.collections.has(name);
122
+ }
123
+ removeCollection(name) {
124
+ const collection = this.collections.get(name);
125
+ this.emit('beforeRemoveCollection', collection);
126
+ const result = this.collections.delete(name);
127
+ if (result) {
128
+ this.emit('afterRemoveCollection', collection);
195
129
  }
196
-
197
- if (modelName) {
198
- yield this.emitAsync(`${modelName}.${hookType}`, ...args);
130
+ }
131
+ getModel(name) {
132
+ return this.getCollection(name).model;
133
+ }
134
+ getRepository(name, relationId) {
135
+ var _a, _b, _c;
136
+ if (relationId) {
137
+ const [collection, relation] = name.split('.');
138
+ return (_b = (_a = this.getRepository(collection)) === null || _a === void 0 ? void 0 : _a.relation(relation)) === null || _b === void 0 ? void 0 : _b.of(relationId);
199
139
  }
200
-
201
- yield this.emitAsync(hookType, ...args);
202
- }));
203
- this.hookTypes.delete(hookType);
140
+ return (_c = this.getCollection(name)) === null || _c === void 0 ? void 0 : _c.repository;
204
141
  }
205
-
206
- return super.on(event, listener);
207
- }
208
-
209
- emitAsync(event, ...args) {
210
- return __awaiter(this, void 0, void 0, function* () {
211
- const events = this._events;
212
- let callbacks = events === null || events === void 0 ? void 0 : events[event];
213
-
214
- if (!callbacks) {
215
- return false;
216
- }
217
-
218
- const run = cb => {
219
- switch (args.length) {
220
- case 0:
221
- cb = cb.call(this);
222
- break;
223
-
224
- case 1:
225
- cb = cb.call(this, args[0]);
226
- break;
227
-
228
- case 2:
229
- cb = cb.call(this, args[0], args[1]);
230
- break;
231
-
232
- case 3:
233
- cb = cb.call(this, args[0], args[1], args[2]);
234
- break;
235
-
236
- default:
237
- cb = cb.apply(this, args);
142
+ addPendingField(field) {
143
+ const associating = this.pendingFields;
144
+ const items = this.pendingFields.get(field.target) || [];
145
+ items.push(field);
146
+ associating.set(field.target, items);
147
+ }
148
+ removePendingField(field) {
149
+ const items = this.pendingFields.get(field.target) || [];
150
+ const index = items.indexOf(field);
151
+ if (index !== -1) {
152
+ delete items[index];
153
+ this.pendingFields.set(field.target, items);
238
154
  }
239
-
240
- if (cb && (cb instanceof Promise || typeof cb.then === 'function')) {
241
- return cb;
155
+ }
156
+ registerFieldTypes(fieldTypes) {
157
+ for (const [type, fieldType] of Object.entries(fieldTypes)) {
158
+ this.fieldTypes.set(type, fieldType);
242
159
  }
243
-
244
- return Promise.resolve(true);
245
- };
246
-
247
- if (typeof callbacks === 'function') {
248
- yield run(callbacks);
249
- } else if (typeof callbacks === 'object') {
250
- callbacks = callbacks.slice().filter(Boolean);
251
- yield callbacks.reduce((prev, next) => {
252
- return prev.then(res => {
253
- return run(next).then(result => Promise.resolve(res.concat(result)));
254
- });
255
- }, Promise.resolve([]));
256
- }
257
-
258
- return true;
259
- });
260
- }
261
-
262
- import(options) {
263
- const _options$extensions = options.extensions,
264
- extensions = _options$extensions === void 0 ? ['js', 'ts', 'json'] : _options$extensions,
265
- directory = options.directory;
266
- const patten = `${directory}/*.{${extensions.join(',')}}`;
267
- const files = glob_1.default.sync(patten, {
268
- ignore: ['**/*.d.ts']
269
- });
270
- const tables = new Map();
271
- files.forEach(file => {
272
- const result = (0, utils_1.requireModule)(file);
273
-
274
- if (result instanceof Extend) {
275
- if (!this.tables.has(result.tableOptions.name)) {
276
- this.extTableOptions.set(result.tableOptions.name, result);
277
- } else {
278
- const table = this.extend(result.tableOptions, result.mergeOptions);
279
- tables.set(table.getName(), table);
160
+ }
161
+ registerModels(models) {
162
+ for (const [type, schemaType] of Object.entries(models)) {
163
+ this.models.set(type, schemaType);
280
164
  }
281
- } else {
282
- let table = this.extend(typeof result === 'function' ? result(this) : result);
283
-
284
- if (this.extTableOptions.has(table.getName())) {
285
- const result = this.extTableOptions.get(table.getName());
286
- table = this.extend(result.tableOptions, result.mergeOptions);
287
- this.extTableOptions.delete(table.getName());
165
+ }
166
+ registerRepositories(repositories) {
167
+ for (const [type, schemaType] of Object.entries(repositories)) {
168
+ this.repositories.set(type, schemaType);
288
169
  }
289
-
290
- tables.set(table.getName(), table);
291
- }
292
- });
293
- return tables;
294
- }
295
-
296
- table(options) {
297
- const name = options.name;
298
- const table = new table_1.default(options, {
299
- database: this
300
- });
301
- this.tables.set(name, table);
302
-
303
- if (this.throughTables.has(name)) {
304
- const _this$getTables = this.getTables(this.throughTables.get(name)),
305
- _this$getTables2 = _slicedToArray(_this$getTables, 2),
306
- sourceTable = _this$getTables2[0],
307
- targetTable = _this$getTables2[1];
308
-
309
- sourceTable && sourceTable.modelInit(true);
310
- targetTable && targetTable.modelInit(true);
311
170
  }
312
-
313
- return table;
314
- }
315
-
316
- extend(options, mergeOptions) {
317
- const name = options.name;
318
- let table;
319
-
320
- if (this.tables.has(name)) {
321
- table = this.tables.get(name);
322
- table.extend(options, mergeOptions);
323
- } else {
324
- table = this.table(options);
325
- this.tables.set(name, table);
171
+ initOperators() {
172
+ const operators = new Map();
173
+ // Sequelize 内置
174
+ for (const key in sequelize_1.Op) {
175
+ operators.set('$' + key, sequelize_1.Op[key]);
176
+ const val = sequelize_1.Utils.underscoredIf(key, true);
177
+ operators.set('$' + val, sequelize_1.Op[key]);
178
+ operators.set('$' + val.replace(/_/g, ''), sequelize_1.Op[key]);
179
+ }
180
+ this.operators = operators;
181
+ this.registerOperators(Object.assign({}, operators_1.default));
326
182
  }
327
-
328
- return table;
329
- }
330
-
331
- isDefined(name) {
332
- return this.sequelize.isDefined(name);
333
- }
334
-
335
- getModel(name) {
336
- return this.isDefined(name) ? this.sequelize.model(name) : undefined;
337
- }
338
-
339
- getModels(names = []) {
340
- if (names.length === 0) {
341
- return this.sequelize.models;
183
+ registerOperators(operators) {
184
+ for (const [key, operator] of Object.entries(operators)) {
185
+ this.operators.set(key, operator);
186
+ }
342
187
  }
343
-
344
- return names.map(name => this.getModel(name));
345
- }
346
-
347
- getTable(name) {
348
- return this.tables.has(name) ? this.tables.get(name) : undefined;
349
- }
350
-
351
- getTables(names = []) {
352
- if (names.length === 0) {
353
- return [...this.tables.values()];
188
+ buildField(options, context) {
189
+ const { type } = options;
190
+ const Field = this.fieldTypes.get(type);
191
+ if (!Field) {
192
+ throw Error(`unsupported field type ${type}`);
193
+ }
194
+ return new Field(options, context);
354
195
  }
355
-
356
- return names.map(name => this.getTable(name));
357
- }
358
-
359
- associate() {
360
- var _iterator = _createForOfIteratorHelper(this.associating),
361
- _step;
362
-
363
- try {
364
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
365
- const name = _step.value;
366
- const Model = this.getModel(name);
367
- Model.associate && Model.associate(this.sequelize.models);
368
- }
369
- } catch (err) {
370
- _iterator.e(err);
371
- } finally {
372
- _iterator.f();
196
+ sync(options) {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ const isMySQL = this.sequelize.getDialect() === 'mysql';
199
+ if (isMySQL) {
200
+ yield this.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null);
201
+ }
202
+ const result = yield this.sequelize.sync(options);
203
+ if (isMySQL) {
204
+ yield this.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null);
205
+ }
206
+ return result;
207
+ });
373
208
  }
374
- }
375
-
376
- plugin(plugin, options = {}) {
377
- return __awaiter(this, void 0, void 0, function* () {
378
- yield plugin(this, options);
379
- });
380
- }
381
-
382
- sync(options = {}) {
383
- return __awaiter(this, void 0, void 0, function* () {
384
- const _options$tables = options.tables,
385
- tables = _options$tables === void 0 ? [] : _options$tables,
386
- restOptions = __rest(options, ["tables"]);
387
-
388
- let items;
389
-
390
- if (tables instanceof Map) {
391
- items = Array.from(tables.values());
392
- } else {
393
- items = tables;
394
- }
395
-
396
- if (items.length > 0) {
397
- const sequelize = new sequelize_1.Sequelize(this.options);
398
- const names = new Set();
399
-
400
- for (const key in items) {
401
- let table = items[key];
402
-
403
- if (typeof table === 'string') {
404
- table = this.getTable(table);
405
- }
406
-
407
- if (table instanceof table_1.default) {
408
- var _iterator2 = _createForOfIteratorHelper(table.getRelatedTableNames()),
409
- _step2;
410
-
411
- try {
412
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
413
- const name = _step2.value;
414
- names.add(name);
415
- }
416
- } catch (err) {
417
- _iterator2.e(err);
418
- } finally {
419
- _iterator2.f();
209
+ clean(options) {
210
+ return __awaiter(this, void 0, void 0, function* () {
211
+ const { drop } = options, others = __rest(options, ["drop"]);
212
+ if (drop) {
213
+ yield this.sequelize.getQueryInterface().dropAllTables(others);
420
214
  }
421
- }
422
- }
423
-
424
- var _iterator3 = _createForOfIteratorHelper(names),
425
- _step3;
426
-
427
- try {
428
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
429
- const name = _step3.value;
430
- const model = this.getModel(name);
431
-
432
- if (model) {
433
- sequelize.modelManager.addModel(model);
215
+ });
216
+ }
217
+ isSqliteMemory() {
218
+ return this.sequelize.getDialect() === 'sqlite' && lodash_1.default.get(this.options, 'storage') == ':memory:';
219
+ }
220
+ reconnect() {
221
+ return __awaiter(this, void 0, void 0, function* () {
222
+ if (this.isSqliteMemory()) {
223
+ return;
434
224
  }
435
- }
436
- } catch (err) {
437
- _iterator3.e(err);
438
- } finally {
439
- _iterator3.f();
440
- }
441
-
442
- yield sequelize.sync(restOptions);
443
- yield sequelize.close();
444
- } else {
445
- yield this.sequelize.sync(restOptions);
446
- }
447
- });
448
- }
449
-
450
- close() {
451
- return __awaiter(this, void 0, void 0, function* () {
452
- this.removeAllListeners();
453
- return this.sequelize.close();
454
- });
455
- }
456
-
457
- addHook(hookType, fn) {
458
- const hooks = this.hooks[hookType] || [];
459
- hooks.push(fn);
460
- this.hooks[hookType] = hooks;
461
- }
462
-
463
- runHooks(hookType, ...args) {
464
- return __awaiter(this, void 0, void 0, function* () {
465
- const hooks = this.hooks[hookType] || [];
466
-
467
- var _iterator4 = _createForOfIteratorHelper(hooks),
468
- _step4;
469
-
470
- try {
471
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
472
- const hook = _step4.value;
473
-
474
- if (typeof hook === 'function') {
475
- yield hook(...args);
476
- }
225
+ // @ts-ignore
226
+ const ConnectionManager = this.sequelize.dialect.connectionManager.constructor;
227
+ // @ts-ignore
228
+ const connectionManager = new ConnectionManager(this.sequelize.dialect, this.sequelize);
229
+ // @ts-ignore
230
+ this.sequelize.dialect.connectionManager = connectionManager;
231
+ // @ts-ignore
232
+ this.sequelize.connectionManager = connectionManager;
233
+ });
234
+ }
235
+ closed() {
236
+ // @ts-ignore
237
+ return this.sequelize.connectionManager.pool._draining;
238
+ }
239
+ close() {
240
+ return __awaiter(this, void 0, void 0, function* () {
241
+ if (this.isSqliteMemory()) {
242
+ return;
243
+ }
244
+ return this.sequelize.close();
245
+ });
246
+ }
247
+ on(event, listener) {
248
+ const modelEventName = this.modelHook.isModelHook(event);
249
+ if (modelEventName && !this.modelHook.hasBindEvent(modelEventName)) {
250
+ this.sequelize.addHook(modelEventName, this.modelHook.sequelizeHookBuilder(modelEventName));
251
+ this.modelHook.bindEvent(modelEventName);
477
252
  }
478
- } catch (err) {
479
- _iterator4.e(err);
480
- } finally {
481
- _iterator4.f();
482
- }
483
- });
484
- }
485
-
486
- getFieldByPath(fieldPath) {
487
- const _fieldPath$split = fieldPath.split('.'),
488
- _fieldPath$split2 = _slicedToArray(_fieldPath$split, 2),
489
- tableName = _fieldPath$split2[0],
490
- fieldName = _fieldPath$split2[1];
491
-
492
- return this.getTable(tableName).getField(fieldName);
493
- }
494
-
253
+ return super.on(event, listener);
254
+ }
255
+ import(options) {
256
+ return __awaiter(this, void 0, void 0, function* () {
257
+ const reader = new collection_importer_1.ImporterReader(options.directory, options.extensions);
258
+ const modules = yield reader.read();
259
+ const result = new Map();
260
+ for (const module of modules) {
261
+ if (module.extend) {
262
+ const collectionName = module.collectionOptions.name;
263
+ const existCollection = this.getCollection(collectionName);
264
+ if (existCollection) {
265
+ existCollection.updateOptions(module.collectionOptions, module.mergeOptions);
266
+ }
267
+ else {
268
+ const existDelayExtends = this.delayCollectionExtend.get(collectionName) || [];
269
+ this.delayCollectionExtend.set(collectionName, [...existDelayExtends, module]);
270
+ }
271
+ }
272
+ else {
273
+ const collection = this.collection(module);
274
+ result.set(collection.name, collection);
275
+ }
276
+ }
277
+ return result;
278
+ });
279
+ }
280
+ }
281
+ exports.Database = Database;
282
+ function extend(collectionOptions, mergeOptions) {
283
+ return {
284
+ collectionOptions,
285
+ mergeOptions,
286
+ extend: true,
287
+ };
495
288
  }
496
-
289
+ exports.extend = extend;
290
+ const defineCollection = (collectionOptions) => {
291
+ return collectionOptions;
292
+ };
293
+ exports.defineCollection = defineCollection;
294
+ const extendCollection = (collectionOptions, mergeOptions) => {
295
+ return {
296
+ collectionOptions,
297
+ mergeOptions,
298
+ extend: true,
299
+ };
300
+ };
301
+ exports.extendCollection = extendCollection;
302
+ (0, utils_1.applyMixins)(Database, [utils_1.AsyncEmitter]);
497
303
  exports.default = Database;
498
- //# sourceMappingURL=database.js.map
304
+ //# sourceMappingURL=database.js.map