@nocobase/database 0.7.0-alpha.9 → 0.7.1-alpha.6

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 (325) hide show
  1. package/lib/collection-importer.js +85 -68
  2. package/lib/collection.d.ts +6 -2
  3. package/lib/collection.js +371 -210
  4. package/lib/database.d.ts +23 -4
  5. package/lib/database.js +599 -273
  6. package/lib/fields/array-field.js +45 -25
  7. package/lib/fields/belongs-to-field.js +101 -54
  8. package/lib/fields/belongs-to-many-field.js +98 -53
  9. package/lib/fields/boolean-field.js +24 -9
  10. package/lib/fields/context-field.js +77 -45
  11. package/lib/fields/date-field.js +24 -9
  12. package/lib/fields/field.d.ts +4 -1
  13. package/lib/fields/field.js +231 -75
  14. package/lib/fields/formula-field.d.ts +19 -0
  15. package/lib/fields/formula-field.js +184 -0
  16. package/lib/fields/has-inverse-field.js +4 -2
  17. package/lib/fields/has-many-field.js +105 -56
  18. package/lib/fields/has-one-field.js +105 -54
  19. package/lib/fields/index.d.ts +5 -1
  20. package/lib/fields/index.js +290 -32
  21. package/lib/fields/json-field.js +36 -16
  22. package/lib/fields/number-field.js +53 -26
  23. package/lib/fields/password-field.js +120 -73
  24. package/lib/fields/radio-field.js +75 -47
  25. package/lib/fields/relation-field.js +41 -28
  26. package/lib/fields/sort-field.js +165 -89
  27. package/lib/fields/string-field.js +24 -9
  28. package/lib/fields/text-field.js +24 -9
  29. package/lib/fields/time-field.js +24 -9
  30. package/lib/fields/uid-field.js +57 -28
  31. package/lib/fields/uuid-field.d.ts +9 -0
  32. package/lib/fields/uuid-field.js +39 -0
  33. package/lib/fields/virtual-field.js +24 -9
  34. package/lib/filter-parser.js +288 -179
  35. package/lib/index.d.ts +1 -0
  36. package/lib/index.js +224 -29
  37. package/lib/magic-attribute-model.js +123 -71
  38. package/lib/migration.d.ts +35 -0
  39. package/lib/migration.js +90 -0
  40. package/lib/mock-database.d.ts +1 -0
  41. package/lib/mock-database.js +69 -34
  42. package/lib/model-hook.d.ts +5 -5
  43. package/lib/model-hook.js +109 -60
  44. package/lib/model.js +116 -81
  45. package/lib/operators/array.js +136 -96
  46. package/lib/operators/association.js +30 -14
  47. package/lib/operators/boolean.d.ts +13 -0
  48. package/lib/operators/boolean.js +35 -0
  49. package/lib/operators/date.js +78 -34
  50. package/lib/operators/empty.js +113 -75
  51. package/lib/operators/index.js +15 -3
  52. package/lib/operators/ne.js +27 -12
  53. package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
  54. package/lib/operators/notIn.js +29 -0
  55. package/lib/operators/string.js +56 -35
  56. package/lib/operators/utils.js +18 -10
  57. package/lib/options-parser.js +345 -215
  58. package/lib/playground.js +66 -53
  59. package/lib/relation-repository/belongs-to-many-repository.js +281 -198
  60. package/lib/relation-repository/belongs-to-repository.js +10 -6
  61. package/lib/relation-repository/hasmany-repository.js +168 -121
  62. package/lib/relation-repository/hasone-repository.js +10 -6
  63. package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
  64. package/lib/relation-repository/multiple-relation-repository.js +263 -148
  65. package/lib/relation-repository/relation-repository.d.ts +1 -1
  66. package/lib/relation-repository/relation-repository.js +163 -93
  67. package/lib/relation-repository/single-relation-repository.d.ts +6 -6
  68. package/lib/relation-repository/single-relation-repository.js +145 -99
  69. package/lib/relation-repository/types.js +4 -2
  70. package/lib/repository.d.ts +4 -7
  71. package/lib/repository.js +473 -291
  72. package/lib/transaction-decorator.js +80 -67
  73. package/lib/update-associations.d.ts +1 -2
  74. package/lib/update-associations.js +525 -321
  75. package/lib/update-guard.js +160 -117
  76. package/package.json +9 -9
  77. package/src/__tests__/collection.test.ts +27 -0
  78. package/src/__tests__/database.test.ts +47 -0
  79. package/src/__tests__/fields/formula-field.test.ts +69 -0
  80. package/src/__tests__/fields/uuid-field.test.ts +30 -0
  81. package/src/__tests__/fixtures/migrations/m1.ts +7 -0
  82. package/src/__tests__/fixtures/migrations/m2.ts +7 -0
  83. package/src/__tests__/hooks/afterCreateWithAssociations.test.ts +33 -0
  84. package/src/__tests__/migrator.test.ts +70 -0
  85. package/src/__tests__/model-hook.test.ts +54 -0
  86. package/src/__tests__/operator/notIn.test.ts +33 -0
  87. package/src/__tests__/option-parser.test.ts +30 -6
  88. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +1 -1
  89. package/src/__tests__/sequelize-hooks.test.ts +69 -0
  90. package/src/__tests__/sort.test.ts +51 -0
  91. package/src/__tests__/update-associations.test.ts +3 -3
  92. package/src/collection-importer.ts +12 -20
  93. package/src/collection.ts +26 -2
  94. package/src/database.ts +144 -14
  95. package/src/fields/field.ts +88 -1
  96. package/src/fields/formula-field.ts +106 -0
  97. package/src/fields/index.ts +6 -0
  98. package/src/fields/password-field.ts +2 -0
  99. package/src/fields/uuid-field.ts +21 -0
  100. package/src/index.ts +1 -0
  101. package/src/migration.ts +76 -0
  102. package/src/mock-database.ts +2 -1
  103. package/src/model-hook.ts +26 -22
  104. package/src/operators/boolean.ts +18 -0
  105. package/src/operators/index.ts +2 -0
  106. package/src/operators/notIn.ts +12 -0
  107. package/src/options-parser.ts +14 -10
  108. package/src/relation-repository/multiple-relation-repository.ts +14 -6
  109. package/src/relation-repository/relation-repository.ts +12 -6
  110. package/src/relation-repository/single-relation-repository.ts +11 -7
  111. package/src/repository.ts +20 -10
  112. package/src/update-associations.ts +2 -3
  113. package/esm/collection-importer.d.ts +0 -7
  114. package/esm/collection-importer.js +0 -49
  115. package/esm/collection-importer.js.map +0 -1
  116. package/esm/collection.d.ts +0 -73
  117. package/esm/collection.js +0 -224
  118. package/esm/collection.js.map +0 -1
  119. package/esm/database.d.ts +0 -101
  120. package/esm/database.js +0 -275
  121. package/esm/database.js.map +0 -1
  122. package/esm/fields/array-field.d.ts +0 -11
  123. package/esm/fields/array-field.js +0 -26
  124. package/esm/fields/array-field.js.map +0 -1
  125. package/esm/fields/belongs-to-field.d.ts +0 -12
  126. package/esm/fields/belongs-to-field.js +0 -57
  127. package/esm/fields/belongs-to-field.js.map +0 -1
  128. package/esm/fields/belongs-to-many-field.d.ts +0 -11
  129. package/esm/fields/belongs-to-many-field.js +0 -55
  130. package/esm/fields/belongs-to-many-field.js.map +0 -1
  131. package/esm/fields/boolean-field.d.ts +0 -8
  132. package/esm/fields/boolean-field.js +0 -8
  133. package/esm/fields/boolean-field.js.map +0 -1
  134. package/esm/fields/context-field.d.ts +0 -13
  135. package/esm/fields/context-field.js +0 -43
  136. package/esm/fields/context-field.js.map +0 -1
  137. package/esm/fields/date-field.d.ts +0 -8
  138. package/esm/fields/date-field.js +0 -8
  139. package/esm/fields/date-field.js.map +0 -1
  140. package/esm/fields/field.d.ts +0 -37
  141. package/esm/fields/field.js +0 -74
  142. package/esm/fields/field.js.map +0 -1
  143. package/esm/fields/has-inverse-field.d.ts +0 -4
  144. package/esm/fields/has-inverse-field.js +0 -2
  145. package/esm/fields/has-inverse-field.js.map +0 -1
  146. package/esm/fields/has-many-field.d.ts +0 -64
  147. package/esm/fields/has-many-field.js +0 -58
  148. package/esm/fields/has-many-field.js.map +0 -1
  149. package/esm/fields/has-one-field.d.ts +0 -64
  150. package/esm/fields/has-one-field.js +0 -57
  151. package/esm/fields/has-one-field.js.map +0 -1
  152. package/esm/fields/index.d.ts +0 -40
  153. package/esm/fields/index.js +0 -21
  154. package/esm/fields/index.js.map +0 -1
  155. package/esm/fields/json-field.d.ts +0 -14
  156. package/esm/fields/json-field.js +0 -17
  157. package/esm/fields/json-field.js.map +0 -1
  158. package/esm/fields/number-field.d.ts +0 -32
  159. package/esm/fields/number-field.js +0 -28
  160. package/esm/fields/number-field.js.map +0 -1
  161. package/esm/fields/password-field.d.ts +0 -21
  162. package/esm/fields/password-field.js +0 -71
  163. package/esm/fields/password-field.js.map +0 -1
  164. package/esm/fields/radio-field.d.ts +0 -14
  165. package/esm/fields/radio-field.js +0 -49
  166. package/esm/fields/radio-field.js.map +0 -1
  167. package/esm/fields/relation-field.d.ts +0 -20
  168. package/esm/fields/relation-field.js +0 -27
  169. package/esm/fields/relation-field.js.map +0 -1
  170. package/esm/fields/sort-field.d.ts +0 -16
  171. package/esm/fields/sort-field.js +0 -90
  172. package/esm/fields/sort-field.js.map +0 -1
  173. package/esm/fields/string-field.d.ts +0 -8
  174. package/esm/fields/string-field.js +0 -8
  175. package/esm/fields/string-field.js.map +0 -1
  176. package/esm/fields/text-field.d.ts +0 -8
  177. package/esm/fields/text-field.js +0 -8
  178. package/esm/fields/text-field.js.map +0 -1
  179. package/esm/fields/time-field.d.ts +0 -8
  180. package/esm/fields/time-field.js +0 -8
  181. package/esm/fields/time-field.js.map +0 -1
  182. package/esm/fields/uid-field.d.ts +0 -10
  183. package/esm/fields/uid-field.js +0 -27
  184. package/esm/fields/uid-field.js.map +0 -1
  185. package/esm/fields/virtual-field.d.ts +0 -8
  186. package/esm/fields/virtual-field.js +0 -8
  187. package/esm/fields/virtual-field.js.map +0 -1
  188. package/esm/filter-parser.d.ts +0 -27
  189. package/esm/filter-parser.js +0 -185
  190. package/esm/filter-parser.js.map +0 -1
  191. package/esm/index.d.ts +0 -15
  192. package/esm/index.js +0 -16
  193. package/esm/index.js.map +0 -1
  194. package/esm/magic-attribute-model.d.ts +0 -7
  195. package/esm/magic-attribute-model.js +0 -70
  196. package/esm/magic-attribute-model.js.map +0 -1
  197. package/esm/mock-database.d.ts +0 -22
  198. package/esm/mock-database.js +0 -34
  199. package/esm/mock-database.js.map +0 -1
  200. package/esm/model-hook.d.ts +0 -12
  201. package/esm/model-hook.js +0 -61
  202. package/esm/model-hook.js.map +0 -1
  203. package/esm/model.d.ts +0 -15
  204. package/esm/model.js +0 -80
  205. package/esm/model.js.map +0 -1
  206. package/esm/operators/array.d.ts +0 -26
  207. package/esm/operators/array.js +0 -105
  208. package/esm/operators/array.js.map +0 -1
  209. package/esm/operators/association.d.ts +0 -10
  210. package/esm/operators/association.js +0 -14
  211. package/esm/operators/association.js.map +0 -1
  212. package/esm/operators/date.d.ts +0 -34
  213. package/esm/operators/date.js +0 -35
  214. package/esm/operators/date.js.map +0 -1
  215. package/esm/operators/empty.d.ts +0 -28
  216. package/esm/operators/empty.js +0 -58
  217. package/esm/operators/empty.js.map +0 -1
  218. package/esm/operators/index.d.ts +0 -2
  219. package/esm/operators/index.js +0 -2
  220. package/esm/operators/index.js.map +0 -1
  221. package/esm/operators/ne.js +0 -12
  222. package/esm/operators/ne.js.map +0 -1
  223. package/esm/operators/string.d.ts +0 -21
  224. package/esm/operators/string.js +0 -35
  225. package/esm/operators/string.js.map +0 -1
  226. package/esm/operators/utils.d.ts +0 -4
  227. package/esm/operators/utils.js +0 -11
  228. package/esm/operators/utils.js.map +0 -1
  229. package/esm/options-parser.d.ts +0 -31
  230. package/esm/options-parser.js +0 -225
  231. package/esm/options-parser.js.map +0 -1
  232. package/esm/playground.d.ts +0 -1
  233. package/esm/playground.js +0 -53
  234. package/esm/playground.js.map +0 -1
  235. package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
  236. package/esm/relation-repository/belongs-to-many-repository.js +0 -199
  237. package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
  238. package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
  239. package/esm/relation-repository/belongs-to-repository.js +0 -4
  240. package/esm/relation-repository/belongs-to-repository.js.map +0 -1
  241. package/esm/relation-repository/hasmany-repository.d.ts +0 -23
  242. package/esm/relation-repository/hasmany-repository.js +0 -125
  243. package/esm/relation-repository/hasmany-repository.js.map +0 -1
  244. package/esm/relation-repository/hasone-repository.d.ts +0 -17
  245. package/esm/relation-repository/hasone-repository.js +0 -4
  246. package/esm/relation-repository/hasone-repository.js.map +0 -1
  247. package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
  248. package/esm/relation-repository/multiple-relation-repository.js +0 -149
  249. package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
  250. package/esm/relation-repository/relation-repository.d.ts +0 -32
  251. package/esm/relation-repository/relation-repository.js +0 -93
  252. package/esm/relation-repository/relation-repository.js.map +0 -1
  253. package/esm/relation-repository/single-relation-repository.d.ts +0 -23
  254. package/esm/relation-repository/single-relation-repository.js +0 -96
  255. package/esm/relation-repository/single-relation-repository.js.map +0 -1
  256. package/esm/relation-repository/types.d.ts +0 -7
  257. package/esm/relation-repository/types.js +0 -2
  258. package/esm/relation-repository/types.js.map +0 -1
  259. package/esm/repository.d.ts +0 -165
  260. package/esm/repository.js +0 -276
  261. package/esm/repository.js.map +0 -1
  262. package/esm/transaction-decorator.d.ts +0 -1
  263. package/esm/transaction-decorator.js +0 -63
  264. package/esm/transaction-decorator.js.map +0 -1
  265. package/esm/update-associations.d.ts +0 -60
  266. package/esm/update-associations.js +0 -362
  267. package/esm/update-associations.js.map +0 -1
  268. package/esm/update-guard.d.ts +0 -26
  269. package/esm/update-guard.js +0 -122
  270. package/esm/update-guard.js.map +0 -1
  271. package/lib/collection-importer.js.map +0 -1
  272. package/lib/collection.js.map +0 -1
  273. package/lib/database.js.map +0 -1
  274. package/lib/fields/array-field.js.map +0 -1
  275. package/lib/fields/belongs-to-field.js.map +0 -1
  276. package/lib/fields/belongs-to-many-field.js.map +0 -1
  277. package/lib/fields/boolean-field.js.map +0 -1
  278. package/lib/fields/context-field.js.map +0 -1
  279. package/lib/fields/date-field.js.map +0 -1
  280. package/lib/fields/field.js.map +0 -1
  281. package/lib/fields/has-inverse-field.js.map +0 -1
  282. package/lib/fields/has-many-field.js.map +0 -1
  283. package/lib/fields/has-one-field.js.map +0 -1
  284. package/lib/fields/index.js.map +0 -1
  285. package/lib/fields/json-field.js.map +0 -1
  286. package/lib/fields/number-field.js.map +0 -1
  287. package/lib/fields/password-field.js.map +0 -1
  288. package/lib/fields/radio-field.js.map +0 -1
  289. package/lib/fields/relation-field.js.map +0 -1
  290. package/lib/fields/sort-field.js.map +0 -1
  291. package/lib/fields/string-field.js.map +0 -1
  292. package/lib/fields/text-field.js.map +0 -1
  293. package/lib/fields/time-field.js.map +0 -1
  294. package/lib/fields/uid-field.js.map +0 -1
  295. package/lib/fields/virtual-field.js.map +0 -1
  296. package/lib/filter-parser.js.map +0 -1
  297. package/lib/index.js.map +0 -1
  298. package/lib/magic-attribute-model.js.map +0 -1
  299. package/lib/mock-database.js.map +0 -1
  300. package/lib/model-hook.js.map +0 -1
  301. package/lib/model.js.map +0 -1
  302. package/lib/operators/array.js.map +0 -1
  303. package/lib/operators/association.js.map +0 -1
  304. package/lib/operators/date.js.map +0 -1
  305. package/lib/operators/empty.js.map +0 -1
  306. package/lib/operators/index.js.map +0 -1
  307. package/lib/operators/ne.js.map +0 -1
  308. package/lib/operators/string.js.map +0 -1
  309. package/lib/operators/utils.js.map +0 -1
  310. package/lib/options-parser.js.map +0 -1
  311. package/lib/playground.js.map +0 -1
  312. package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
  313. package/lib/relation-repository/belongs-to-repository.js.map +0 -1
  314. package/lib/relation-repository/hasmany-repository.js.map +0 -1
  315. package/lib/relation-repository/hasone-repository.js.map +0 -1
  316. package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
  317. package/lib/relation-repository/relation-repository.js.map +0 -1
  318. package/lib/relation-repository/single-relation-repository.js.map +0 -1
  319. package/lib/relation-repository/types.js.map +0 -1
  320. package/lib/repository.js.map +0 -1
  321. package/lib/transaction-decorator.js.map +0 -1
  322. package/lib/update-associations.js.map +0 -1
  323. package/lib/update-guard.js.map +0 -1
  324. package/tsconfig.build.json +0 -9
  325. package/tsconfig.json +0 -5
@@ -1,40 +1,75 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mockDatabase = exports.getConfigByEnv = exports.MockDatabase = void 0;
4
- const utils_1 = require("@nocobase/utils");
5
- const path_1 = require("path");
6
- const database_1 = require("./database");
7
- class MockDatabase extends database_1.Database {
8
- constructor(options) {
9
- super(Object.assign({ storage: ':memory:', tablePrefix: `mock_${(0, utils_1.uid)(6)}_`, dialect: 'sqlite' }, options));
10
- this.sequelize.beforeDefine((model, opts) => {
11
- opts.tableName = `${this.getTablePrefix()}${opts.tableName || opts.modelName || opts.name.plural}`;
12
- });
13
- }
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MockDatabase = void 0;
7
+ exports.getConfigByEnv = getConfigByEnv;
8
+ exports.mockDatabase = mockDatabase;
9
+
10
+ function _utils() {
11
+ const data = require("@nocobase/utils");
12
+
13
+ _utils = function _utils() {
14
+ return data;
15
+ };
16
+
17
+ return data;
18
+ }
19
+
20
+ function _path() {
21
+ const data = require("path");
22
+
23
+ _path = function _path() {
24
+ return data;
25
+ };
26
+
27
+ return data;
28
+ }
29
+
30
+ var _database = require("./database");
31
+
32
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
33
+
34
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
+
36
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
37
+
38
+ class MockDatabase extends _database.Database {
39
+ constructor(options) {
40
+ super(_objectSpread({
41
+ storage: ':memory:',
42
+ tablePrefix: `mock_${(0, _utils().uid)(6)}_`,
43
+ dialect: 'sqlite'
44
+ }, options));
45
+ this.sequelize.beforeDefine((model, opts) => {
46
+ opts.tableName = `${this.getTablePrefix()}${opts.tableName || opts.modelName || opts.name.plural}`;
47
+ });
48
+ }
49
+
14
50
  }
51
+
15
52
  exports.MockDatabase = MockDatabase;
53
+
16
54
  function getConfigByEnv() {
17
- return {
18
- username: process.env.DB_USER,
19
- password: process.env.DB_PASSWORD,
20
- database: process.env.DB_DATABASE,
21
- host: process.env.DB_HOST,
22
- port: process.env.DB_PORT,
23
- dialect: process.env.DB_DIALECT,
24
- logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,
25
- storage: process.env.DB_STORAGE && process.env.DB_STORAGE !== ':memory:'
26
- ? (0, path_1.resolve)(process.cwd(), process.env.DB_STORAGE)
27
- : ':memory:',
28
- define: {
29
- charset: 'utf8mb4',
30
- collate: 'utf8mb4_unicode_ci',
31
- },
32
- };
55
+ return {
56
+ username: process.env.DB_USER,
57
+ password: process.env.DB_PASSWORD,
58
+ database: process.env.DB_DATABASE,
59
+ host: process.env.DB_HOST,
60
+ port: process.env.DB_PORT,
61
+ dialect: process.env.DB_DIALECT,
62
+ logging: process.env.DB_LOGGING === 'on' ? console.log : false,
63
+ storage: process.env.DB_STORAGE && process.env.DB_STORAGE !== ':memory:' ? (0, _path().resolve)(process.cwd(), process.env.DB_STORAGE) : ':memory:',
64
+ define: {
65
+ charset: 'utf8mb4',
66
+ collate: 'utf8mb4_unicode_ci'
67
+ },
68
+ timezone: process.env.DB_TIMEZONE
69
+ };
33
70
  }
34
- exports.getConfigByEnv = getConfigByEnv;
71
+
35
72
  function mockDatabase(options = {}) {
36
- const dbOptions = (0, utils_1.merge)(getConfigByEnv(), options);
37
- return new MockDatabase(dbOptions);
38
- }
39
- exports.mockDatabase = mockDatabase;
40
- //# sourceMappingURL=mock-database.js.map
73
+ const dbOptions = (0, _utils().merge)(getConfigByEnv(), options);
74
+ return new MockDatabase(dbOptions);
75
+ }
@@ -2,11 +2,11 @@ import type { SequelizeHooks } from 'sequelize/types/lib/hooks';
2
2
  import Database from './database';
3
3
  export declare class ModelHook {
4
4
  database: Database;
5
- boundEvent: Set<string>;
5
+ boundEvents: Set<string>;
6
6
  constructor(database: Database);
7
- isModelHook(eventName: string | symbol): keyof SequelizeHooks | false;
7
+ match(event: string | Symbol): keyof SequelizeHooks | null;
8
8
  findModelName(hookArgs: any): any;
9
- bindEvent(eventName: any): void;
10
- hasBindEvent(eventName: any): boolean;
11
- sequelizeHookBuilder(eventName: any): (...args: any[]) => Promise<void>;
9
+ bindEvent(type: any): void;
10
+ hasBoundEvent(type: any): boolean;
11
+ buildSequelizeHook(type: any): (...args: any[]) => Promise<void>;
12
12
  }
package/lib/model-hook.js CHANGED
@@ -1,68 +1,117 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
15
6
  exports.ModelHook = void 0;
16
- const lodash_1 = __importDefault(require("lodash"));
17
- const model_1 = require("./model");
18
- const { hooks } = require('sequelize/lib/hooks');
7
+
8
+ function _lodash() {
9
+ const data = _interopRequireDefault(require("lodash"));
10
+
11
+ _lodash = function _lodash() {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
21
+
22
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
23
+
24
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ const _require = require('sequelize/lib/hooks'),
31
+ hooks = _require.hooks;
32
+
19
33
  class ModelHook {
20
- constructor(database) {
21
- this.boundEvent = new Set();
22
- this.database = database;
34
+ constructor(database) {
35
+ this.database = void 0;
36
+ this.boundEvents = new Set();
37
+ this.database = database;
38
+ }
39
+
40
+ match(event) {
41
+ // NOTE: skip Symbol event
42
+ if (!_lodash().default.isString(event)) {
43
+ return null;
23
44
  }
24
- isModelHook(eventName) {
25
- if (lodash_1.default.isString(eventName)) {
26
- const hookType = eventName.split('.').pop();
27
- if (hooks[hookType]) {
28
- return hookType;
29
- }
45
+
46
+ const type = event.split('.').pop();
47
+ return type in hooks ? type : null;
48
+ }
49
+
50
+ findModelName(hookArgs) {
51
+ var _iterator = _createForOfIteratorHelper(hookArgs),
52
+ _step;
53
+
54
+ try {
55
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
56
+ const arg = _step.value;
57
+
58
+ if (arg === null || arg === void 0 ? void 0 : arg._previousDataValues) {
59
+ return arg.constructor.name;
30
60
  }
31
- return false;
32
- }
33
- findModelName(hookArgs) {
34
- for (const arg of hookArgs) {
35
- if (arg instanceof model_1.Model) {
36
- return arg.constructor.name;
37
- }
38
- if (lodash_1.default.isPlainObject(arg)) {
39
- if (arg['model']) {
40
- return arg['model'].name;
41
- }
42
- if (lodash_1.default.get(arg, 'name.plural')) {
43
- return lodash_1.default.get(arg, 'name.plural');
44
- }
45
- }
61
+
62
+ if (_lodash().default.isPlainObject(arg)) {
63
+ var _arg$name, _arg$name2;
64
+
65
+ if (arg['model']) {
66
+ return arg['model'].name;
67
+ }
68
+
69
+ const plural = arg === null || arg === void 0 ? void 0 : (_arg$name = arg.name) === null || _arg$name === void 0 ? void 0 : _arg$name.plural;
70
+
71
+ if (this.database.sequelize.isDefined(plural)) {
72
+ return plural;
73
+ }
74
+
75
+ const singular = arg === null || arg === void 0 ? void 0 : (_arg$name2 = arg.name) === null || _arg$name2 === void 0 ? void 0 : _arg$name2.singular;
76
+
77
+ if (this.database.sequelize.isDefined(singular)) {
78
+ return singular;
79
+ }
46
80
  }
47
- return null;
48
- }
49
- bindEvent(eventName) {
50
- this.boundEvent.add(eventName);
51
- }
52
- hasBindEvent(eventName) {
53
- return this.boundEvent.has(eventName);
54
- }
55
- sequelizeHookBuilder(eventName) {
56
- return (...args) => __awaiter(this, void 0, void 0, function* () {
57
- const modelName = this.findModelName(args);
58
- if (modelName) {
59
- // emit model event
60
- yield this.database.emitAsync(`${modelName}.${eventName}`, ...args);
61
- }
62
- // emit sequelize global event
63
- yield this.database.emitAsync(eventName, ...args);
64
- });
81
+ }
82
+ } catch (err) {
83
+ _iterator.e(err);
84
+ } finally {
85
+ _iterator.f();
65
86
  }
87
+
88
+ return null;
89
+ }
90
+
91
+ bindEvent(type) {
92
+ this.boundEvents.add(type);
93
+ }
94
+
95
+ hasBoundEvent(type) {
96
+ return this.boundEvents.has(type);
97
+ }
98
+
99
+ buildSequelizeHook(type) {
100
+ var _this = this;
101
+
102
+ return /*#__PURE__*/_asyncToGenerator(function* (...args) {
103
+ const modelName = _this.findModelName(args);
104
+
105
+ if (modelName) {
106
+ // emit model event
107
+ yield _this.database.emitAsync(`${modelName}.${type}`, ...args);
108
+ } // emit sequelize global event
109
+
110
+
111
+ yield _this.database.emitAsync(type, ...args);
112
+ });
113
+ }
114
+
66
115
  }
67
- exports.ModelHook = ModelHook;
68
- //# sourceMappingURL=model-hook.js.map
116
+
117
+ exports.ModelHook = ModelHook;
package/lib/model.js CHANGED
@@ -1,87 +1,122 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
6
  exports.Model = void 0;
7
- const sequelize_1 = require("sequelize");
8
- const lodash_1 = __importDefault(require("lodash"));
9
- class Model extends sequelize_1.Model {
10
- toJSON() {
11
- const handleObj = (obj, options) => {
12
- const handles = [
13
- (data) => {
14
- if (data instanceof Model) {
15
- return data.toJSON();
16
- }
17
- return data;
18
- },
19
- this.hiddenObjKey,
20
- ];
21
- return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), obj);
22
- };
23
- const handleArray = (arrayOfObj, options) => {
24
- const handles = [this.sortAssociations];
25
- return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), arrayOfObj || []);
26
- };
27
- const opts = {
28
- model: this.constructor,
29
- collection: this.constructor.collection,
30
- db: this.constructor.database,
31
- };
32
- const traverseJSON = (data, options) => {
33
- const { model, db, collection } = options;
34
- // handle Object
35
- data = handleObj(data, options);
36
- const result = {};
37
- for (const key of Object.keys(data)) {
38
- // @ts-ignore
39
- if (model.hasAlias(key)) {
40
- const association = model.associations[key];
41
- const opts = {
42
- model: association.target,
43
- collection: db.getCollection(association.target.name),
44
- db,
45
- key,
46
- field: collection.getField(key),
47
- };
48
- if (['HasMany', 'BelongsToMany'].includes(association.associationType)) {
49
- result[key] = handleArray(data[key], opts).map((item) => traverseJSON(item, opts));
50
- }
51
- else {
52
- result[key] = data[key] ? traverseJSON(data[key], opts) : null;
53
- }
54
- }
55
- else {
56
- result[key] = data[key];
57
- }
58
- }
59
- return result;
60
- };
61
- return traverseJSON(super.toJSON(), opts);
62
- }
63
- hiddenObjKey(obj, options) {
64
- const hiddenFields = Array.from(options.collection.fields.values())
65
- .filter((field) => field.options.hidden)
66
- .map((field) => field.options.name);
67
- return lodash_1.default.omit(obj, hiddenFields);
68
- }
69
- sortAssociations(data, { field }) {
70
- const sortBy = field.options.sortBy;
71
- return sortBy ? this.sortArray(data, sortBy) : data;
72
- }
73
- sortArray(data, sortBy) {
74
- if (!lodash_1.default.isArray(sortBy)) {
75
- sortBy = [sortBy];
7
+
8
+ function _sequelize() {
9
+ const data = require("sequelize");
10
+
11
+ _sequelize = function _sequelize() {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
17
+
18
+ function _lodash() {
19
+ const data = _interopRequireDefault(require("lodash"));
20
+
21
+ _lodash = function _lodash() {
22
+ return data;
23
+ };
24
+
25
+ return data;
26
+ }
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ class Model extends _sequelize().Model {
31
+ toJSON() {
32
+ const handleObj = (obj, options) => {
33
+ const handles = [data => {
34
+ if (data instanceof Model) {
35
+ return data.toJSON();
36
+ }
37
+
38
+ return data;
39
+ }, this.hiddenObjKey];
40
+ return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), obj);
41
+ };
42
+
43
+ const handleArray = (arrayOfObj, options) => {
44
+ const handles = [this.sortAssociations];
45
+ return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), arrayOfObj || []);
46
+ };
47
+
48
+ const opts = {
49
+ model: this.constructor,
50
+ collection: this.constructor.collection,
51
+ db: this.constructor.database
52
+ };
53
+
54
+ const traverseJSON = (data, options) => {
55
+ const model = options.model,
56
+ db = options.db,
57
+ collection = options.collection; // handle Object
58
+
59
+ data = handleObj(data, options);
60
+ const result = {};
61
+
62
+ for (var _i = 0, _Object$keys = Object.keys(data); _i < _Object$keys.length; _i++) {
63
+ const key = _Object$keys[_i];
64
+
65
+ // @ts-ignore
66
+ if (model.hasAlias(key)) {
67
+ const association = model.associations[key];
68
+ const opts = {
69
+ model: association.target,
70
+ collection: db.getCollection(association.target.name),
71
+ db,
72
+ key,
73
+ field: collection.getField(key)
74
+ };
75
+
76
+ if (['HasMany', 'BelongsToMany'].includes(association.associationType)) {
77
+ result[key] = handleArray(data[key], opts).map(item => traverseJSON(item, opts));
78
+ } else {
79
+ result[key] = data[key] ? traverseJSON(data[key], opts) : null;
80
+ }
81
+ } else {
82
+ result[key] = data[key];
76
83
  }
77
- const orderItems = [];
78
- const orderDirections = [];
79
- sortBy.forEach((sortItem) => {
80
- orderDirections.push(sortItem.startsWith('-') ? 'desc' : 'asc');
81
- orderItems.push(sortItem.replace('-', ''));
82
- });
83
- return lodash_1.default.orderBy(data, orderItems, orderDirections);
84
+ }
85
+
86
+ return result;
87
+ };
88
+
89
+ return traverseJSON(super.toJSON(), opts);
90
+ }
91
+
92
+ hiddenObjKey(obj, options) {
93
+ const hiddenFields = Array.from(options.collection.fields.values()).filter(field => field.options.hidden).map(field => field.options.name);
94
+ return _lodash().default.omit(obj, hiddenFields);
95
+ }
96
+
97
+ sortAssociations(data, {
98
+ field
99
+ }) {
100
+ const sortBy = field.options.sortBy;
101
+ return sortBy ? this.sortArray(data, sortBy) : data;
102
+ }
103
+
104
+ sortArray(data, sortBy) {
105
+ if (!_lodash().default.isArray(sortBy)) {
106
+ sortBy = [sortBy];
84
107
  }
108
+
109
+ const orderItems = [];
110
+ const orderDirections = [];
111
+ sortBy.forEach(sortItem => {
112
+ orderDirections.push(sortItem.startsWith('-') ? 'desc' : 'asc');
113
+ orderItems.push(sortItem.replace('-', ''));
114
+ });
115
+ return _lodash().default.orderBy(data, orderItems, orderDirections);
116
+ }
117
+
85
118
  }
119
+
86
120
  exports.Model = Model;
87
- //# sourceMappingURL=model.js.map
121
+ Model.database = void 0;
122
+ Model.collection = void 0;