@nocobase/database 0.7.0-alpha.8 → 0.7.0-alpha.80

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 (298) hide show
  1. package/lib/collection-importer.js +101 -67
  2. package/lib/collection.js +339 -210
  3. package/lib/database.d.ts +4 -1
  4. package/lib/database.js +489 -275
  5. package/lib/fields/array-field.js +45 -25
  6. package/lib/fields/belongs-to-field.js +101 -54
  7. package/lib/fields/belongs-to-many-field.js +98 -53
  8. package/lib/fields/boolean-field.js +24 -9
  9. package/lib/fields/context-field.js +77 -42
  10. package/lib/fields/date-field.js +24 -9
  11. package/lib/fields/field.js +114 -75
  12. package/lib/fields/has-inverse-field.js +4 -2
  13. package/lib/fields/has-many-field.js +105 -56
  14. package/lib/fields/has-one-field.js +105 -54
  15. package/lib/fields/index.d.ts +3 -1
  16. package/lib/fields/index.js +277 -32
  17. package/lib/fields/json-field.js +36 -16
  18. package/lib/fields/number-field.js +53 -26
  19. package/lib/fields/password-field.js +120 -73
  20. package/lib/fields/radio-field.js +75 -47
  21. package/lib/fields/relation-field.js +41 -28
  22. package/lib/fields/sort-field.js +165 -89
  23. package/lib/fields/string-field.js +24 -9
  24. package/lib/fields/text-field.js +24 -9
  25. package/lib/fields/time-field.js +24 -9
  26. package/lib/fields/uid-field.js +57 -28
  27. package/lib/fields/uuid-field.d.ts +9 -0
  28. package/lib/fields/uuid-field.js +39 -0
  29. package/lib/fields/virtual-field.js +24 -9
  30. package/lib/filter-parser.js +288 -179
  31. package/lib/index.js +210 -29
  32. package/lib/magic-attribute-model.js +123 -71
  33. package/lib/mock-database.js +68 -34
  34. package/lib/model-hook.js +101 -60
  35. package/lib/model.js +116 -81
  36. package/lib/operators/array.js +136 -96
  37. package/lib/operators/association.js +30 -14
  38. package/lib/operators/boolean.d.ts +13 -0
  39. package/lib/operators/boolean.js +35 -0
  40. package/lib/operators/date.js +78 -34
  41. package/lib/operators/empty.js +113 -75
  42. package/lib/operators/index.js +15 -3
  43. package/lib/operators/ne.js +27 -12
  44. package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
  45. package/lib/operators/notIn.js +29 -0
  46. package/lib/operators/string.js +56 -35
  47. package/lib/operators/utils.js +18 -10
  48. package/lib/options-parser.js +323 -215
  49. package/lib/playground.js +66 -53
  50. package/lib/relation-repository/belongs-to-many-repository.js +281 -198
  51. package/lib/relation-repository/belongs-to-repository.js +10 -6
  52. package/lib/relation-repository/hasmany-repository.js +168 -121
  53. package/lib/relation-repository/hasone-repository.js +10 -6
  54. package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
  55. package/lib/relation-repository/multiple-relation-repository.js +263 -148
  56. package/lib/relation-repository/relation-repository.d.ts +1 -1
  57. package/lib/relation-repository/relation-repository.js +155 -95
  58. package/lib/relation-repository/single-relation-repository.d.ts +6 -6
  59. package/lib/relation-repository/single-relation-repository.js +138 -99
  60. package/lib/relation-repository/types.js +4 -2
  61. package/lib/repository.d.ts +4 -7
  62. package/lib/repository.js +465 -291
  63. package/lib/transaction-decorator.js +80 -67
  64. package/lib/update-associations.d.ts +1 -2
  65. package/lib/update-associations.js +525 -321
  66. package/lib/update-guard.js +160 -117
  67. package/package.json +3 -8
  68. package/src/__tests__/fields/uuid-field.test.ts +30 -0
  69. package/src/__tests__/operator/notIn.test.ts +33 -0
  70. package/src/__tests__/option-parser.test.ts +20 -0
  71. package/src/database.ts +51 -4
  72. package/src/fields/index.ts +3 -0
  73. package/src/fields/password-field.ts +2 -0
  74. package/src/fields/uuid-field.ts +21 -0
  75. package/src/mock-database.ts +1 -1
  76. package/src/model-hook.ts +1 -1
  77. package/src/operators/boolean.ts +18 -0
  78. package/src/operators/index.ts +2 -0
  79. package/src/operators/notIn.ts +12 -0
  80. package/src/options-parser.ts +1 -1
  81. package/src/relation-repository/multiple-relation-repository.ts +8 -6
  82. package/src/relation-repository/relation-repository.ts +11 -6
  83. package/src/relation-repository/single-relation-repository.ts +6 -6
  84. package/src/repository.ts +4 -6
  85. package/src/update-associations.ts +1 -2
  86. package/esm/collection-importer.d.ts +0 -7
  87. package/esm/collection-importer.js +0 -49
  88. package/esm/collection-importer.js.map +0 -1
  89. package/esm/collection.d.ts +0 -73
  90. package/esm/collection.js +0 -224
  91. package/esm/collection.js.map +0 -1
  92. package/esm/database.d.ts +0 -101
  93. package/esm/database.js +0 -275
  94. package/esm/database.js.map +0 -1
  95. package/esm/fields/array-field.d.ts +0 -11
  96. package/esm/fields/array-field.js +0 -26
  97. package/esm/fields/array-field.js.map +0 -1
  98. package/esm/fields/belongs-to-field.d.ts +0 -12
  99. package/esm/fields/belongs-to-field.js +0 -57
  100. package/esm/fields/belongs-to-field.js.map +0 -1
  101. package/esm/fields/belongs-to-many-field.d.ts +0 -11
  102. package/esm/fields/belongs-to-many-field.js +0 -55
  103. package/esm/fields/belongs-to-many-field.js.map +0 -1
  104. package/esm/fields/boolean-field.d.ts +0 -8
  105. package/esm/fields/boolean-field.js +0 -8
  106. package/esm/fields/boolean-field.js.map +0 -1
  107. package/esm/fields/context-field.d.ts +0 -13
  108. package/esm/fields/context-field.js +0 -43
  109. package/esm/fields/context-field.js.map +0 -1
  110. package/esm/fields/date-field.d.ts +0 -8
  111. package/esm/fields/date-field.js +0 -8
  112. package/esm/fields/date-field.js.map +0 -1
  113. package/esm/fields/field.d.ts +0 -37
  114. package/esm/fields/field.js +0 -74
  115. package/esm/fields/field.js.map +0 -1
  116. package/esm/fields/has-inverse-field.d.ts +0 -4
  117. package/esm/fields/has-inverse-field.js +0 -2
  118. package/esm/fields/has-inverse-field.js.map +0 -1
  119. package/esm/fields/has-many-field.d.ts +0 -64
  120. package/esm/fields/has-many-field.js +0 -58
  121. package/esm/fields/has-many-field.js.map +0 -1
  122. package/esm/fields/has-one-field.d.ts +0 -64
  123. package/esm/fields/has-one-field.js +0 -57
  124. package/esm/fields/has-one-field.js.map +0 -1
  125. package/esm/fields/index.d.ts +0 -40
  126. package/esm/fields/index.js +0 -21
  127. package/esm/fields/index.js.map +0 -1
  128. package/esm/fields/json-field.d.ts +0 -14
  129. package/esm/fields/json-field.js +0 -17
  130. package/esm/fields/json-field.js.map +0 -1
  131. package/esm/fields/number-field.d.ts +0 -32
  132. package/esm/fields/number-field.js +0 -28
  133. package/esm/fields/number-field.js.map +0 -1
  134. package/esm/fields/password-field.d.ts +0 -21
  135. package/esm/fields/password-field.js +0 -71
  136. package/esm/fields/password-field.js.map +0 -1
  137. package/esm/fields/radio-field.d.ts +0 -14
  138. package/esm/fields/radio-field.js +0 -49
  139. package/esm/fields/radio-field.js.map +0 -1
  140. package/esm/fields/relation-field.d.ts +0 -20
  141. package/esm/fields/relation-field.js +0 -27
  142. package/esm/fields/relation-field.js.map +0 -1
  143. package/esm/fields/sort-field.d.ts +0 -16
  144. package/esm/fields/sort-field.js +0 -90
  145. package/esm/fields/sort-field.js.map +0 -1
  146. package/esm/fields/string-field.d.ts +0 -8
  147. package/esm/fields/string-field.js +0 -8
  148. package/esm/fields/string-field.js.map +0 -1
  149. package/esm/fields/text-field.d.ts +0 -8
  150. package/esm/fields/text-field.js +0 -8
  151. package/esm/fields/text-field.js.map +0 -1
  152. package/esm/fields/time-field.d.ts +0 -8
  153. package/esm/fields/time-field.js +0 -8
  154. package/esm/fields/time-field.js.map +0 -1
  155. package/esm/fields/uid-field.d.ts +0 -10
  156. package/esm/fields/uid-field.js +0 -27
  157. package/esm/fields/uid-field.js.map +0 -1
  158. package/esm/fields/virtual-field.d.ts +0 -8
  159. package/esm/fields/virtual-field.js +0 -8
  160. package/esm/fields/virtual-field.js.map +0 -1
  161. package/esm/filter-parser.d.ts +0 -27
  162. package/esm/filter-parser.js +0 -185
  163. package/esm/filter-parser.js.map +0 -1
  164. package/esm/index.d.ts +0 -15
  165. package/esm/index.js +0 -16
  166. package/esm/index.js.map +0 -1
  167. package/esm/magic-attribute-model.d.ts +0 -7
  168. package/esm/magic-attribute-model.js +0 -70
  169. package/esm/magic-attribute-model.js.map +0 -1
  170. package/esm/mock-database.d.ts +0 -22
  171. package/esm/mock-database.js +0 -34
  172. package/esm/mock-database.js.map +0 -1
  173. package/esm/model-hook.d.ts +0 -12
  174. package/esm/model-hook.js +0 -61
  175. package/esm/model-hook.js.map +0 -1
  176. package/esm/model.d.ts +0 -15
  177. package/esm/model.js +0 -80
  178. package/esm/model.js.map +0 -1
  179. package/esm/operators/array.d.ts +0 -26
  180. package/esm/operators/array.js +0 -105
  181. package/esm/operators/array.js.map +0 -1
  182. package/esm/operators/association.d.ts +0 -10
  183. package/esm/operators/association.js +0 -14
  184. package/esm/operators/association.js.map +0 -1
  185. package/esm/operators/date.d.ts +0 -34
  186. package/esm/operators/date.js +0 -35
  187. package/esm/operators/date.js.map +0 -1
  188. package/esm/operators/empty.d.ts +0 -28
  189. package/esm/operators/empty.js +0 -58
  190. package/esm/operators/empty.js.map +0 -1
  191. package/esm/operators/index.d.ts +0 -2
  192. package/esm/operators/index.js +0 -2
  193. package/esm/operators/index.js.map +0 -1
  194. package/esm/operators/ne.js +0 -12
  195. package/esm/operators/ne.js.map +0 -1
  196. package/esm/operators/string.d.ts +0 -21
  197. package/esm/operators/string.js +0 -35
  198. package/esm/operators/string.js.map +0 -1
  199. package/esm/operators/utils.d.ts +0 -4
  200. package/esm/operators/utils.js +0 -11
  201. package/esm/operators/utils.js.map +0 -1
  202. package/esm/options-parser.d.ts +0 -31
  203. package/esm/options-parser.js +0 -225
  204. package/esm/options-parser.js.map +0 -1
  205. package/esm/playground.d.ts +0 -1
  206. package/esm/playground.js +0 -53
  207. package/esm/playground.js.map +0 -1
  208. package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
  209. package/esm/relation-repository/belongs-to-many-repository.js +0 -199
  210. package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
  211. package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
  212. package/esm/relation-repository/belongs-to-repository.js +0 -4
  213. package/esm/relation-repository/belongs-to-repository.js.map +0 -1
  214. package/esm/relation-repository/hasmany-repository.d.ts +0 -23
  215. package/esm/relation-repository/hasmany-repository.js +0 -125
  216. package/esm/relation-repository/hasmany-repository.js.map +0 -1
  217. package/esm/relation-repository/hasone-repository.d.ts +0 -17
  218. package/esm/relation-repository/hasone-repository.js +0 -4
  219. package/esm/relation-repository/hasone-repository.js.map +0 -1
  220. package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
  221. package/esm/relation-repository/multiple-relation-repository.js +0 -149
  222. package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
  223. package/esm/relation-repository/relation-repository.d.ts +0 -32
  224. package/esm/relation-repository/relation-repository.js +0 -93
  225. package/esm/relation-repository/relation-repository.js.map +0 -1
  226. package/esm/relation-repository/single-relation-repository.d.ts +0 -23
  227. package/esm/relation-repository/single-relation-repository.js +0 -96
  228. package/esm/relation-repository/single-relation-repository.js.map +0 -1
  229. package/esm/relation-repository/types.d.ts +0 -7
  230. package/esm/relation-repository/types.js +0 -2
  231. package/esm/relation-repository/types.js.map +0 -1
  232. package/esm/repository.d.ts +0 -165
  233. package/esm/repository.js +0 -276
  234. package/esm/repository.js.map +0 -1
  235. package/esm/transaction-decorator.d.ts +0 -1
  236. package/esm/transaction-decorator.js +0 -63
  237. package/esm/transaction-decorator.js.map +0 -1
  238. package/esm/update-associations.d.ts +0 -60
  239. package/esm/update-associations.js +0 -362
  240. package/esm/update-associations.js.map +0 -1
  241. package/esm/update-guard.d.ts +0 -26
  242. package/esm/update-guard.js +0 -122
  243. package/esm/update-guard.js.map +0 -1
  244. package/lib/collection-importer.js.map +0 -1
  245. package/lib/collection.js.map +0 -1
  246. package/lib/database.js.map +0 -1
  247. package/lib/fields/array-field.js.map +0 -1
  248. package/lib/fields/belongs-to-field.js.map +0 -1
  249. package/lib/fields/belongs-to-many-field.js.map +0 -1
  250. package/lib/fields/boolean-field.js.map +0 -1
  251. package/lib/fields/context-field.js.map +0 -1
  252. package/lib/fields/date-field.js.map +0 -1
  253. package/lib/fields/field.js.map +0 -1
  254. package/lib/fields/has-inverse-field.js.map +0 -1
  255. package/lib/fields/has-many-field.js.map +0 -1
  256. package/lib/fields/has-one-field.js.map +0 -1
  257. package/lib/fields/index.js.map +0 -1
  258. package/lib/fields/json-field.js.map +0 -1
  259. package/lib/fields/number-field.js.map +0 -1
  260. package/lib/fields/password-field.js.map +0 -1
  261. package/lib/fields/radio-field.js.map +0 -1
  262. package/lib/fields/relation-field.js.map +0 -1
  263. package/lib/fields/sort-field.js.map +0 -1
  264. package/lib/fields/string-field.js.map +0 -1
  265. package/lib/fields/text-field.js.map +0 -1
  266. package/lib/fields/time-field.js.map +0 -1
  267. package/lib/fields/uid-field.js.map +0 -1
  268. package/lib/fields/virtual-field.js.map +0 -1
  269. package/lib/filter-parser.js.map +0 -1
  270. package/lib/index.js.map +0 -1
  271. package/lib/magic-attribute-model.js.map +0 -1
  272. package/lib/mock-database.js.map +0 -1
  273. package/lib/model-hook.js.map +0 -1
  274. package/lib/model.js.map +0 -1
  275. package/lib/operators/array.js.map +0 -1
  276. package/lib/operators/association.js.map +0 -1
  277. package/lib/operators/date.js.map +0 -1
  278. package/lib/operators/empty.js.map +0 -1
  279. package/lib/operators/index.js.map +0 -1
  280. package/lib/operators/ne.js.map +0 -1
  281. package/lib/operators/string.js.map +0 -1
  282. package/lib/operators/utils.js.map +0 -1
  283. package/lib/options-parser.js.map +0 -1
  284. package/lib/playground.js.map +0 -1
  285. package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
  286. package/lib/relation-repository/belongs-to-repository.js.map +0 -1
  287. package/lib/relation-repository/hasmany-repository.js.map +0 -1
  288. package/lib/relation-repository/hasone-repository.js.map +0 -1
  289. package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
  290. package/lib/relation-repository/relation-repository.js.map +0 -1
  291. package/lib/relation-repository/single-relation-repository.js.map +0 -1
  292. package/lib/relation-repository/types.js.map +0 -1
  293. package/lib/repository.js.map +0 -1
  294. package/lib/transaction-decorator.js.map +0 -1
  295. package/lib/update-associations.js.map +0 -1
  296. package/lib/update-guard.js.map +0 -1
  297. package/tsconfig.build.json +0 -9
  298. package/tsconfig.json +0 -5
@@ -0,0 +1,9 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field, FieldContext } from './field';
3
+ export declare class UuidField extends Field {
4
+ constructor(options?: any, context?: FieldContext);
5
+ get dataType(): DataTypes.AbstractDataTypeConstructor;
6
+ }
7
+ export interface UUIDFieldOptions extends BaseColumnFieldOptions {
8
+ type: 'uuid';
9
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UuidField = void 0;
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
+ 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;