@nocobase/database 0.9.1-alpha.2 → 0.9.2-alpha.2

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 (168) hide show
  1. package/lib/collection-group-manager.d.ts +13 -0
  2. package/lib/collection-group-manager.js +91 -0
  3. package/lib/collection-importer.js +0 -24
  4. package/lib/collection.d.ts +24 -3
  5. package/lib/collection.js +176 -236
  6. package/lib/database-utils/index.js +3 -15
  7. package/lib/database.d.ts +3 -0
  8. package/lib/database.js +160 -298
  9. package/lib/decorators/must-have-filter-decorator.js +0 -7
  10. package/lib/decorators/transaction-decorator.js +5 -18
  11. package/lib/errors/identifier-error.js +0 -3
  12. package/lib/features/ReferencesMap.js +1 -14
  13. package/lib/features/referential-integrity-check.js +7 -21
  14. package/lib/field-repository/array-field-repository.js +5 -45
  15. package/lib/fields/array-field.js +0 -13
  16. package/lib/fields/belongs-to-field.js +24 -50
  17. package/lib/fields/belongs-to-many-field.js +23 -47
  18. package/lib/fields/boolean-field.js +0 -7
  19. package/lib/fields/context-field.js +2 -23
  20. package/lib/fields/date-field.d.ts +4 -0
  21. package/lib/fields/date-field.js +15 -7
  22. package/lib/fields/field.js +32 -85
  23. package/lib/fields/has-many-field.js +16 -49
  24. package/lib/fields/has-one-field.js +18 -52
  25. package/lib/fields/index.js +0 -44
  26. package/lib/fields/json-field.js +0 -12
  27. package/lib/fields/number-field.js +0 -23
  28. package/lib/fields/password-field.js +8 -35
  29. package/lib/fields/radio-field.js +0 -18
  30. package/lib/fields/relation-field.js +4 -16
  31. package/lib/fields/set-field.js +0 -8
  32. package/lib/fields/sort-field.js +84 -73
  33. package/lib/fields/string-field.js +0 -7
  34. package/lib/fields/text-field.js +0 -7
  35. package/lib/fields/time-field.js +0 -7
  36. package/lib/fields/uid-field.js +4 -22
  37. package/lib/fields/uuid-field.js +3 -12
  38. package/lib/fields/virtual-field.js +0 -7
  39. package/lib/filter-match.js +7 -22
  40. package/lib/filter-parser.js +37 -101
  41. package/lib/index.d.ts +3 -0
  42. package/lib/index.js +36 -42
  43. package/lib/inherited-collection.js +15 -62
  44. package/lib/inherited-map.js +7 -48
  45. package/lib/listeners/adjacency-list.d.ts +3 -0
  46. package/lib/listeners/adjacency-list.js +91 -0
  47. package/lib/listeners/index.d.ts +2 -0
  48. package/lib/listeners/index.js +12 -0
  49. package/lib/magic-attribute-model.js +58 -114
  50. package/lib/migration.js +7 -28
  51. package/lib/mock-database.d.ts +4 -4
  52. package/lib/mock-database.js +15 -18
  53. package/lib/model-hook.js +4 -35
  54. package/lib/model.js +12 -54
  55. package/lib/operators/array.js +2 -32
  56. package/lib/operators/association.js +0 -6
  57. package/lib/operators/boolean.js +0 -6
  58. package/lib/operators/child-collection.d.ts +2 -0
  59. package/lib/operators/child-collection.js +32 -0
  60. package/lib/operators/date.js +123 -60
  61. package/lib/operators/empty.js +3 -32
  62. package/lib/operators/eq.d.ts +2 -0
  63. package/lib/operators/eq.js +26 -0
  64. package/lib/operators/index.js +4 -7
  65. package/lib/operators/ne.js +5 -5
  66. package/lib/operators/notIn.js +0 -5
  67. package/lib/operators/string.js +0 -11
  68. package/lib/operators/utils.js +0 -6
  69. package/lib/options-parser.d.ts +1 -1
  70. package/lib/options-parser.js +47 -107
  71. package/lib/playground.js +0 -4
  72. package/lib/query-interface/mysql-query-interface.d.ts +11 -0
  73. package/lib/query-interface/mysql-query-interface.js +59 -10
  74. package/lib/query-interface/postgres-query-interface.d.ts +8 -0
  75. package/lib/query-interface/postgres-query-interface.js +70 -12
  76. package/lib/query-interface/query-interface-builder.js +0 -5
  77. package/lib/query-interface/query-interface.d.ts +12 -0
  78. package/lib/query-interface/query-interface.js +33 -3
  79. package/lib/query-interface/sqlite-query-interface.d.ts +11 -0
  80. package/lib/query-interface/sqlite-query-interface.js +61 -10
  81. package/lib/relation-repository/belongs-to-many-repository.js +21 -78
  82. package/lib/relation-repository/belongs-to-repository.js +0 -3
  83. package/lib/relation-repository/hasmany-repository.js +8 -44
  84. package/lib/relation-repository/hasone-repository.js +0 -3
  85. package/lib/relation-repository/multiple-relation-repository.js +14 -68
  86. package/lib/relation-repository/relation-repository.js +5 -42
  87. package/lib/relation-repository/single-relation-repository.js +5 -43
  88. package/lib/repository.d.ts +1 -0
  89. package/lib/repository.js +36 -182
  90. package/lib/sql-parser/index.js +10527 -0
  91. package/lib/sql-parser/sql.pegjs +1297 -0
  92. package/lib/sync-runner.js +19 -54
  93. package/lib/update-associations.js +58 -157
  94. package/lib/update-guard.js +10 -49
  95. package/lib/utils.js +6 -54
  96. package/lib/value-parsers/array-value-parser.js +3 -21
  97. package/lib/value-parsers/base-value-parser.js +0 -13
  98. package/lib/value-parsers/boolean-value-parser.js +4 -10
  99. package/lib/value-parsers/date-value-parser.js +0 -23
  100. package/lib/value-parsers/index.js +0 -10
  101. package/lib/value-parsers/json-value-parser.js +0 -7
  102. package/lib/value-parsers/number-value-parser.js +0 -9
  103. package/lib/value-parsers/string-value-parser.js +3 -20
  104. package/lib/value-parsers/to-many-value-parser.js +1 -42
  105. package/lib/value-parsers/to-one-value-parser.js +0 -14
  106. package/lib/view/field-type-map.d.ts +47 -0
  107. package/lib/view/field-type-map.js +56 -0
  108. package/lib/view/view-inference.d.ts +31 -0
  109. package/lib/view/view-inference.js +92 -0
  110. package/lib/view-collection.d.ts +6 -0
  111. package/lib/view-collection.js +24 -0
  112. package/package.json +4 -4
  113. package/src/__tests__/collection.test.ts +44 -0
  114. package/src/__tests__/fields/date.test.ts +75 -0
  115. package/src/__tests__/fields/sort-field.test.ts +100 -0
  116. package/src/__tests__/filter.test.ts +3 -3
  117. package/src/__tests__/group.test.ts +50 -0
  118. package/src/__tests__/inhertits/collection-inherits.test.ts +114 -0
  119. package/src/__tests__/operator/date-operator.test.ts +244 -98
  120. package/src/__tests__/operator/eq.test.ts +76 -0
  121. package/src/__tests__/operator/ne.test.ts +19 -1
  122. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +82 -0
  123. package/src/__tests__/repository/find.test.ts +33 -0
  124. package/src/__tests__/repository.test.ts +88 -0
  125. package/src/__tests__/sql-parser.test.ts +13 -0
  126. package/src/__tests__/tree.test.ts +217 -0
  127. package/src/__tests__/view/list-view.test.ts +34 -0
  128. package/src/__tests__/view/view-collection.test.ts +199 -0
  129. package/src/__tests__/view/view-inference.test.ts +145 -0
  130. package/src/__tests__/view/view-repository.test.ts +67 -0
  131. package/src/collection-group-manager.ts +94 -0
  132. package/src/collection.ts +108 -14
  133. package/src/database-utils/index.ts +1 -0
  134. package/src/database.ts +79 -12
  135. package/src/features/ReferencesMap.ts +3 -2
  136. package/src/fields/belongs-to-many-field.ts +15 -2
  137. package/src/fields/date-field.ts +18 -0
  138. package/src/fields/field.ts +16 -8
  139. package/src/fields/json-field.ts +1 -0
  140. package/src/fields/sort-field.ts +90 -29
  141. package/src/filter-parser.ts +1 -0
  142. package/src/index.ts +3 -1
  143. package/src/listeners/adjacency-list.ts +60 -0
  144. package/src/listeners/index.ts +7 -0
  145. package/src/mock-database.ts +14 -2
  146. package/src/model.ts +4 -0
  147. package/src/operators/child-collection.ts +24 -0
  148. package/src/operators/date.ts +108 -24
  149. package/src/operators/eq.ts +14 -0
  150. package/src/operators/index.ts +2 -0
  151. package/src/operators/ne.ts +12 -7
  152. package/src/options-parser.ts +25 -11
  153. package/src/query-interface/mysql-query-interface.ts +53 -1
  154. package/src/query-interface/postgres-query-interface.ts +84 -3
  155. package/src/query-interface/query-interface.ts +31 -0
  156. package/src/query-interface/sqlite-query-interface.ts +62 -1
  157. package/src/relation-repository/belongs-to-many-repository.ts +20 -1
  158. package/src/relation-repository/hasmany-repository.ts +5 -3
  159. package/src/relation-repository/multiple-relation-repository.ts +9 -1
  160. package/src/repository.ts +6 -13
  161. package/src/sql-parser/index.js +10698 -0
  162. package/src/sql-parser/readme.md +2 -0
  163. package/src/sql-parser/sql.pegjs +1297 -0
  164. package/src/sync-runner.ts +13 -15
  165. package/src/update-associations.ts +26 -22
  166. package/src/view/field-type-map.ts +56 -0
  167. package/src/view/view-inference.ts +106 -0
  168. package/src/view-collection.ts +21 -0
package/lib/repository.js CHANGED
@@ -4,89 +4,57 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Repository = void 0;
7
-
8
7
  function _lodash() {
9
8
  const data = _interopRequireWildcard(require("lodash"));
10
-
11
9
  _lodash = function _lodash() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _sequelize() {
19
15
  const data = require("sequelize");
20
-
21
16
  _sequelize = function _sequelize() {
22
17
  return data;
23
18
  };
24
-
25
19
  return data;
26
20
  }
27
-
28
21
  var _mustHaveFilterDecorator = _interopRequireDefault(require("./decorators/must-have-filter-decorator"));
29
-
30
22
  var _transactionDecorator = require("./decorators/transaction-decorator");
31
-
32
23
  var _arrayFieldRepository = require("./field-repository/array-field-repository");
33
-
34
24
  var _fields = require("./fields");
35
-
36
25
  var _filterParser = _interopRequireDefault(require("./filter-parser"));
37
-
38
26
  var _optionsParser = require("./options-parser");
39
-
40
27
  var _belongsToManyRepository = require("./relation-repository/belongs-to-many-repository");
41
-
42
28
  var _belongsToRepository = require("./relation-repository/belongs-to-repository");
43
-
44
29
  var _hasmanyRepository = require("./relation-repository/hasmany-repository");
45
-
46
30
  var _hasoneRepository = require("./relation-repository/hasone-repository");
47
-
48
31
  var _updateAssociations = require("./update-associations");
49
-
50
32
  var _updateGuard = require("./update-guard");
51
-
52
33
  var _utils = require("./utils");
53
-
54
34
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
55
-
56
35
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
57
-
58
36
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
59
-
60
37
  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; } } }; }
61
-
62
38
  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); }
63
-
64
39
  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; }
65
-
66
40
  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; }
67
-
68
41
  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; }
69
-
70
- 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; }
71
-
42
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
43
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
44
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
72
45
  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); } }
73
-
74
46
  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); }); }; }
75
-
76
47
  var __decorate = void 0 && (void 0).__decorate || function (decorators, target, key, desc) {
77
48
  var c = arguments.length,
78
- r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
79
- d;
49
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
50
+ d;
80
51
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
81
52
  return c > 3 && r && Object.defineProperty(target, key, r), r;
82
53
  };
83
-
84
54
  const debug = require('debug')('noco-database');
85
-
86
55
  const transaction = (0, _transactionDecorator.transactionWrapperBuilder)(function () {
87
56
  return this.collection.model.sequelize.transaction();
88
57
  });
89
-
90
58
  class RelationRepositoryBuilder {
91
59
  constructor(collection, associationName) {
92
60
  this.collection = void 0;
@@ -102,10 +70,8 @@ class RelationRepositoryBuilder {
102
70
  this.collection = collection;
103
71
  this.associationName = associationName;
104
72
  this.association = this.collection.model.associations[this.associationName];
105
-
106
73
  if (!this.association) {
107
74
  const field = collection.getField(associationName);
108
-
109
75
  if (field && field instanceof _fields.ArrayField) {
110
76
  this.association = {
111
77
  associationType: 'ArrayField'
@@ -113,22 +79,17 @@ class RelationRepositoryBuilder {
113
79
  }
114
80
  }
115
81
  }
116
-
117
82
  builder() {
118
83
  return this.builderMap;
119
84
  }
120
-
121
85
  of(id) {
122
86
  if (!this.association) {
123
87
  return;
124
88
  }
125
-
126
89
  const klass = this.builder()[this.association.associationType];
127
90
  return new klass(this.collection, this.associationName, id);
128
91
  }
129
-
130
92
  }
131
-
132
93
  class Repository {
133
94
  constructor(collection) {
134
95
  this.database = void 0;
@@ -141,21 +102,15 @@ class Repository {
141
102
  /**
142
103
  * return count by filter
143
104
  */
144
-
145
-
146
105
  count(countOptions) {
147
106
  var _this = this;
148
-
149
107
  return _asyncToGenerator(function* () {
150
108
  var _queryOptions$include;
151
-
152
109
  let options = countOptions ? _lodash().default.clone(countOptions) : {};
153
110
  const transaction = yield _this.getTransaction(options);
154
-
155
111
  if (countOptions === null || countOptions === void 0 ? void 0 : countOptions.filter) {
156
112
  options = _objectSpread(_objectSpread({}, options), _this.parseFilter(countOptions.filter, countOptions));
157
113
  }
158
-
159
114
  if (countOptions === null || countOptions === void 0 ? void 0 : countOptions.filterByTk) {
160
115
  options['where'] = {
161
116
  [_sequelize().Op.and]: [options['where'] || {}, {
@@ -163,19 +118,16 @@ class Repository {
163
118
  }]
164
119
  };
165
120
  }
166
-
167
121
  const queryOptions = _objectSpread(_objectSpread({}, options), {}, {
168
122
  distinct: Boolean(_this.collection.model.primaryKeyAttribute)
169
123
  });
170
-
171
124
  if (((_queryOptions$include = queryOptions.include) === null || _queryOptions$include === void 0 ? void 0 : _queryOptions$include.length) === 0) {
172
125
  delete queryOptions.include;
173
126
  }
174
-
175
127
  const count = yield _this.collection.model.count(_objectSpread(_objectSpread({}, queryOptions), {}, {
176
128
  transaction
177
- })); // @ts-ignore
178
-
129
+ }));
130
+ // @ts-ignore
179
131
  return count;
180
132
  })();
181
133
  }
@@ -183,21 +135,15 @@ class Repository {
183
135
  * find
184
136
  * @param options
185
137
  */
186
-
187
-
188
138
  find(options) {
189
139
  var _this2 = this;
190
-
191
140
  return _asyncToGenerator(function* () {
192
141
  const model = _this2.collection.model;
193
142
  const transaction = yield _this2.getTransaction(options);
194
-
195
143
  const opts = _objectSpread({
196
144
  subQuery: false
197
145
  }, _this2.buildQueryOptions(options));
198
-
199
146
  let rows;
200
-
201
147
  if (opts.include && opts.include.length > 0) {
202
148
  // @ts-ignore
203
149
  const primaryKeyField = model.primaryKeyField || model.primaryKeyAttribute;
@@ -208,7 +154,6 @@ class Repository {
208
154
  transaction,
209
155
  include: opts.include.filter(include => {
210
156
  var _JSON$stringify;
211
-
212
157
  return Object.keys(include.where || {}).length > 0 || ((_JSON$stringify = JSON.stringify(opts === null || opts === void 0 ? void 0 : opts.filter)) === null || _JSON$stringify === void 0 ? void 0 : _JSON$stringify.includes(include.association));
213
158
  })
214
159
  }))).map(row => {
@@ -217,11 +162,9 @@ class Repository {
217
162
  pk: row.get(primaryKeyField)
218
163
  };
219
164
  });
220
-
221
165
  if (ids.length == 0) {
222
166
  return [];
223
167
  }
224
-
225
168
  const templateModel = yield model.findOne(_objectSpread(_objectSpread({}, opts), {}, {
226
169
  includeIgnoreAttributes: false,
227
170
  attributes: [primaryKeyField],
@@ -242,7 +185,6 @@ class Repository {
242
185
  where,
243
186
  transaction
244
187
  });
245
-
246
188
  return model.findAll(options).then(rows => {
247
189
  return {
248
190
  rows,
@@ -257,28 +199,11 @@ class Repository {
257
199
  transaction
258
200
  }));
259
201
  }
260
-
261
- if (_this2.collection.isParent()) {
262
- var _iterator = _createForOfIteratorHelper(rows),
263
- _step;
264
-
265
- try {
266
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
267
- const row = _step.value;
268
-
269
- const rowCollectionName = _this2.database.tableNameCollectionMap.get(options.raw ? row['__tableName'] : row.get('__tableName')).name;
270
-
271
- options.raw ? row['__collection'] = rowCollectionName : row.set('__collection', rowCollectionName, {
272
- raw: true
273
- });
274
- }
275
- } catch (err) {
276
- _iterator.e(err);
277
- } finally {
278
- _iterator.f();
279
- }
280
- }
281
-
202
+ yield _this2.collection.db.emitAsync('afterRepositoryFind', {
203
+ findOptions: options,
204
+ dataCollection: _this2.collection,
205
+ data: rows
206
+ });
282
207
  return rows;
283
208
  })();
284
209
  }
@@ -286,11 +211,8 @@ class Repository {
286
211
  * find and count
287
212
  * @param options
288
213
  */
289
-
290
-
291
214
  findAndCount(options) {
292
215
  var _this3 = this;
293
-
294
216
  return _asyncToGenerator(function* () {
295
217
  const transaction = yield _this3.getTransaction(options);
296
218
  options = _objectSpread(_objectSpread({}, options), {}, {
@@ -305,8 +227,6 @@ class Repository {
305
227
  * Find By Id
306
228
  *
307
229
  */
308
-
309
-
310
230
  findById(id) {
311
231
  return this.collection.model.findByPk(id);
312
232
  }
@@ -315,11 +235,8 @@ class Repository {
315
235
  *
316
236
  * @param options
317
237
  */
318
-
319
-
320
238
  findOne(options) {
321
239
  var _this4 = this;
322
-
323
240
  return _asyncToGenerator(function* () {
324
241
  const transaction = yield _this4.getTransaction(options);
325
242
  const rows = yield _this4.find(_objectSpread(_objectSpread({}, options), {}, {
@@ -335,38 +252,29 @@ class Repository {
335
252
  * @param values
336
253
  * @param options
337
254
  */
338
-
339
-
340
255
  create(options) {
341
256
  var _this5 = this;
342
-
343
257
  return _asyncToGenerator(function* () {
344
258
  if (Array.isArray(options.values)) {
345
259
  return _this5.createMany(_objectSpread(_objectSpread({}, options), {}, {
346
260
  records: options.values
347
261
  }));
348
262
  }
349
-
350
263
  const transaction = yield _this5.getTransaction(options);
351
-
352
264
  const guard = _updateGuard.UpdateGuard.fromOptions(_this5.model, _objectSpread(_objectSpread({}, options), {}, {
353
265
  action: 'create',
354
266
  underscored: _this5.collection.options.underscored
355
267
  }));
356
-
357
268
  const values = guard.sanitize(options.values || {});
358
269
  const instance = yield _this5.model.create(values, _objectSpread(_objectSpread({}, options), {}, {
359
270
  transaction
360
271
  }));
361
-
362
272
  if (!instance) {
363
273
  return;
364
274
  }
365
-
366
275
  yield (0, _updateAssociations.updateAssociations)(instance, values, _objectSpread(_objectSpread({}, options), {}, {
367
276
  transaction
368
277
  }));
369
-
370
278
  if (options.hooks !== false) {
371
279
  yield _this5.database.emitAsync(`${_this5.collection.name}.afterCreateWithAssociations`, instance, _objectSpread(_objectSpread({}, options), {}, {
372
280
  transaction
@@ -376,7 +284,6 @@ class Repository {
376
284
  }));
377
285
  instance.clearChangedWithAssociations();
378
286
  }
379
-
380
287
  return instance;
381
288
  })();
382
289
  }
@@ -386,22 +293,17 @@ class Repository {
386
293
  * @param records
387
294
  * @param options
388
295
  */
389
-
390
-
391
296
  createMany(options) {
392
297
  var _this6 = this;
393
-
394
298
  return _asyncToGenerator(function* () {
395
299
  const transaction = yield _this6.getTransaction(options);
396
300
  const records = options.records;
397
301
  const instances = [];
398
-
399
- var _iterator2 = _createForOfIteratorHelper(records),
400
- _step2;
401
-
302
+ var _iterator = _createForOfIteratorHelper(records),
303
+ _step;
402
304
  try {
403
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
404
- const values = _step2.value;
305
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
306
+ const values = _step.value;
405
307
  const instance = yield _this6.create({
406
308
  values,
407
309
  transaction
@@ -409,11 +311,10 @@ class Repository {
409
311
  instances.push(instance);
410
312
  }
411
313
  } catch (err) {
412
- _iterator2.e(err);
314
+ _iterator.e(err);
413
315
  } finally {
414
- _iterator2.f();
316
+ _iterator.f();
415
317
  }
416
-
417
318
  return instances;
418
319
  })();
419
320
  }
@@ -423,56 +324,44 @@ class Repository {
423
324
  * @param values
424
325
  * @param options
425
326
  */
426
-
427
-
428
327
  update(options) {
429
328
  var _this7 = this;
430
-
431
329
  return _asyncToGenerator(function* () {
432
330
  if (Array.isArray(options.values)) {
433
331
  return _this7.updateMany(_objectSpread(_objectSpread({}, options), {}, {
434
332
  records: options.values
435
333
  }));
436
334
  }
437
-
438
335
  const transaction = yield _this7.getTransaction(options);
439
-
440
336
  const guard = _updateGuard.UpdateGuard.fromOptions(_this7.model, _objectSpread(_objectSpread({}, options), {}, {
441
337
  underscored: _this7.collection.options.underscored
442
338
  }));
443
-
444
339
  const values = guard.sanitize(options.values);
445
-
446
340
  const queryOptions = _this7.buildQueryOptions(options);
447
-
448
341
  const instances = yield _this7.find(_objectSpread(_objectSpread({}, queryOptions), {}, {
449
342
  transaction
450
343
  }));
451
-
452
- var _iterator3 = _createForOfIteratorHelper(instances),
453
- _step3;
454
-
344
+ var _iterator2 = _createForOfIteratorHelper(instances),
345
+ _step2;
455
346
  try {
456
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
457
- const instance = _step3.value;
347
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
348
+ const instance = _step2.value;
458
349
  yield (0, _updateAssociations.updateModelByValues)(instance, values, _objectSpread(_objectSpread({}, options), {}, {
459
350
  sanitized: true,
460
351
  transaction
461
352
  }));
462
353
  }
463
354
  } catch (err) {
464
- _iterator3.e(err);
355
+ _iterator2.e(err);
465
356
  } finally {
466
- _iterator3.f();
357
+ _iterator2.f();
467
358
  }
468
-
469
359
  if (options.hooks !== false) {
470
- var _iterator4 = _createForOfIteratorHelper(instances),
471
- _step4;
472
-
360
+ var _iterator3 = _createForOfIteratorHelper(instances),
361
+ _step3;
473
362
  try {
474
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
475
- const instance = _step4.value;
363
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
364
+ const instance = _step3.value;
476
365
  yield _this7.database.emitAsync(`${_this7.collection.name}.afterUpdateWithAssociations`, instance, _objectSpread(_objectSpread({}, options), {}, {
477
366
  transaction
478
367
  }));
@@ -482,36 +371,29 @@ class Repository {
482
371
  instance.clearChangedWithAssociations();
483
372
  }
484
373
  } catch (err) {
485
- _iterator4.e(err);
374
+ _iterator3.e(err);
486
375
  } finally {
487
- _iterator4.f();
376
+ _iterator3.f();
488
377
  }
489
378
  }
490
-
491
379
  return instances;
492
380
  })();
493
381
  }
494
-
495
382
  updateMany(options) {
496
383
  var _this8 = this;
497
-
498
384
  return _asyncToGenerator(function* () {
499
385
  const transaction = yield _this8.getTransaction(options);
500
386
  const records = options.records;
501
387
  const instances = [];
502
-
503
- var _iterator5 = _createForOfIteratorHelper(records),
504
- _step5;
505
-
388
+ var _iterator4 = _createForOfIteratorHelper(records),
389
+ _step4;
506
390
  try {
507
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
508
- const values = _step5.value;
391
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
392
+ const values = _step4.value;
509
393
  const filterByTk = values[_this8.model.primaryKeyAttribute];
510
-
511
394
  if (!filterByTk) {
512
395
  throw new Error('filterByTk invalid');
513
396
  }
514
-
515
397
  const instance = yield _this8.update({
516
398
  values,
517
399
  filterByTk,
@@ -520,29 +402,23 @@ class Repository {
520
402
  instances.push(instance);
521
403
  }
522
404
  } catch (err) {
523
- _iterator5.e(err);
405
+ _iterator4.e(err);
524
406
  } finally {
525
- _iterator5.f();
407
+ _iterator4.f();
526
408
  }
527
-
528
409
  return instances;
529
410
  })();
530
411
  }
531
-
532
412
  destroy(options) {
533
413
  var _this9 = this;
534
-
535
414
  return _asyncToGenerator(function* () {
536
415
  const transaction = yield _this9.getTransaction(options);
537
416
  const modelFilterKey = _this9.collection.filterTargetKey;
538
417
  options = options;
539
-
540
418
  if (options['individualHooks'] === undefined) {
541
419
  options['individualHooks'] = true;
542
420
  }
543
-
544
421
  const filterByTk = options.filterByTk && !_lodash().default.isArray(options.filterByTk) ? [options.filterByTk] : options.filterByTk;
545
-
546
422
  if (_this9.collection.model.primaryKeyAttributes.length !== 1 && filterByTk && !_lodash().default.get(_this9.collection.options, 'filterTargetKey')) {
547
423
  if (_this9.collection.model.primaryKeyAttributes.length > 1) {
548
424
  throw new Error(`filterByTk is not supported for composite primary key`);
@@ -550,7 +426,6 @@ class Repository {
550
426
  throw new Error(`filterByTk is not supported for collection that has no primary key`);
551
427
  }
552
428
  }
553
-
554
429
  if (filterByTk && !options.filter) {
555
430
  return yield _this9.model.destroy(_objectSpread(_objectSpread({}, options), {}, {
556
431
  where: {
@@ -561,31 +436,25 @@ class Repository {
561
436
  transaction
562
437
  }));
563
438
  }
564
-
565
439
  if (options.filter) {
566
440
  if (_this9.collection.model.primaryKeyAttributes.length !== 1 && !_lodash().default.get(_this9.collection.options, 'filterTargetKey')) {
567
441
  const queryOptions = _objectSpread({}, _this9.buildQueryOptions(options));
568
-
569
442
  return yield _this9.model.destroy(_objectSpread(_objectSpread({}, queryOptions), {}, {
570
443
  transaction
571
444
  }));
572
445
  }
573
-
574
446
  let pks = (yield _this9.find({
575
447
  filter: options.filter,
576
448
  transaction
577
449
  })).map(instance => instance.get(modelFilterKey));
578
-
579
450
  if (filterByTk) {
580
451
  pks = _lodash().default.intersection(pks.map(i => `${i}`), filterByTk.map(i => `${i}`));
581
452
  }
582
-
583
453
  return yield _this9.destroy(_objectSpread(_objectSpread({}, _lodash().default.omit(options, 'filter')), {}, {
584
454
  filterByTk: pks,
585
455
  transaction
586
456
  }));
587
457
  }
588
-
589
458
  if (options.truncate) {
590
459
  return yield _this9.model.destroy(_objectSpread(_objectSpread({}, options), {}, {
591
460
  truncate: true,
@@ -597,12 +466,9 @@ class Repository {
597
466
  /**
598
467
  * @param association target association
599
468
  */
600
-
601
-
602
469
  relation(association) {
603
470
  return new RelationRepositoryBuilder(this.collection, association);
604
471
  }
605
-
606
472
  buildQueryOptions(options) {
607
473
  const parser = new _optionsParser.OptionsParser(options, {
608
474
  collection: this.collection
@@ -613,7 +479,6 @@ class Repository {
613
479
  where: {}
614
480
  }, options), params);
615
481
  }
616
-
617
482
  parseFilter(filter, options) {
618
483
  const parser = new _filterParser.default(filter, {
619
484
  collection: this.collection,
@@ -623,35 +488,24 @@ class Repository {
623
488
  });
624
489
  return parser.toSequelizeParams();
625
490
  }
626
-
627
491
  getTransaction(options, autoGen = false) {
628
492
  var _this10 = this;
629
-
630
493
  return _asyncToGenerator(function* () {
631
494
  if (_lodash().default.isPlainObject(options) && options.transaction) {
632
495
  return options.transaction;
633
496
  }
634
-
635
497
  if (autoGen) {
636
498
  return yield _this10.model.sequelize.transaction();
637
499
  }
638
-
639
500
  return null;
640
501
  })();
641
502
  }
642
-
643
503
  }
644
-
645
504
  exports.Repository = Repository;
646
-
647
505
  __decorate([transaction()], Repository.prototype, "create", null);
648
-
649
506
  __decorate([transaction()], Repository.prototype, "createMany", null);
650
-
651
507
  __decorate([transaction(), (0, _mustHaveFilterDecorator.default)()], Repository.prototype, "update", null);
652
-
653
508
  __decorate([transaction()], Repository.prototype, "updateMany", null);
654
-
655
509
  __decorate([transaction((args, transaction) => {
656
510
  return {
657
511
  filterByTk: args[0],