@nocobase/database 0.8.0-alpha.8 → 0.8.1-alpha.3
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.
- package/lib/collection.d.ts +7 -3
- package/lib/collection.js +126 -22
- package/lib/database.d.ts +13 -7
- package/lib/database.js +39 -8
- package/lib/decorators/must-have-filter-decorator.js +4 -0
- package/lib/decorators/transaction-decorator.js +1 -0
- package/lib/features/ReferencesMap.js +14 -9
- package/lib/field-repository/array-field-repository.d.ts +28 -0
- package/lib/field-repository/array-field-repository.js +208 -0
- package/lib/fields/array-field.d.ts +1 -1
- package/lib/fields/array-field.js +15 -11
- package/lib/fields/belongs-to-field.d.ts +9 -1
- package/lib/fields/belongs-to-field.js +21 -7
- package/lib/fields/belongs-to-many-field.d.ts +4 -0
- package/lib/fields/belongs-to-many-field.js +24 -0
- package/lib/fields/field.d.ts +3 -2
- package/lib/fields/field.js +19 -13
- package/lib/fields/has-many-field.d.ts +2 -1
- package/lib/fields/has-many-field.js +18 -10
- package/lib/fields/has-one-field.d.ts +1 -0
- package/lib/fields/has-one-field.js +22 -10
- package/lib/fields/index.d.ts +3 -3
- package/lib/fields/index.js +14 -34
- package/lib/fields/relation-field.d.ts +2 -1
- package/lib/fields/relation-field.js +16 -0
- package/lib/fields/set-field.d.ts +10 -0
- package/lib/fields/set-field.js +35 -0
- package/lib/fields/sort-field.d.ts +1 -1
- package/lib/fields/sort-field.js +1 -1
- package/lib/filter-match.d.ts +1 -0
- package/lib/filter-match.js +84 -0
- package/lib/filter-parser.d.ts +2 -2
- package/lib/index.d.ts +5 -1
- package/lib/index.js +56 -0
- package/lib/inherited-collection.d.ts +13 -0
- package/lib/inherited-collection.js +210 -0
- package/lib/inherited-map.d.ts +21 -0
- package/lib/inherited-map.js +203 -0
- package/lib/model-hook.d.ts +1 -1
- package/lib/model.d.ts +1 -0
- package/lib/model.js +47 -0
- package/lib/operators/array.d.ts +1 -25
- package/lib/operators/association.d.ts +1 -9
- package/lib/operators/boolean.d.ts +1 -12
- package/lib/operators/date.d.ts +1 -33
- package/lib/operators/empty.d.ts +2 -25
- package/lib/operators/ne.d.ts +1 -13
- package/lib/operators/notIn.d.ts +1 -9
- package/lib/options-parser.d.ts +3 -2
- package/lib/options-parser.js +16 -1
- package/lib/relation-repository/relation-repository.d.ts +2 -2
- package/lib/relation-repository/single-relation-repository.js +2 -2
- package/lib/repository.d.ts +18 -10
- package/lib/repository.js +172 -38
- package/lib/sync-runner.d.ts +4 -0
- package/lib/sync-runner.js +181 -0
- package/lib/types.d.ts +2 -2
- package/lib/update-associations.d.ts +1 -0
- package/lib/update-associations.js +21 -2
- package/lib/update-guard.d.ts +3 -3
- package/lib/utils.js +5 -0
- package/package.json +4 -4
- package/src/__tests__/bigint.test.ts +48 -0
- package/src/__tests__/collection.test.ts +48 -13
- package/src/__tests__/database.test.ts +10 -0
- package/src/__tests__/field-repository/array-field-repository.test.ts +94 -0
- package/src/__tests__/fields/set.test.ts +37 -0
- package/src/__tests__/filter-match.test.ts +52 -0
- package/src/__tests__/inhertits/collection-inherits-sync.test.ts +38 -0
- package/src/__tests__/inhertits/collection-inherits.test.ts +994 -0
- package/src/__tests__/inhertits/helper.ts +3 -0
- package/src/__tests__/inhertits/inherited-map.test.ts +27 -0
- package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +2 -0
- package/src/__tests__/relation-repository/has-many-repository.test.ts +1 -1
- package/src/__tests__/repository/destroy.test.ts +122 -1
- package/src/__tests__/repository/update-many.test.ts +57 -0
- package/src/__tests__/update-association-values.test.ts +232 -0
- package/src/__tests__/update-associations.test.ts +6 -1
- package/src/collection.ts +90 -8
- package/src/database.ts +53 -14
- package/src/decorators/must-have-filter-decorator.ts +4 -0
- package/src/decorators/transaction-decorator.ts +1 -0
- package/src/features/ReferencesMap.ts +20 -9
- package/src/features/referential-integrity-check.ts +1 -0
- package/src/field-repository/array-field-repository.ts +155 -0
- package/src/fields/array-field.ts +4 -4
- package/src/fields/belongs-to-field.ts +26 -10
- package/src/fields/belongs-to-many-field.ts +34 -0
- package/src/fields/field.ts +26 -13
- package/src/fields/has-many-field.ts +17 -9
- package/src/fields/has-one-field.ts +23 -9
- package/src/fields/index.ts +5 -5
- package/src/fields/relation-field.ts +16 -0
- package/src/fields/set-field.ts +25 -0
- package/src/fields/sort-field.ts +5 -4
- package/src/filter-match.ts +49 -0
- package/src/filter-parser.ts +2 -2
- package/src/index.ts +5 -2
- package/src/inherited-collection.ts +112 -0
- package/src/inherited-map.ts +97 -0
- package/src/model-hook.ts +2 -3
- package/src/model.ts +43 -3
- package/src/operators/array.ts +1 -1
- package/src/operators/association.ts +1 -1
- package/src/operators/boolean.ts +1 -1
- package/src/operators/date.ts +1 -1
- package/src/operators/empty.ts +1 -1
- package/src/operators/ne.ts +1 -1
- package/src/operators/notIn.ts +2 -1
- package/src/options-parser.ts +20 -4
- package/src/relation-repository/relation-repository.ts +2 -2
- package/src/relation-repository/single-relation-repository.ts +2 -2
- package/src/repository.ts +144 -30
- package/src/sync-runner.ts +162 -0
- package/src/types.ts +2 -2
- package/src/update-associations.ts +23 -7
- package/src/update-guard.ts +3 -3
- package/src/utils.ts +5 -1
- package/lib/fields/sequence-field.d.ts +0 -31
- package/lib/fields/sequence-field.js +0 -299
- package/src/__tests__/fields/sequence-field.test.ts +0 -455
- package/src/fields/sequence-field.ts +0 -200
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.InheritedCollection = void 0;
|
|
7
|
+
|
|
8
|
+
var _collection = require("./collection");
|
|
9
|
+
|
|
10
|
+
function _lodash() {
|
|
11
|
+
const data = _interopRequireDefault(require("lodash"));
|
|
12
|
+
|
|
13
|
+
_lodash = function _lodash() {
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
29
|
+
|
|
30
|
+
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."); }
|
|
31
|
+
|
|
32
|
+
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; }
|
|
33
|
+
|
|
34
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
35
|
+
|
|
36
|
+
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; } } }; }
|
|
37
|
+
|
|
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); }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
class InheritedCollection extends _collection.Collection {
|
|
43
|
+
constructor(options, context) {
|
|
44
|
+
if (!options.inherits) {
|
|
45
|
+
throw new Error('InheritedCollection must have inherits option');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
options.inherits = _lodash().default.castArray(options.inherits);
|
|
49
|
+
super(options, context);
|
|
50
|
+
this.parents = void 0;
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
this.bindParents();
|
|
54
|
+
} catch (err) {
|
|
55
|
+
if (err instanceof ParentCollectionNotFound) {
|
|
56
|
+
const listener = collection => {
|
|
57
|
+
if (options.inherits.includes(collection.name) && options.inherits.every(name => this.db.collections.has(name))) {
|
|
58
|
+
this.bindParents();
|
|
59
|
+
this.db.removeListener('afterDefineCollection', listener);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
this.db.addListener('afterDefineCollection', listener);
|
|
64
|
+
} else {
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
bindParents() {
|
|
71
|
+
this.setParents(this.options.inherits);
|
|
72
|
+
this.setParentFields();
|
|
73
|
+
this.setFields(this.options.fields, false);
|
|
74
|
+
this.db.inheritanceMap.setInheritance(this.name, this.options.inherits);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
setParents(inherits) {
|
|
78
|
+
this.parents = _lodash().default.castArray(inherits).map(name => {
|
|
79
|
+
const existCollection = this.db.collections.get(name);
|
|
80
|
+
|
|
81
|
+
if (!existCollection) {
|
|
82
|
+
throw new ParentCollectionNotFound(name);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return existCollection;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
setParentFields() {
|
|
90
|
+
var _iterator = _createForOfIteratorHelper(this.parentFields()),
|
|
91
|
+
_step;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
95
|
+
const _step$value = _slicedToArray(_step.value, 2),
|
|
96
|
+
name = _step$value[0],
|
|
97
|
+
fieldOptions = _step$value[1];
|
|
98
|
+
|
|
99
|
+
this.setField(name, _objectSpread(_objectSpread({}, fieldOptions), {}, {
|
|
100
|
+
inherit: true
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
} catch (err) {
|
|
104
|
+
_iterator.e(err);
|
|
105
|
+
} finally {
|
|
106
|
+
_iterator.f();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
getParents() {
|
|
111
|
+
return this.parents;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
parentFields() {
|
|
115
|
+
const fields = new Map();
|
|
116
|
+
|
|
117
|
+
var _iterator2 = _createForOfIteratorHelper(this.parents),
|
|
118
|
+
_step2;
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
122
|
+
const parent = _step2.value;
|
|
123
|
+
|
|
124
|
+
if (parent.isInherited()) {
|
|
125
|
+
var _iterator3 = _createForOfIteratorHelper(parent.parentFields()),
|
|
126
|
+
_step3;
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
130
|
+
const _step3$value = _slicedToArray(_step3.value, 2),
|
|
131
|
+
name = _step3$value[0],
|
|
132
|
+
field = _step3$value[1];
|
|
133
|
+
|
|
134
|
+
fields.set(name, field.options);
|
|
135
|
+
}
|
|
136
|
+
} catch (err) {
|
|
137
|
+
_iterator3.e(err);
|
|
138
|
+
} finally {
|
|
139
|
+
_iterator3.f();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const parentFields = parent.fields;
|
|
144
|
+
|
|
145
|
+
var _iterator4 = _createForOfIteratorHelper(parentFields),
|
|
146
|
+
_step4;
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
150
|
+
const _step4$value = _slicedToArray(_step4.value, 2),
|
|
151
|
+
name = _step4$value[0],
|
|
152
|
+
field = _step4$value[1];
|
|
153
|
+
|
|
154
|
+
fields.set(name, field.options);
|
|
155
|
+
}
|
|
156
|
+
} catch (err) {
|
|
157
|
+
_iterator4.e(err);
|
|
158
|
+
} finally {
|
|
159
|
+
_iterator4.f();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
} catch (err) {
|
|
163
|
+
_iterator2.e(err);
|
|
164
|
+
} finally {
|
|
165
|
+
_iterator2.f();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return fields;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
parentAttributes() {
|
|
172
|
+
const attributes = {};
|
|
173
|
+
|
|
174
|
+
var _iterator5 = _createForOfIteratorHelper(this.parents),
|
|
175
|
+
_step5;
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
179
|
+
const parent = _step5.value;
|
|
180
|
+
|
|
181
|
+
if (parent.isInherited()) {
|
|
182
|
+
Object.assign(attributes, parent.parentAttributes());
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const parentAttributes = parent.model.tableAttributes;
|
|
186
|
+
Object.assign(attributes, parentAttributes);
|
|
187
|
+
}
|
|
188
|
+
} catch (err) {
|
|
189
|
+
_iterator5.e(err);
|
|
190
|
+
} finally {
|
|
191
|
+
_iterator5.f();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return attributes;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
isInherited() {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
exports.InheritedCollection = InheritedCollection;
|
|
204
|
+
|
|
205
|
+
class ParentCollectionNotFound extends Error {
|
|
206
|
+
constructor(name) {
|
|
207
|
+
super(`parent collection ${name} not found`);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare class TableNode {
|
|
2
|
+
name: string;
|
|
3
|
+
parents: Set<TableNode>;
|
|
4
|
+
children: Set<TableNode>;
|
|
5
|
+
constructor(name: string);
|
|
6
|
+
}
|
|
7
|
+
export default class InheritanceMap {
|
|
8
|
+
nodes: Map<string, TableNode>;
|
|
9
|
+
removeNode(name: string): void;
|
|
10
|
+
getOrCreateNode(name: string): TableNode;
|
|
11
|
+
getNode(name: string): TableNode;
|
|
12
|
+
setInheritance(name: string, inherits: string | string[]): void;
|
|
13
|
+
isParentNode(name: string): boolean;
|
|
14
|
+
getChildren(name: string, options?: {
|
|
15
|
+
deep: boolean;
|
|
16
|
+
}): Set<string>;
|
|
17
|
+
getParents(name: string, options?: {
|
|
18
|
+
deep: boolean;
|
|
19
|
+
}): Set<string>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
function _lodash() {
|
|
9
|
+
const data = _interopRequireDefault(require("lodash"));
|
|
10
|
+
|
|
11
|
+
_lodash = function _lodash() {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
function _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; } } }; }
|
|
21
|
+
|
|
22
|
+
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); }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
class TableNode {
|
|
27
|
+
constructor(name) {
|
|
28
|
+
this.name = void 0;
|
|
29
|
+
this.parents = void 0;
|
|
30
|
+
this.children = void 0;
|
|
31
|
+
this.name = name;
|
|
32
|
+
this.parents = new Set();
|
|
33
|
+
this.children = new Set();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class InheritanceMap {
|
|
39
|
+
constructor() {
|
|
40
|
+
this.nodes = new Map();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
removeNode(name) {
|
|
44
|
+
const node = this.nodes.get(name);
|
|
45
|
+
if (!node) return;
|
|
46
|
+
|
|
47
|
+
var _iterator = _createForOfIteratorHelper(node.parents),
|
|
48
|
+
_step;
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
52
|
+
const parent = _step.value;
|
|
53
|
+
parent.children.delete(node);
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
_iterator.e(err);
|
|
57
|
+
} finally {
|
|
58
|
+
_iterator.f();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var _iterator2 = _createForOfIteratorHelper(node.children),
|
|
62
|
+
_step2;
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
66
|
+
const child = _step2.value;
|
|
67
|
+
child.parents.delete(node);
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
_iterator2.e(err);
|
|
71
|
+
} finally {
|
|
72
|
+
_iterator2.f();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.nodes.delete(name);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
getOrCreateNode(name) {
|
|
79
|
+
if (!this.nodes.has(name)) {
|
|
80
|
+
this.nodes.set(name, new TableNode(name));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return this.getNode(name);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
getNode(name) {
|
|
87
|
+
return this.nodes.get(name);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
setInheritance(name, inherits) {
|
|
91
|
+
const node = this.getOrCreateNode(name);
|
|
92
|
+
|
|
93
|
+
const parents = _lodash().default.castArray(inherits).map(name => this.getOrCreateNode(name));
|
|
94
|
+
|
|
95
|
+
node.parents = new Set(parents);
|
|
96
|
+
|
|
97
|
+
var _iterator3 = _createForOfIteratorHelper(parents),
|
|
98
|
+
_step3;
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
102
|
+
const parent = _step3.value;
|
|
103
|
+
parent.children.add(node);
|
|
104
|
+
}
|
|
105
|
+
} catch (err) {
|
|
106
|
+
_iterator3.e(err);
|
|
107
|
+
} finally {
|
|
108
|
+
_iterator3.f();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
isParentNode(name) {
|
|
113
|
+
const node = this.getNode(name);
|
|
114
|
+
return node && node.children.size > 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getChildren(name, options = {
|
|
118
|
+
deep: true
|
|
119
|
+
}) {
|
|
120
|
+
const results = new Set();
|
|
121
|
+
const node = this.getNode(name);
|
|
122
|
+
if (!node) return results;
|
|
123
|
+
|
|
124
|
+
var _iterator4 = _createForOfIteratorHelper(node.children),
|
|
125
|
+
_step4;
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
129
|
+
const child = _step4.value;
|
|
130
|
+
results.add(child.name);
|
|
131
|
+
|
|
132
|
+
if (!options.deep) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
var _iterator5 = _createForOfIteratorHelper(this.getChildren(child.name)),
|
|
137
|
+
_step5;
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
141
|
+
const grandchild = _step5.value;
|
|
142
|
+
results.add(grandchild);
|
|
143
|
+
}
|
|
144
|
+
} catch (err) {
|
|
145
|
+
_iterator5.e(err);
|
|
146
|
+
} finally {
|
|
147
|
+
_iterator5.f();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} catch (err) {
|
|
151
|
+
_iterator4.e(err);
|
|
152
|
+
} finally {
|
|
153
|
+
_iterator4.f();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return results;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
getParents(name, options = {
|
|
160
|
+
deep: true
|
|
161
|
+
}) {
|
|
162
|
+
const results = new Set();
|
|
163
|
+
const node = this.getNode(name);
|
|
164
|
+
if (!node) return results;
|
|
165
|
+
|
|
166
|
+
var _iterator6 = _createForOfIteratorHelper(node.parents),
|
|
167
|
+
_step6;
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
171
|
+
const parent = _step6.value;
|
|
172
|
+
results.add(parent.name);
|
|
173
|
+
|
|
174
|
+
if (!options.deep) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
var _iterator7 = _createForOfIteratorHelper(this.getParents(parent.name)),
|
|
179
|
+
_step7;
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
183
|
+
const grandparent = _step7.value;
|
|
184
|
+
results.add(grandparent);
|
|
185
|
+
}
|
|
186
|
+
} catch (err) {
|
|
187
|
+
_iterator7.e(err);
|
|
188
|
+
} finally {
|
|
189
|
+
_iterator7.f();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
} catch (err) {
|
|
193
|
+
_iterator6.e(err);
|
|
194
|
+
} finally {
|
|
195
|
+
_iterator6.f();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return results;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
exports.default = InheritanceMap;
|
package/lib/model-hook.d.ts
CHANGED
package/lib/model.d.ts
CHANGED
package/lib/model.js
CHANGED
|
@@ -25,8 +25,16 @@ function _sequelize() {
|
|
|
25
25
|
return data;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
var _syncRunner = require("./sync-runner");
|
|
29
|
+
|
|
28
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
31
|
|
|
32
|
+
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); } }
|
|
33
|
+
|
|
34
|
+
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); }); }; }
|
|
35
|
+
|
|
36
|
+
const _ = _lodash().default;
|
|
37
|
+
|
|
30
38
|
class Model extends _sequelize().Model {
|
|
31
39
|
constructor(...args) {
|
|
32
40
|
super(...args);
|
|
@@ -157,6 +165,45 @@ class Model extends _sequelize().Model {
|
|
|
157
165
|
return _lodash().default.orderBy(data, orderItems, orderDirections);
|
|
158
166
|
}
|
|
159
167
|
|
|
168
|
+
static sync(options) {
|
|
169
|
+
var _this = this;
|
|
170
|
+
|
|
171
|
+
return _asyncToGenerator(function* () {
|
|
172
|
+
const model = _this; // fix sequelize sync with model that not have any column
|
|
173
|
+
|
|
174
|
+
if (Object.keys(model.tableAttributes).length === 0) {
|
|
175
|
+
if (_this.database.inDialect('sqlite', 'mysql')) {
|
|
176
|
+
throw new Error(`Zero-column tables aren't supported in ${_this.database.sequelize.getDialect()}`);
|
|
177
|
+
} // @ts-ignore
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
const queryInterface = _this.sequelize.queryInterface;
|
|
181
|
+
|
|
182
|
+
if (!queryInterface.patched) {
|
|
183
|
+
const oldDescribeTable = queryInterface.describeTable;
|
|
184
|
+
queryInterface.describeTable = /*#__PURE__*/_asyncToGenerator(function* (...args) {
|
|
185
|
+
try {
|
|
186
|
+
return yield oldDescribeTable.call(this, ...args);
|
|
187
|
+
} catch (err) {
|
|
188
|
+
if (err.message.includes('No description found for')) {
|
|
189
|
+
return [];
|
|
190
|
+
} else {
|
|
191
|
+
throw err;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
queryInterface.patched = true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (_this.collection.isInherited()) {
|
|
200
|
+
return _syncRunner.SyncRunner.syncInheritModel(model, options);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return _sequelize().Model.sync.call(_this, options);
|
|
204
|
+
})();
|
|
205
|
+
}
|
|
206
|
+
|
|
160
207
|
}
|
|
161
208
|
|
|
162
209
|
exports.Model = Model;
|
package/lib/operators/array.d.ts
CHANGED
|
@@ -1,26 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const _default: {
|
|
3
|
-
$match(value: any, ctx: any): import("sequelize/types/lib/utils").Literal | {
|
|
4
|
-
[Op.contained]: any;
|
|
5
|
-
[Op.contains]: any;
|
|
6
|
-
[Op.eq]?: undefined;
|
|
7
|
-
} | {
|
|
8
|
-
[Op.eq]: import("sequelize/types/lib/utils").Literal;
|
|
9
|
-
[Op.contained]?: undefined;
|
|
10
|
-
[Op.contains]?: undefined;
|
|
11
|
-
};
|
|
12
|
-
$notMatch(value: any, ctx: any): import("sequelize/types/lib/utils").Literal | {
|
|
13
|
-
[Op.ne]: import("sequelize/types/lib/utils").Literal;
|
|
14
|
-
};
|
|
15
|
-
$anyOf(value: any, ctx: any): import("sequelize/types/lib/utils").Literal;
|
|
16
|
-
$noneOf(value: any, ctx: any): {
|
|
17
|
-
[Op.or]: any[];
|
|
18
|
-
};
|
|
19
|
-
$arrayEmpty(value: any, ctx: any): {
|
|
20
|
-
[Op.and]: import("sequelize/types/lib/utils").Literal[];
|
|
21
|
-
};
|
|
22
|
-
$arrayNotEmpty(value: any, ctx: any): {
|
|
23
|
-
[Op.and]: import("sequelize/types/lib/utils").Literal[];
|
|
24
|
-
};
|
|
25
|
-
};
|
|
1
|
+
declare const _default: Record<string, any>;
|
|
26
2
|
export default _default;
|
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const _default: {
|
|
3
|
-
$isFalsy(): {
|
|
4
|
-
[Op.or]: {
|
|
5
|
-
[Op.is]: any;
|
|
6
|
-
[Op.eq]: boolean;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
$isTruly(): {
|
|
10
|
-
[Op.eq]: boolean;
|
|
11
|
-
};
|
|
12
|
-
};
|
|
1
|
+
declare const _default: Record<string, any>;
|
|
13
2
|
export default _default;
|
package/lib/operators/date.d.ts
CHANGED
|
@@ -1,34 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const _default: {
|
|
3
|
-
$dateOn(value: any): {
|
|
4
|
-
[Op.and]: ({
|
|
5
|
-
[Op.gte]: Date;
|
|
6
|
-
[Op.lt]?: undefined;
|
|
7
|
-
} | {
|
|
8
|
-
[Op.lt]: Date;
|
|
9
|
-
[Op.gte]?: undefined;
|
|
10
|
-
})[];
|
|
11
|
-
};
|
|
12
|
-
$dateNotOn(value: any): {
|
|
13
|
-
[Op.or]: ({
|
|
14
|
-
[Op.lt]: Date;
|
|
15
|
-
[Op.gte]?: undefined;
|
|
16
|
-
} | {
|
|
17
|
-
[Op.gte]: Date;
|
|
18
|
-
[Op.lt]?: undefined;
|
|
19
|
-
})[];
|
|
20
|
-
};
|
|
21
|
-
$dateBefore(value: any): {
|
|
22
|
-
[Op.lt]: Date;
|
|
23
|
-
};
|
|
24
|
-
$dateNotBefore(value: any): {
|
|
25
|
-
[Op.gte]: Date;
|
|
26
|
-
};
|
|
27
|
-
$dateAfter(value: any): {
|
|
28
|
-
[Op.gte]: Date;
|
|
29
|
-
};
|
|
30
|
-
$dateNotAfter(value: any): {
|
|
31
|
-
[Op.lt]: Date;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
1
|
+
declare const _default: Record<string, any>;
|
|
34
2
|
export default _default;
|
package/lib/operators/empty.d.ts
CHANGED
|
@@ -1,28 +1,5 @@
|
|
|
1
|
-
import { Op } from 'sequelize';
|
|
2
1
|
declare const _default: {
|
|
3
|
-
$empty(_: any, ctx: any):
|
|
4
|
-
|
|
5
|
-
} | {
|
|
6
|
-
[Op.or]: {
|
|
7
|
-
[Op.is]: any;
|
|
8
|
-
[Op.eq]: string;
|
|
9
|
-
};
|
|
10
|
-
[Op.is]?: undefined;
|
|
11
|
-
} | {
|
|
12
|
-
[Op.is]: any;
|
|
13
|
-
[Op.or]?: undefined;
|
|
14
|
-
};
|
|
15
|
-
$notEmpty(_: any, ctx: any): {
|
|
16
|
-
[Op.and]: import("sequelize/types/lib/utils").Literal[];
|
|
17
|
-
} | {
|
|
18
|
-
[Op.and]: {
|
|
19
|
-
[Op.not]: any;
|
|
20
|
-
[Op.ne]: string;
|
|
21
|
-
};
|
|
22
|
-
[Op.not]?: undefined;
|
|
23
|
-
} | {
|
|
24
|
-
[Op.not]: any;
|
|
25
|
-
[Op.and]?: undefined;
|
|
26
|
-
};
|
|
2
|
+
$empty(_: any, ctx: any): any;
|
|
3
|
+
$notEmpty(_: any, ctx: any): any;
|
|
27
4
|
};
|
|
28
5
|
export default _default;
|
package/lib/operators/ne.d.ts
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const _default: {
|
|
3
|
-
$ne(val: any, ctx: any): {
|
|
4
|
-
[Op.ne]: any;
|
|
5
|
-
[Op.or]?: undefined;
|
|
6
|
-
} | {
|
|
7
|
-
[Op.or]: {
|
|
8
|
-
[Op.ne]: any;
|
|
9
|
-
[Op.is]: any;
|
|
10
|
-
};
|
|
11
|
-
[Op.ne]?: undefined;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
1
|
+
declare const _default: Record<string, any>;
|
|
14
2
|
export default _default;
|
package/lib/operators/notIn.d.ts
CHANGED
package/lib/options-parser.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ModelStatic } from 'sequelize';
|
|
2
2
|
import { Collection } from './collection';
|
|
3
3
|
import { Database } from './database';
|
|
4
4
|
import FilterParser from './filter-parser';
|
|
@@ -11,7 +11,7 @@ export declare class OptionsParser {
|
|
|
11
11
|
options: FindOptions;
|
|
12
12
|
database: Database;
|
|
13
13
|
collection: Collection;
|
|
14
|
-
model:
|
|
14
|
+
model: ModelStatic<any>;
|
|
15
15
|
filterParser: FilterParser;
|
|
16
16
|
context: OptionsParserContext;
|
|
17
17
|
constructor(options: FindOptions, context: OptionsParserContext);
|
|
@@ -24,6 +24,7 @@ export declare class OptionsParser {
|
|
|
24
24
|
* @protected
|
|
25
25
|
*/
|
|
26
26
|
protected parseSort(filterParams: any): any;
|
|
27
|
+
protected inheritFromSubQuery(): any;
|
|
27
28
|
protected parseFields(filterParams: any): any;
|
|
28
29
|
protected parseExcept(except: Except, filterParams: any): any;
|
|
29
30
|
protected parseAppends(appends: Appends, filterParams: any): any;
|