@nocobase/database 0.7.0-alpha.34 → 0.7.0-alpha.57

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 (280) hide show
  1. package/lib/collection-importer.js +101 -67
  2. package/lib/collection.js +339 -210
  3. package/lib/database.js +488 -304
  4. package/lib/fields/array-field.js +45 -25
  5. package/lib/fields/belongs-to-field.js +101 -54
  6. package/lib/fields/belongs-to-many-field.js +98 -53
  7. package/lib/fields/boolean-field.js +24 -9
  8. package/lib/fields/context-field.js +77 -45
  9. package/lib/fields/date-field.js +24 -9
  10. package/lib/fields/field.js +114 -75
  11. package/lib/fields/has-inverse-field.js +4 -2
  12. package/lib/fields/has-many-field.js +105 -56
  13. package/lib/fields/has-one-field.js +105 -54
  14. package/lib/fields/index.js +277 -33
  15. package/lib/fields/json-field.js +36 -16
  16. package/lib/fields/number-field.js +53 -26
  17. package/lib/fields/password-field.js +118 -73
  18. package/lib/fields/radio-field.js +75 -47
  19. package/lib/fields/relation-field.js +41 -28
  20. package/lib/fields/sort-field.js +165 -89
  21. package/lib/fields/string-field.js +24 -9
  22. package/lib/fields/text-field.js +24 -9
  23. package/lib/fields/time-field.js +24 -9
  24. package/lib/fields/uid-field.js +57 -28
  25. package/lib/fields/uuid-field.js +36 -12
  26. package/lib/fields/virtual-field.js +24 -9
  27. package/lib/filter-parser.js +288 -179
  28. package/lib/index.js +210 -29
  29. package/lib/magic-attribute-model.js +123 -71
  30. package/lib/mock-database.js +68 -34
  31. package/lib/model-hook.js +101 -59
  32. package/lib/model.js +116 -81
  33. package/lib/operators/array.js +136 -96
  34. package/lib/operators/association.js +30 -14
  35. package/lib/operators/date.js +78 -34
  36. package/lib/operators/empty.js +113 -75
  37. package/lib/operators/index.js +15 -3
  38. package/lib/operators/ne.js +27 -12
  39. package/lib/operators/notIn.js +27 -12
  40. package/lib/operators/string.js +56 -35
  41. package/lib/operators/utils.js +18 -10
  42. package/lib/options-parser.js +323 -215
  43. package/lib/playground.js +66 -53
  44. package/lib/relation-repository/belongs-to-many-repository.js +281 -198
  45. package/lib/relation-repository/belongs-to-repository.js +10 -6
  46. package/lib/relation-repository/hasmany-repository.js +168 -121
  47. package/lib/relation-repository/hasone-repository.js +10 -6
  48. package/lib/relation-repository/multiple-relation-repository.js +263 -148
  49. package/lib/relation-repository/relation-repository.js +155 -97
  50. package/lib/relation-repository/single-relation-repository.js +138 -99
  51. package/lib/relation-repository/types.js +4 -2
  52. package/lib/repository.js +465 -291
  53. package/lib/transaction-decorator.js +80 -67
  54. package/lib/update-associations.js +525 -321
  55. package/lib/update-guard.js +160 -117
  56. package/package.json +3 -8
  57. package/src/database.ts +9 -3
  58. package/src/mock-database.ts +1 -1
  59. package/esm/collection-importer.d.ts +0 -7
  60. package/esm/collection-importer.js +0 -49
  61. package/esm/collection-importer.js.map +0 -1
  62. package/esm/collection.d.ts +0 -73
  63. package/esm/collection.js +0 -224
  64. package/esm/collection.js.map +0 -1
  65. package/esm/database.d.ts +0 -104
  66. package/esm/database.js +0 -305
  67. package/esm/database.js.map +0 -1
  68. package/esm/fields/array-field.d.ts +0 -11
  69. package/esm/fields/array-field.js +0 -26
  70. package/esm/fields/array-field.js.map +0 -1
  71. package/esm/fields/belongs-to-field.d.ts +0 -12
  72. package/esm/fields/belongs-to-field.js +0 -57
  73. package/esm/fields/belongs-to-field.js.map +0 -1
  74. package/esm/fields/belongs-to-many-field.d.ts +0 -11
  75. package/esm/fields/belongs-to-many-field.js +0 -55
  76. package/esm/fields/belongs-to-many-field.js.map +0 -1
  77. package/esm/fields/boolean-field.d.ts +0 -8
  78. package/esm/fields/boolean-field.js +0 -8
  79. package/esm/fields/boolean-field.js.map +0 -1
  80. package/esm/fields/context-field.d.ts +0 -13
  81. package/esm/fields/context-field.js +0 -43
  82. package/esm/fields/context-field.js.map +0 -1
  83. package/esm/fields/date-field.d.ts +0 -8
  84. package/esm/fields/date-field.js +0 -8
  85. package/esm/fields/date-field.js.map +0 -1
  86. package/esm/fields/field.d.ts +0 -37
  87. package/esm/fields/field.js +0 -74
  88. package/esm/fields/field.js.map +0 -1
  89. package/esm/fields/has-inverse-field.d.ts +0 -4
  90. package/esm/fields/has-inverse-field.js +0 -2
  91. package/esm/fields/has-inverse-field.js.map +0 -1
  92. package/esm/fields/has-many-field.d.ts +0 -64
  93. package/esm/fields/has-many-field.js +0 -58
  94. package/esm/fields/has-many-field.js.map +0 -1
  95. package/esm/fields/has-one-field.d.ts +0 -64
  96. package/esm/fields/has-one-field.js +0 -57
  97. package/esm/fields/has-one-field.js.map +0 -1
  98. package/esm/fields/index.d.ts +0 -42
  99. package/esm/fields/index.js +0 -22
  100. package/esm/fields/index.js.map +0 -1
  101. package/esm/fields/json-field.d.ts +0 -14
  102. package/esm/fields/json-field.js +0 -17
  103. package/esm/fields/json-field.js.map +0 -1
  104. package/esm/fields/number-field.d.ts +0 -32
  105. package/esm/fields/number-field.js +0 -28
  106. package/esm/fields/number-field.js.map +0 -1
  107. package/esm/fields/password-field.d.ts +0 -21
  108. package/esm/fields/password-field.js +0 -71
  109. package/esm/fields/password-field.js.map +0 -1
  110. package/esm/fields/radio-field.d.ts +0 -14
  111. package/esm/fields/radio-field.js +0 -49
  112. package/esm/fields/radio-field.js.map +0 -1
  113. package/esm/fields/relation-field.d.ts +0 -20
  114. package/esm/fields/relation-field.js +0 -27
  115. package/esm/fields/relation-field.js.map +0 -1
  116. package/esm/fields/sort-field.d.ts +0 -16
  117. package/esm/fields/sort-field.js +0 -90
  118. package/esm/fields/sort-field.js.map +0 -1
  119. package/esm/fields/string-field.d.ts +0 -8
  120. package/esm/fields/string-field.js +0 -8
  121. package/esm/fields/string-field.js.map +0 -1
  122. package/esm/fields/text-field.d.ts +0 -8
  123. package/esm/fields/text-field.js +0 -8
  124. package/esm/fields/text-field.js.map +0 -1
  125. package/esm/fields/time-field.d.ts +0 -8
  126. package/esm/fields/time-field.js +0 -8
  127. package/esm/fields/time-field.js.map +0 -1
  128. package/esm/fields/uid-field.d.ts +0 -10
  129. package/esm/fields/uid-field.js +0 -27
  130. package/esm/fields/uid-field.js.map +0 -1
  131. package/esm/fields/uuid-field.d.ts +0 -9
  132. package/esm/fields/uuid-field.js +0 -11
  133. package/esm/fields/uuid-field.js.map +0 -1
  134. package/esm/fields/virtual-field.d.ts +0 -8
  135. package/esm/fields/virtual-field.js +0 -8
  136. package/esm/fields/virtual-field.js.map +0 -1
  137. package/esm/filter-parser.d.ts +0 -27
  138. package/esm/filter-parser.js +0 -185
  139. package/esm/filter-parser.js.map +0 -1
  140. package/esm/index.d.ts +0 -15
  141. package/esm/index.js +0 -16
  142. package/esm/index.js.map +0 -1
  143. package/esm/magic-attribute-model.d.ts +0 -7
  144. package/esm/magic-attribute-model.js +0 -70
  145. package/esm/magic-attribute-model.js.map +0 -1
  146. package/esm/mock-database.d.ts +0 -22
  147. package/esm/mock-database.js +0 -34
  148. package/esm/mock-database.js.map +0 -1
  149. package/esm/model-hook.d.ts +0 -12
  150. package/esm/model-hook.js +0 -60
  151. package/esm/model-hook.js.map +0 -1
  152. package/esm/model.d.ts +0 -15
  153. package/esm/model.js +0 -80
  154. package/esm/model.js.map +0 -1
  155. package/esm/operators/array.d.ts +0 -26
  156. package/esm/operators/array.js +0 -105
  157. package/esm/operators/array.js.map +0 -1
  158. package/esm/operators/association.d.ts +0 -10
  159. package/esm/operators/association.js +0 -14
  160. package/esm/operators/association.js.map +0 -1
  161. package/esm/operators/date.d.ts +0 -34
  162. package/esm/operators/date.js +0 -35
  163. package/esm/operators/date.js.map +0 -1
  164. package/esm/operators/empty.d.ts +0 -28
  165. package/esm/operators/empty.js +0 -58
  166. package/esm/operators/empty.js.map +0 -1
  167. package/esm/operators/index.d.ts +0 -2
  168. package/esm/operators/index.js +0 -2
  169. package/esm/operators/index.js.map +0 -1
  170. package/esm/operators/ne.d.ts +0 -10
  171. package/esm/operators/ne.js +0 -12
  172. package/esm/operators/ne.js.map +0 -1
  173. package/esm/operators/notIn.d.ts +0 -10
  174. package/esm/operators/notIn.js +0 -12
  175. package/esm/operators/notIn.js.map +0 -1
  176. package/esm/operators/string.d.ts +0 -21
  177. package/esm/operators/string.js +0 -35
  178. package/esm/operators/string.js.map +0 -1
  179. package/esm/operators/utils.d.ts +0 -4
  180. package/esm/operators/utils.js +0 -11
  181. package/esm/operators/utils.js.map +0 -1
  182. package/esm/options-parser.d.ts +0 -31
  183. package/esm/options-parser.js +0 -225
  184. package/esm/options-parser.js.map +0 -1
  185. package/esm/playground.d.ts +0 -1
  186. package/esm/playground.js +0 -53
  187. package/esm/playground.js.map +0 -1
  188. package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
  189. package/esm/relation-repository/belongs-to-many-repository.js +0 -199
  190. package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
  191. package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
  192. package/esm/relation-repository/belongs-to-repository.js +0 -4
  193. package/esm/relation-repository/belongs-to-repository.js.map +0 -1
  194. package/esm/relation-repository/hasmany-repository.d.ts +0 -23
  195. package/esm/relation-repository/hasmany-repository.js +0 -125
  196. package/esm/relation-repository/hasmany-repository.js.map +0 -1
  197. package/esm/relation-repository/hasone-repository.d.ts +0 -17
  198. package/esm/relation-repository/hasone-repository.js +0 -4
  199. package/esm/relation-repository/hasone-repository.js.map +0 -1
  200. package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
  201. package/esm/relation-repository/multiple-relation-repository.js +0 -149
  202. package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
  203. package/esm/relation-repository/relation-repository.d.ts +0 -32
  204. package/esm/relation-repository/relation-repository.js +0 -95
  205. package/esm/relation-repository/relation-repository.js.map +0 -1
  206. package/esm/relation-repository/single-relation-repository.d.ts +0 -23
  207. package/esm/relation-repository/single-relation-repository.js +0 -96
  208. package/esm/relation-repository/single-relation-repository.js.map +0 -1
  209. package/esm/relation-repository/types.d.ts +0 -7
  210. package/esm/relation-repository/types.js +0 -2
  211. package/esm/relation-repository/types.js.map +0 -1
  212. package/esm/repository.d.ts +0 -165
  213. package/esm/repository.js +0 -276
  214. package/esm/repository.js.map +0 -1
  215. package/esm/transaction-decorator.d.ts +0 -1
  216. package/esm/transaction-decorator.js +0 -63
  217. package/esm/transaction-decorator.js.map +0 -1
  218. package/esm/update-associations.d.ts +0 -60
  219. package/esm/update-associations.js +0 -362
  220. package/esm/update-associations.js.map +0 -1
  221. package/esm/update-guard.d.ts +0 -26
  222. package/esm/update-guard.js +0 -122
  223. package/esm/update-guard.js.map +0 -1
  224. package/lib/collection-importer.js.map +0 -1
  225. package/lib/collection.js.map +0 -1
  226. package/lib/database.js.map +0 -1
  227. package/lib/fields/array-field.js.map +0 -1
  228. package/lib/fields/belongs-to-field.js.map +0 -1
  229. package/lib/fields/belongs-to-many-field.js.map +0 -1
  230. package/lib/fields/boolean-field.js.map +0 -1
  231. package/lib/fields/context-field.js.map +0 -1
  232. package/lib/fields/date-field.js.map +0 -1
  233. package/lib/fields/field.js.map +0 -1
  234. package/lib/fields/has-inverse-field.js.map +0 -1
  235. package/lib/fields/has-many-field.js.map +0 -1
  236. package/lib/fields/has-one-field.js.map +0 -1
  237. package/lib/fields/index.js.map +0 -1
  238. package/lib/fields/json-field.js.map +0 -1
  239. package/lib/fields/number-field.js.map +0 -1
  240. package/lib/fields/password-field.js.map +0 -1
  241. package/lib/fields/radio-field.js.map +0 -1
  242. package/lib/fields/relation-field.js.map +0 -1
  243. package/lib/fields/sort-field.js.map +0 -1
  244. package/lib/fields/string-field.js.map +0 -1
  245. package/lib/fields/text-field.js.map +0 -1
  246. package/lib/fields/time-field.js.map +0 -1
  247. package/lib/fields/uid-field.js.map +0 -1
  248. package/lib/fields/uuid-field.js.map +0 -1
  249. package/lib/fields/virtual-field.js.map +0 -1
  250. package/lib/filter-parser.js.map +0 -1
  251. package/lib/index.js.map +0 -1
  252. package/lib/magic-attribute-model.js.map +0 -1
  253. package/lib/mock-database.js.map +0 -1
  254. package/lib/model-hook.js.map +0 -1
  255. package/lib/model.js.map +0 -1
  256. package/lib/operators/array.js.map +0 -1
  257. package/lib/operators/association.js.map +0 -1
  258. package/lib/operators/date.js.map +0 -1
  259. package/lib/operators/empty.js.map +0 -1
  260. package/lib/operators/index.js.map +0 -1
  261. package/lib/operators/ne.js.map +0 -1
  262. package/lib/operators/notIn.js.map +0 -1
  263. package/lib/operators/string.js.map +0 -1
  264. package/lib/operators/utils.js.map +0 -1
  265. package/lib/options-parser.js.map +0 -1
  266. package/lib/playground.js.map +0 -1
  267. package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
  268. package/lib/relation-repository/belongs-to-repository.js.map +0 -1
  269. package/lib/relation-repository/hasmany-repository.js.map +0 -1
  270. package/lib/relation-repository/hasone-repository.js.map +0 -1
  271. package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
  272. package/lib/relation-repository/relation-repository.js.map +0 -1
  273. package/lib/relation-repository/single-relation-repository.js.map +0 -1
  274. package/lib/relation-repository/types.js.map +0 -1
  275. package/lib/repository.js.map +0 -1
  276. package/lib/transaction-decorator.js.map +0 -1
  277. package/lib/update-associations.js.map +0 -1
  278. package/lib/update-guard.js.map +0 -1
  279. package/tsconfig.build.json +0 -9
  280. package/tsconfig.json +0 -5
@@ -1,15 +1,39 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.UuidField = void 0;
4
- const sequelize_1 = require("sequelize");
5
- const field_1 = require("./field");
6
- class UuidField extends field_1.Field {
7
- constructor(options, context) {
8
- super(Object.assign({ defaultValue: sequelize_1.DataTypes.UUIDV4 }, options), context);
9
- }
10
- get dataType() {
11
- return sequelize_1.DataTypes.UUID;
12
- }
7
+
8
+ function _sequelize() {
9
+ const data = require("sequelize");
10
+
11
+ _sequelize = function _sequelize() {
12
+ return data;
13
+ };
14
+
15
+ return data;
13
16
  }
14
- exports.UuidField = UuidField;
15
- //# sourceMappingURL=uuid-field.js.map
17
+
18
+ var _field = require("./field");
19
+
20
+ 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; }
21
+
22
+ 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; }
23
+
24
+ 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; }
25
+
26
+ class UuidField extends _field.Field {
27
+ constructor(options, context) {
28
+ super(_objectSpread({
29
+ defaultValue: _sequelize().DataTypes.UUIDV4
30
+ }, options), context);
31
+ }
32
+
33
+ get dataType() {
34
+ return _sequelize().DataTypes.UUID;
35
+ }
36
+
37
+ }
38
+
39
+ exports.UuidField = UuidField;
@@ -1,12 +1,27 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.VirtualField = void 0;
4
- const sequelize_1 = require("sequelize");
5
- const field_1 = require("./field");
6
- class VirtualField extends field_1.Field {
7
- get dataType() {
8
- return sequelize_1.DataTypes.VIRTUAL;
9
- }
7
+
8
+ function _sequelize() {
9
+ const data = require("sequelize");
10
+
11
+ _sequelize = function _sequelize() {
12
+ return data;
13
+ };
14
+
15
+ return data;
10
16
  }
11
- exports.VirtualField = VirtualField;
12
- //# sourceMappingURL=virtual-field.js.map
17
+
18
+ var _field = require("./field");
19
+
20
+ class VirtualField extends _field.Field {
21
+ get dataType() {
22
+ return _sequelize().DataTypes.VIRTUAL;
23
+ }
24
+
25
+ }
26
+
27
+ exports.VirtualField = VirtualField;
@@ -1,191 +1,300 @@
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 });
6
- const flat_1 = require("flat");
7
- const lodash_1 = __importDefault(require("lodash"));
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ function _flat() {
9
+ const data = require("flat");
10
+
11
+ _flat = function _flat() {
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
+ 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; } } }; }
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
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
39
+
40
+ 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."); }
41
+
42
+ 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); }
43
+
44
+ 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; }
45
+
46
+ 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; }
47
+
48
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
49
+
8
50
  const debug = require('debug')('noco-database');
51
+
9
52
  class FilterParser {
10
- constructor(filter, context) {
11
- const { collection } = context;
12
- this.collection = collection;
13
- this.context = context;
14
- this.model = collection.model;
15
- this.filter = this.prepareFilter(filter);
16
- this.database = collection.context.database;
17
- }
18
- prepareFilter(filter) {
19
- if (lodash_1.default.isPlainObject(filter)) {
20
- const renamedKey = {};
21
- for (const key of Object.keys(filter)) {
22
- if (key.endsWith('.$exists') || key.endsWith('.$notExists')) {
23
- const keyArr = key.split('.');
24
- if (keyArr[keyArr.length - 2] == 'id') {
25
- continue;
26
- }
27
- keyArr.splice(keyArr.length - 1, 0, 'id');
28
- renamedKey[key] = keyArr.join('.');
29
- }
30
- }
31
- for (const [oldKey, newKey] of Object.entries(renamedKey)) {
32
- // @ts-ignore
33
- filter[newKey] = filter[oldKey];
34
- delete filter[oldKey];
35
- }
53
+ constructor(filter, context) {
54
+ this.collection = void 0;
55
+ this.database = void 0;
56
+ this.model = void 0;
57
+ this.filter = void 0;
58
+ this.context = void 0;
59
+ const collection = context.collection;
60
+ this.collection = collection;
61
+ this.context = context;
62
+ this.model = collection.model;
63
+ this.filter = this.prepareFilter(filter);
64
+ this.database = collection.context.database;
65
+ }
66
+
67
+ prepareFilter(filter) {
68
+ if (_lodash().default.isPlainObject(filter)) {
69
+ const renamedKey = {};
70
+
71
+ for (var _i = 0, _Object$keys = Object.keys(filter); _i < _Object$keys.length; _i++) {
72
+ const key = _Object$keys[_i];
73
+
74
+ if (key.endsWith('.$exists') || key.endsWith('.$notExists')) {
75
+ const keyArr = key.split('.');
76
+
77
+ if (keyArr[keyArr.length - 2] == 'id') {
78
+ continue;
79
+ }
80
+
81
+ keyArr.splice(keyArr.length - 1, 0, 'id');
82
+ renamedKey[key] = keyArr.join('.');
36
83
  }
37
- return filter;
84
+ }
85
+
86
+ for (var _i2 = 0, _Object$entries = Object.entries(renamedKey); _i2 < _Object$entries.length; _i2++) {
87
+ const _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
88
+ oldKey = _Object$entries$_i[0],
89
+ newKey = _Object$entries$_i[1];
90
+
91
+ // @ts-ignore
92
+ filter[newKey] = filter[oldKey];
93
+ delete filter[oldKey];
94
+ }
38
95
  }
39
- toSequelizeParams() {
40
- debug('filter %o', this.filter);
41
- if (!this.filter) {
42
- return {};
43
- }
44
- const filter = this.filter;
45
- const model = this.model;
46
- // supported operators
47
- const operators = this.database.operators;
48
- const originalFiler = lodash_1.default.cloneDeep(filter || {});
49
- const flattenedFilter = (0, flat_1.flatten)(filter || {});
50
- debug('flattened filter %o', flattenedFilter);
51
- const include = {};
52
- const where = {};
53
- const filter2 = lodash_1.default.cloneDeep(flattenedFilter);
54
- let skipPrefix = null;
55
- const associations = model.associations;
56
- debug('associations %O', associations);
57
- for (let [key, value] of Object.entries(flattenedFilter)) {
58
- // 处理 filter 条件
59
- if (skipPrefix && key.startsWith(skipPrefix)) {
60
- continue;
61
- }
62
- debug('handle filter key "%s: "%s"', key, value);
63
- let keys = key.split('.');
64
- // paths ?
65
- const paths = [];
66
- // origins ?
67
- const origins = [];
68
- while (keys.length) {
69
- debug('keys: %o, paths: %o, origins: %o', keys, paths, origins);
70
- // move key from keys to origins
71
- const firstKey = keys.shift();
72
- origins.push(firstKey);
73
- debug('origins: %o', origins);
74
- if (firstKey.startsWith('$')) {
75
- if (operators.has(firstKey)) {
76
- debug('%s is operator', firstKey);
77
- // if firstKey is operator
78
- const opKey = operators.get(firstKey);
79
- debug('operator key %s, operator: %o', firstKey, opKey);
80
- // 默认操作符
81
- if (typeof opKey === 'symbol') {
82
- paths.push(opKey);
83
- continue;
84
- }
85
- else if (typeof opKey === 'function') {
86
- skipPrefix = origins.join('.');
87
- const queryValue = lodash_1.default.get((0, flat_1.unflatten)(originalFiler), skipPrefix);
88
- value = opKey(queryValue, {
89
- app: this.context.app,
90
- db: this.database,
91
- path: skipPrefix,
92
- fieldName: this.getFieldNameFromQueryPath(skipPrefix),
93
- model: this.model,
94
- });
95
- break;
96
- }
97
- }
98
- else {
99
- paths.push(firstKey);
100
- continue;
101
- }
102
- }
103
- // firstKey is number
104
- if (!lodash_1.default.isNaN(parseInt(firstKey))) {
105
- paths.push(firstKey);
106
- continue;
107
- }
108
- // firstKey is not association
109
- if (!associations[firstKey]) {
110
- paths.push(firstKey);
111
- continue;
112
- }
113
- const associationKeys = [];
114
- associationKeys.push(firstKey);
115
- debug('associationKeys %o', associationKeys);
116
- // set sequelize include option
117
- lodash_1.default.set(include, firstKey, {
118
- association: firstKey,
119
- attributes: [], // out put empty fields by default
120
- });
121
- // association target model
122
- let target = associations[firstKey].target;
123
- debug('association target %o', target);
124
- while (target) {
125
- const attr = keys.shift();
126
- origins.push(attr);
127
- // if it is target model attribute
128
- if (target.rawAttributes[attr]) {
129
- associationKeys.push(attr);
130
- target = null;
131
- }
132
- else if (target.associations[attr]) {
133
- // if it is target model association (nested association filter)
134
- associationKeys.push(attr);
135
- const assoc = [];
136
- associationKeys.forEach((associationKey, index) => {
137
- if (index > 0) {
138
- assoc.push('include');
139
- }
140
- assoc.push(associationKey);
141
- });
142
- lodash_1.default.set(include, assoc, {
143
- association: attr,
144
- attributes: [],
145
- });
146
- target = target.associations[attr].target;
147
- }
148
- else {
149
- throw new Error(`${attr} neither ${firstKey}'s association nor ${firstKey}'s attribute`);
150
- }
151
- }
152
- debug('associationKeys %o', associationKeys);
153
- if (associationKeys.length > 1) {
154
- paths.push(`$${associationKeys.join('.')}$`);
155
- }
156
- else {
157
- paths.push(firstKey);
158
- }
159
- }
160
- debug('where %o, paths %o, value, %o', where, paths, value);
161
- const values = lodash_1.default.get(where, paths);
162
- if (values && typeof values === 'object' && value && typeof value === 'object') {
163
- value = Object.assign(Object.assign({}, value), values);
96
+
97
+ return filter;
98
+ }
99
+
100
+ toSequelizeParams() {
101
+ debug('filter %o', this.filter);
102
+
103
+ if (!this.filter) {
104
+ return {};
105
+ }
106
+
107
+ const filter = this.filter;
108
+ const model = this.model; // supported operators
109
+
110
+ const operators = this.database.operators;
111
+
112
+ const originalFiler = _lodash().default.cloneDeep(filter || {});
113
+
114
+ const flattenedFilter = (0, _flat().flatten)(filter || {});
115
+ debug('flattened filter %o', flattenedFilter);
116
+ const include = {};
117
+ const where = {};
118
+
119
+ const filter2 = _lodash().default.cloneDeep(flattenedFilter);
120
+
121
+ let skipPrefix = null;
122
+ const associations = model.associations;
123
+ debug('associations %O', associations);
124
+
125
+ for (var _i3 = 0, _Object$entries2 = Object.entries(flattenedFilter); _i3 < _Object$entries2.length; _i3++) {
126
+ let _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),
127
+ key = _Object$entries2$_i[0],
128
+ value = _Object$entries2$_i[1];
129
+
130
+ // 处理 filter 条件
131
+ if (skipPrefix && key.startsWith(skipPrefix)) {
132
+ continue;
133
+ }
134
+
135
+ debug('handle filter key "%s: "%s"', key, value);
136
+ let keys = key.split('.'); // paths ?
137
+
138
+ const paths = []; // origins ?
139
+
140
+ const origins = [];
141
+
142
+ while (keys.length) {
143
+ debug('keys: %o, paths: %o, origins: %o', keys, paths, origins); // move key from keys to origins
144
+
145
+ const firstKey = keys.shift();
146
+ origins.push(firstKey);
147
+ debug('origins: %o', origins);
148
+
149
+ if (firstKey.startsWith('$')) {
150
+ if (operators.has(firstKey)) {
151
+ debug('%s is operator', firstKey); // if firstKey is operator
152
+
153
+ const opKey = operators.get(firstKey);
154
+ debug('operator key %s, operator: %o', firstKey, opKey); // 默认操作符
155
+
156
+ if (typeof opKey === 'symbol') {
157
+ paths.push(opKey);
158
+ continue;
159
+ } else if (typeof opKey === 'function') {
160
+ skipPrefix = origins.join('.');
161
+
162
+ const queryValue = _lodash().default.get((0, _flat().unflatten)(originalFiler), skipPrefix);
163
+
164
+ value = opKey(queryValue, {
165
+ app: this.context.app,
166
+ db: this.database,
167
+ path: skipPrefix,
168
+ fieldName: this.getFieldNameFromQueryPath(skipPrefix),
169
+ model: this.model
170
+ });
171
+ break;
164
172
  }
165
- lodash_1.default.set(where, paths, value);
173
+ } else {
174
+ paths.push(firstKey);
175
+ continue;
176
+ }
177
+ } // firstKey is number
178
+
179
+
180
+ if (!_lodash().default.isNaN(parseInt(firstKey))) {
181
+ paths.push(firstKey);
182
+ continue;
183
+ } // firstKey is not association
184
+
185
+
186
+ if (!associations[firstKey]) {
187
+ paths.push(firstKey);
188
+ continue;
166
189
  }
167
- const toInclude = (items) => {
168
- return Object.values(items).map((item) => {
169
- if (item.include) {
170
- item.include = toInclude(item.include);
171
- }
172
- return item;
190
+
191
+ const associationKeys = [];
192
+ associationKeys.push(firstKey);
193
+ debug('associationKeys %o', associationKeys); // set sequelize include option
194
+
195
+ _lodash().default.set(include, firstKey, {
196
+ association: firstKey,
197
+ attributes: [] // out put empty fields by default
198
+
199
+ }); // association target model
200
+
201
+
202
+ let target = associations[firstKey].target;
203
+ debug('association target %o', target);
204
+
205
+ while (target) {
206
+ const attr = keys.shift();
207
+ origins.push(attr); // if it is target model attribute
208
+
209
+ if (target.rawAttributes[attr]) {
210
+ associationKeys.push(attr);
211
+ target = null;
212
+ } else if (target.associations[attr]) {
213
+ // if it is target model association (nested association filter)
214
+ associationKeys.push(attr);
215
+ const assoc = [];
216
+ associationKeys.forEach((associationKey, index) => {
217
+ if (index > 0) {
218
+ assoc.push('include');
219
+ }
220
+
221
+ assoc.push(associationKey);
173
222
  });
174
- };
175
- debug('where %o, include %o', where, include);
176
- return { where, include: toInclude(include) };
223
+
224
+ _lodash().default.set(include, assoc, {
225
+ association: attr,
226
+ attributes: []
227
+ });
228
+
229
+ target = target.associations[attr].target;
230
+ } else {
231
+ throw new Error(`${attr} neither ${firstKey}'s association nor ${firstKey}'s attribute`);
232
+ }
233
+ }
234
+
235
+ debug('associationKeys %o', associationKeys);
236
+
237
+ if (associationKeys.length > 1) {
238
+ paths.push(`$${associationKeys.join('.')}$`);
239
+ } else {
240
+ paths.push(firstKey);
241
+ }
242
+ }
243
+
244
+ debug('where %o, paths %o, value, %o', where, paths, value);
245
+
246
+ const values = _lodash().default.get(where, paths);
247
+
248
+ if (values && typeof values === 'object' && value && typeof value === 'object') {
249
+ value = _objectSpread(_objectSpread({}, value), values);
250
+ }
251
+
252
+ _lodash().default.set(where, paths, value);
177
253
  }
178
- getFieldNameFromQueryPath(queryPath) {
179
- const paths = queryPath.split('.');
180
- let fieldName;
181
- for (const path of paths) {
182
- if (path.startsWith('$') || !lodash_1.default.isNaN(parseInt(path))) {
183
- continue;
184
- }
185
- fieldName = path;
254
+
255
+ const toInclude = items => {
256
+ return Object.values(items).map(item => {
257
+ if (item.include) {
258
+ item.include = toInclude(item.include);
259
+ }
260
+
261
+ return item;
262
+ });
263
+ };
264
+
265
+ debug('where %o, include %o', where, include);
266
+ return {
267
+ where,
268
+ include: toInclude(include)
269
+ };
270
+ }
271
+
272
+ getFieldNameFromQueryPath(queryPath) {
273
+ const paths = queryPath.split('.');
274
+ let fieldName;
275
+
276
+ var _iterator = _createForOfIteratorHelper(paths),
277
+ _step;
278
+
279
+ try {
280
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
281
+ const path = _step.value;
282
+
283
+ if (path.startsWith('$') || !_lodash().default.isNaN(parseInt(path))) {
284
+ continue;
186
285
  }
187
- return fieldName;
286
+
287
+ fieldName = path;
288
+ }
289
+ } catch (err) {
290
+ _iterator.e(err);
291
+ } finally {
292
+ _iterator.f();
188
293
  }
294
+
295
+ return fieldName;
296
+ }
297
+
189
298
  }
190
- exports.default = FilterParser;
191
- //# sourceMappingURL=filter-parser.js.map
299
+
300
+ exports.default = FilterParser;