@nocobase/database 0.9.1-alpha.1 → 0.9.2-alpha.1
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-group-manager.d.ts +13 -0
- package/lib/collection-group-manager.js +91 -0
- package/lib/collection-importer.js +0 -24
- package/lib/collection.d.ts +26 -4
- package/lib/collection.js +190 -234
- package/lib/database-utils/index.js +3 -15
- package/lib/database.d.ts +9 -0
- package/lib/database.js +171 -299
- package/lib/decorators/must-have-filter-decorator.js +0 -7
- package/lib/decorators/transaction-decorator.js +5 -18
- package/lib/errors/identifier-error.js +0 -3
- package/lib/features/ReferencesMap.js +1 -14
- package/lib/features/referential-integrity-check.js +7 -21
- package/lib/field-repository/array-field-repository.js +5 -45
- package/lib/fields/array-field.js +0 -13
- package/lib/fields/belongs-to-field.js +24 -50
- package/lib/fields/belongs-to-many-field.js +29 -47
- package/lib/fields/boolean-field.js +0 -7
- package/lib/fields/context-field.js +2 -23
- package/lib/fields/date-field.d.ts +4 -0
- package/lib/fields/date-field.js +15 -7
- package/lib/fields/field.js +32 -85
- package/lib/fields/has-many-field.js +16 -49
- package/lib/fields/has-one-field.js +18 -52
- package/lib/fields/index.js +0 -44
- package/lib/fields/json-field.js +0 -12
- package/lib/fields/number-field.js +0 -23
- package/lib/fields/password-field.js +8 -35
- package/lib/fields/radio-field.js +0 -18
- package/lib/fields/relation-field.js +4 -16
- package/lib/fields/set-field.js +0 -8
- package/lib/fields/sort-field.js +84 -73
- package/lib/fields/string-field.js +0 -7
- package/lib/fields/text-field.js +0 -7
- package/lib/fields/time-field.js +0 -7
- package/lib/fields/uid-field.js +4 -22
- package/lib/fields/uuid-field.js +3 -12
- package/lib/fields/virtual-field.js +0 -7
- package/lib/filter-match.js +7 -22
- package/lib/filter-parser.js +38 -102
- package/lib/index.d.ts +3 -0
- package/lib/index.js +36 -42
- package/lib/inherited-collection.js +15 -62
- package/lib/inherited-map.js +7 -48
- package/lib/listeners/adjacency-list.d.ts +3 -0
- package/lib/listeners/adjacency-list.js +91 -0
- package/lib/listeners/index.d.ts +2 -0
- package/lib/listeners/index.js +12 -0
- package/lib/magic-attribute-model.js +58 -114
- package/lib/migration.js +7 -28
- package/lib/mock-database.d.ts +4 -4
- package/lib/mock-database.js +15 -18
- package/lib/model-hook.js +4 -35
- package/lib/model.js +12 -54
- package/lib/operators/array.js +2 -32
- package/lib/operators/association.js +0 -6
- package/lib/operators/boolean.js +0 -6
- package/lib/operators/child-collection.d.ts +2 -0
- package/lib/operators/child-collection.js +32 -0
- package/lib/operators/date.js +123 -60
- package/lib/operators/empty.js +3 -32
- package/lib/operators/eq.d.ts +2 -0
- package/lib/operators/eq.js +26 -0
- package/lib/operators/index.js +4 -7
- package/lib/operators/ne.js +5 -5
- package/lib/operators/notIn.js +0 -5
- package/lib/operators/string.js +0 -11
- package/lib/operators/utils.js +0 -6
- package/lib/options-parser.d.ts +1 -1
- package/lib/options-parser.js +47 -107
- package/lib/playground.js +0 -4
- package/lib/query-interface/mysql-query-interface.d.ts +18 -0
- package/lib/query-interface/mysql-query-interface.js +88 -0
- package/lib/query-interface/postgres-query-interface.d.ts +14 -0
- package/lib/query-interface/postgres-query-interface.js +99 -0
- package/lib/query-interface/query-interface-builder.d.ts +2 -0
- package/lib/query-interface/query-interface-builder.js +18 -0
- package/lib/query-interface/query-interface.d.ts +21 -0
- package/lib/query-interface/query-interface.js +48 -0
- package/lib/query-interface/sqlite-query-interface.d.ts +17 -0
- package/lib/query-interface/sqlite-query-interface.js +89 -0
- package/lib/relation-repository/belongs-to-many-repository.js +21 -78
- package/lib/relation-repository/belongs-to-repository.js +0 -3
- package/lib/relation-repository/hasmany-repository.js +8 -44
- package/lib/relation-repository/hasone-repository.js +0 -3
- package/lib/relation-repository/multiple-relation-repository.js +16 -68
- package/lib/relation-repository/relation-repository.js +5 -42
- package/lib/relation-repository/single-relation-repository.js +6 -43
- package/lib/repository.d.ts +1 -0
- package/lib/repository.js +36 -182
- package/lib/sql-parser/index.js +10527 -0
- package/lib/sql-parser/sql.pegjs +1297 -0
- package/lib/sync-runner.d.ts +1 -1
- package/lib/sync-runner.js +26 -64
- package/lib/update-associations.js +58 -157
- package/lib/update-guard.js +10 -49
- package/lib/utils.js +16 -54
- package/lib/value-parsers/array-value-parser.js +3 -21
- package/lib/value-parsers/base-value-parser.js +0 -13
- package/lib/value-parsers/boolean-value-parser.js +4 -10
- package/lib/value-parsers/date-value-parser.js +0 -23
- package/lib/value-parsers/index.js +0 -10
- package/lib/value-parsers/json-value-parser.js +0 -7
- package/lib/value-parsers/number-value-parser.js +0 -9
- package/lib/value-parsers/string-value-parser.js +3 -20
- package/lib/value-parsers/to-many-value-parser.js +1 -42
- package/lib/value-parsers/to-one-value-parser.js +0 -14
- package/lib/view/field-type-map.d.ts +47 -0
- package/lib/view/field-type-map.js +56 -0
- package/lib/view/view-inference.d.ts +31 -0
- package/lib/view/view-inference.js +92 -0
- package/lib/view-collection.d.ts +6 -0
- package/lib/view-collection.js +24 -0
- package/package.json +4 -3
- package/src/__tests__/collection.test.ts +44 -0
- package/src/__tests__/fields/date.test.ts +75 -0
- package/src/__tests__/fields/sort-field.test.ts +100 -0
- package/src/__tests__/filter.test.ts +60 -0
- package/src/__tests__/group.test.ts +50 -0
- package/src/__tests__/inhertits/collection-inherits.test.ts +114 -0
- package/src/__tests__/operator/date-operator.test.ts +244 -98
- package/src/__tests__/operator/eq.test.ts +76 -0
- package/src/__tests__/operator/ne.test.ts +19 -1
- package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +82 -0
- package/src/__tests__/repository/find.test.ts +33 -0
- package/src/__tests__/repository.test.ts +88 -0
- package/src/__tests__/sql-parser.test.ts +13 -0
- package/src/__tests__/tree.test.ts +217 -0
- package/src/__tests__/view/list-view.test.ts +34 -0
- package/src/__tests__/view/view-collection.test.ts +199 -0
- package/src/__tests__/view/view-inference.test.ts +145 -0
- package/src/__tests__/view/view-repository.test.ts +67 -0
- package/src/collection-group-manager.ts +94 -0
- package/src/collection.ts +126 -16
- package/src/database-utils/index.ts +1 -0
- package/src/database.ts +98 -17
- package/src/features/ReferencesMap.ts +3 -2
- package/src/fields/belongs-to-many-field.ts +23 -4
- package/src/fields/date-field.ts +18 -0
- package/src/fields/field.ts +17 -7
- package/src/fields/json-field.ts +1 -0
- package/src/fields/sort-field.ts +90 -29
- package/src/filter-parser.ts +2 -1
- package/src/index.ts +3 -1
- package/src/listeners/adjacency-list.ts +60 -0
- package/src/listeners/index.ts +7 -0
- package/src/mock-database.ts +14 -2
- package/src/model.ts +4 -0
- package/src/operators/child-collection.ts +24 -0
- package/src/operators/date.ts +108 -24
- package/src/operators/eq.ts +14 -0
- package/src/operators/index.ts +2 -0
- package/src/operators/ne.ts +12 -7
- package/src/options-parser.ts +25 -11
- package/src/query-interface/mysql-query-interface.ts +72 -0
- package/src/query-interface/postgres-query-interface.ts +103 -0
- package/src/query-interface/query-interface-builder.ts +14 -0
- package/src/query-interface/query-interface.ts +43 -0
- package/src/query-interface/sqlite-query-interface.ts +79 -0
- package/src/relation-repository/belongs-to-many-repository.ts +20 -1
- package/src/relation-repository/hasmany-repository.ts +5 -3
- package/src/relation-repository/multiple-relation-repository.ts +13 -1
- package/src/relation-repository/single-relation-repository.ts +2 -0
- package/src/repository.ts +6 -13
- package/src/sql-parser/index.js +10698 -0
- package/src/sql-parser/readme.md +2 -0
- package/src/sql-parser/sql.pegjs +1297 -0
- package/src/sync-runner.ts +27 -32
- package/src/update-associations.ts +26 -22
- package/src/utils.ts +4 -3
- package/src/view/field-type-map.ts +56 -0
- package/src/view/view-inference.ts +106 -0
- package/src/view-collection.ts +21 -0
|
@@ -4,51 +4,38 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.HasManyField = void 0;
|
|
7
|
-
|
|
8
7
|
function _lodash() {
|
|
9
8
|
const data = 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 _utils = require("../utils");
|
|
29
|
-
|
|
30
22
|
var _relationField = require("./relation-field");
|
|
31
|
-
|
|
32
23
|
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
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; }
|
|
35
|
-
|
|
36
|
-
function
|
|
37
|
-
|
|
25
|
+
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; }
|
|
26
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
27
|
+
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); }
|
|
38
28
|
class HasManyField extends _relationField.RelationField {
|
|
39
29
|
get dataType() {
|
|
40
30
|
return 'HasMany';
|
|
41
31
|
}
|
|
42
|
-
|
|
43
32
|
get foreignKey() {
|
|
44
33
|
if (this.options.foreignKey) {
|
|
45
34
|
return this.options.foreignKey;
|
|
46
35
|
}
|
|
47
|
-
|
|
48
36
|
const model = this.context.collection.model;
|
|
49
37
|
return _sequelize().Utils.camelize([model.options.name.singular, this.sourceKey || model.primaryKeyAttribute].join('_'));
|
|
50
38
|
}
|
|
51
|
-
|
|
52
39
|
reference(association) {
|
|
53
40
|
const sourceKey = association.sourceKey;
|
|
54
41
|
return {
|
|
@@ -59,102 +46,82 @@ class HasManyField extends _relationField.RelationField {
|
|
|
59
46
|
onDelete: this.options.onDelete
|
|
60
47
|
};
|
|
61
48
|
}
|
|
62
|
-
|
|
63
49
|
bind() {
|
|
64
50
|
const _this$context = this.context,
|
|
65
|
-
|
|
66
|
-
|
|
51
|
+
database = _this$context.database,
|
|
52
|
+
collection = _this$context.collection;
|
|
67
53
|
const Target = this.TargetModel;
|
|
68
|
-
|
|
69
54
|
if (!Target) {
|
|
70
55
|
database.addPendingField(this);
|
|
71
56
|
return false;
|
|
72
57
|
}
|
|
73
|
-
|
|
74
58
|
if (collection.model.associations[this.name]) {
|
|
75
59
|
delete collection.model.associations[this.name];
|
|
76
60
|
}
|
|
77
|
-
|
|
78
61
|
const association = collection.model.hasMany(Target, _objectSpread(_objectSpread({
|
|
79
62
|
constraints: false
|
|
80
63
|
}, (0, _lodash().omit)(this.options, ['name', 'type', 'target', 'onDelete'])), {}, {
|
|
81
64
|
as: this.name,
|
|
82
65
|
foreignKey: this.foreignKey
|
|
83
|
-
}));
|
|
66
|
+
}));
|
|
67
|
+
// inverse relation
|
|
84
68
|
// this.TargetModel.belongsTo(collection.model);
|
|
85
69
|
// 建立关系之后从 pending 列表中删除
|
|
86
|
-
|
|
87
70
|
database.removePendingField(this);
|
|
88
|
-
|
|
89
71
|
if (!this.options.foreignKey) {
|
|
90
72
|
this.options.foreignKey = association.foreignKey;
|
|
91
73
|
}
|
|
92
|
-
|
|
93
74
|
try {
|
|
94
75
|
(0, _utils.checkIdentifier)(this.options.foreignKey);
|
|
95
76
|
} catch (error) {
|
|
96
77
|
this.unbind();
|
|
97
78
|
throw error;
|
|
98
79
|
}
|
|
99
|
-
|
|
100
80
|
if (!this.options.sourceKey) {
|
|
101
81
|
// @ts-ignore
|
|
102
82
|
this.options.sourceKey = association.sourceKey;
|
|
103
83
|
}
|
|
104
|
-
|
|
105
84
|
let tcoll;
|
|
106
|
-
|
|
107
85
|
if (this.target === collection.name) {
|
|
108
86
|
tcoll = collection;
|
|
109
87
|
} else {
|
|
110
88
|
tcoll = database.getCollection(this.target);
|
|
111
89
|
}
|
|
112
|
-
|
|
113
90
|
if (tcoll) {
|
|
114
91
|
tcoll.addIndex([this.options.foreignKey]);
|
|
115
92
|
}
|
|
116
|
-
|
|
117
93
|
this.database.referenceMap.addReference(this.reference(association));
|
|
118
94
|
return true;
|
|
119
95
|
}
|
|
120
|
-
|
|
121
96
|
unbind() {
|
|
122
97
|
const _this$context2 = this.context,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
database.removePendingField(this);
|
|
127
|
-
|
|
98
|
+
database = _this$context2.database,
|
|
99
|
+
collection = _this$context2.collection;
|
|
100
|
+
// 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
|
|
101
|
+
database.removePendingField(this);
|
|
102
|
+
// 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉
|
|
128
103
|
const tcoll = database.getCollection(this.target);
|
|
129
|
-
|
|
130
104
|
if (tcoll) {
|
|
131
105
|
const foreignKey = this.options.foreignKey;
|
|
132
106
|
const field = tcoll.findField(field => {
|
|
133
107
|
if (field.name === foreignKey) {
|
|
134
108
|
return true;
|
|
135
109
|
}
|
|
136
|
-
|
|
137
110
|
return field.type === 'belongsTo' && field.foreignKey === foreignKey;
|
|
138
111
|
});
|
|
139
|
-
|
|
140
112
|
if (!field) {
|
|
141
113
|
tcoll.model.removeAttribute(foreignKey);
|
|
142
114
|
}
|
|
143
115
|
}
|
|
144
|
-
|
|
145
116
|
const association = collection.model.associations[this.name];
|
|
146
|
-
|
|
147
117
|
if (association) {
|
|
148
118
|
this.database.referenceMap.removeReference(this.reference(association));
|
|
149
119
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
120
|
+
this.clearAccessors();
|
|
121
|
+
// 删掉 model 的关联字段
|
|
122
|
+
delete collection.model.associations[this.name];
|
|
123
|
+
// @ts-ignore
|
|
155
124
|
collection.model.refreshAttributes();
|
|
156
125
|
}
|
|
157
|
-
|
|
158
126
|
}
|
|
159
|
-
|
|
160
127
|
exports.HasManyField = HasManyField;
|
|
@@ -4,62 +4,47 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.HasOneField = void 0;
|
|
7
|
-
|
|
8
7
|
function _lodash() {
|
|
9
8
|
const data = 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 _utils = require("../utils");
|
|
29
|
-
|
|
30
22
|
var _relationField = require("./relation-field");
|
|
31
|
-
|
|
32
23
|
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
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; }
|
|
35
|
-
|
|
36
|
-
function
|
|
37
|
-
|
|
25
|
+
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; }
|
|
26
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
27
|
+
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); }
|
|
38
28
|
class HasOneField extends _relationField.RelationField {
|
|
39
29
|
get dataType() {
|
|
40
30
|
return 'HasOne';
|
|
41
31
|
}
|
|
42
|
-
|
|
43
32
|
get target() {
|
|
44
33
|
const _this$options = this.options,
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
target = _this$options.target,
|
|
35
|
+
name = _this$options.name;
|
|
47
36
|
return target || _sequelize().Utils.pluralize(name);
|
|
48
37
|
}
|
|
49
|
-
|
|
50
38
|
get foreignKey() {
|
|
51
39
|
const foreignKey = (() => {
|
|
52
40
|
if (this.options.foreignKey) {
|
|
53
41
|
return this.options.foreignKey;
|
|
54
42
|
}
|
|
55
|
-
|
|
56
43
|
const model = this.context.collection.model;
|
|
57
44
|
return _sequelize().Utils.camelize([model.options.name.singular, model.primaryKeyAttribute].join('_'));
|
|
58
45
|
})();
|
|
59
|
-
|
|
60
46
|
return foreignKey;
|
|
61
47
|
}
|
|
62
|
-
|
|
63
48
|
reference(association) {
|
|
64
49
|
const sourceKey = association.sourceKey;
|
|
65
50
|
return {
|
|
@@ -70,96 +55,77 @@ class HasOneField extends _relationField.RelationField {
|
|
|
70
55
|
onDelete: this.options.onDelete
|
|
71
56
|
};
|
|
72
57
|
}
|
|
73
|
-
|
|
74
58
|
bind() {
|
|
75
59
|
const _this$context = this.context,
|
|
76
|
-
|
|
77
|
-
|
|
60
|
+
database = _this$context.database,
|
|
61
|
+
collection = _this$context.collection;
|
|
78
62
|
const Target = this.TargetModel;
|
|
79
|
-
|
|
80
63
|
if (!Target) {
|
|
81
64
|
database.addPendingField(this);
|
|
82
65
|
return false;
|
|
83
66
|
}
|
|
84
|
-
|
|
85
67
|
const association = collection.model.hasOne(Target, _objectSpread(_objectSpread({
|
|
86
68
|
constraints: false
|
|
87
69
|
}, (0, _lodash().omit)(this.options, ['name', 'type', 'target', 'onDelete'])), {}, {
|
|
88
70
|
as: this.name,
|
|
89
71
|
foreignKey: this.foreignKey
|
|
90
|
-
}));
|
|
91
|
-
|
|
72
|
+
}));
|
|
73
|
+
// 建立关系之后从 pending 列表中删除
|
|
92
74
|
database.removePendingField(this);
|
|
93
|
-
|
|
94
75
|
if (!this.options.foreignKey) {
|
|
95
76
|
this.options.foreignKey = association.foreignKey;
|
|
96
77
|
}
|
|
97
|
-
|
|
98
78
|
try {
|
|
99
79
|
(0, _utils.checkIdentifier)(this.options.foreignKey);
|
|
100
80
|
} catch (error) {
|
|
101
81
|
this.unbind();
|
|
102
82
|
throw error;
|
|
103
83
|
}
|
|
104
|
-
|
|
105
84
|
if (!this.options.sourceKey) {
|
|
106
85
|
// @ts-ignore
|
|
107
86
|
this.options.sourceKey = association.sourceKey;
|
|
108
87
|
}
|
|
109
|
-
|
|
110
88
|
let tcoll;
|
|
111
|
-
|
|
112
89
|
if (this.target === collection.name) {
|
|
113
90
|
tcoll = collection;
|
|
114
91
|
} else {
|
|
115
92
|
tcoll = database.getCollection(this.target);
|
|
116
93
|
}
|
|
117
|
-
|
|
118
94
|
if (tcoll) {
|
|
119
95
|
tcoll.addIndex([this.options.foreignKey]);
|
|
120
96
|
}
|
|
121
|
-
|
|
122
97
|
this.database.referenceMap.addReference(this.reference(association));
|
|
123
98
|
return true;
|
|
124
99
|
}
|
|
125
|
-
|
|
126
100
|
unbind() {
|
|
127
101
|
const _this$context2 = this.context,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
database.removePendingField(this);
|
|
132
|
-
|
|
102
|
+
database = _this$context2.database,
|
|
103
|
+
collection = _this$context2.collection;
|
|
104
|
+
// 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
|
|
105
|
+
database.removePendingField(this);
|
|
106
|
+
// 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉
|
|
133
107
|
const tcoll = database.collections.get(this.target);
|
|
134
|
-
|
|
135
108
|
if (tcoll && !this.options.inherit) {
|
|
136
109
|
const foreignKey = this.options.foreignKey;
|
|
137
110
|
const field = tcoll.findField(field => {
|
|
138
111
|
if (field.name === foreignKey) {
|
|
139
112
|
return true;
|
|
140
113
|
}
|
|
141
|
-
|
|
142
114
|
return field.type === 'belongsTo' && field.foreignKey === foreignKey;
|
|
143
115
|
});
|
|
144
|
-
|
|
145
116
|
if (!field) {
|
|
146
117
|
tcoll.model.removeAttribute(foreignKey);
|
|
147
118
|
}
|
|
148
119
|
}
|
|
149
|
-
|
|
150
120
|
const association = collection.model.associations[this.name];
|
|
151
|
-
|
|
152
121
|
if (association) {
|
|
153
122
|
this.database.referenceMap.removeReference(this.reference(association));
|
|
154
123
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
124
|
+
this.clearAccessors();
|
|
125
|
+
// 删掉 model 的关联字段
|
|
126
|
+
delete collection.model.associations[this.name];
|
|
127
|
+
// @ts-ignore
|
|
160
128
|
collection.model.refreshAttributes();
|
|
161
129
|
}
|
|
162
|
-
|
|
163
130
|
}
|
|
164
|
-
|
|
165
131
|
exports.HasOneField = HasOneField;
|
package/lib/fields/index.js
CHANGED
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
6
|
var _arrayField = require("./array-field");
|
|
8
|
-
|
|
9
7
|
Object.keys(_arrayField).forEach(function (key) {
|
|
10
8
|
if (key === "default" || key === "__esModule") return;
|
|
11
9
|
if (key in exports && exports[key] === _arrayField[key]) return;
|
|
@@ -16,9 +14,7 @@ Object.keys(_arrayField).forEach(function (key) {
|
|
|
16
14
|
}
|
|
17
15
|
});
|
|
18
16
|
});
|
|
19
|
-
|
|
20
17
|
var _belongsToField = require("./belongs-to-field");
|
|
21
|
-
|
|
22
18
|
Object.keys(_belongsToField).forEach(function (key) {
|
|
23
19
|
if (key === "default" || key === "__esModule") return;
|
|
24
20
|
if (key in exports && exports[key] === _belongsToField[key]) return;
|
|
@@ -29,9 +25,7 @@ Object.keys(_belongsToField).forEach(function (key) {
|
|
|
29
25
|
}
|
|
30
26
|
});
|
|
31
27
|
});
|
|
32
|
-
|
|
33
28
|
var _belongsToManyField = require("./belongs-to-many-field");
|
|
34
|
-
|
|
35
29
|
Object.keys(_belongsToManyField).forEach(function (key) {
|
|
36
30
|
if (key === "default" || key === "__esModule") return;
|
|
37
31
|
if (key in exports && exports[key] === _belongsToManyField[key]) return;
|
|
@@ -42,9 +36,7 @@ Object.keys(_belongsToManyField).forEach(function (key) {
|
|
|
42
36
|
}
|
|
43
37
|
});
|
|
44
38
|
});
|
|
45
|
-
|
|
46
39
|
var _booleanField = require("./boolean-field");
|
|
47
|
-
|
|
48
40
|
Object.keys(_booleanField).forEach(function (key) {
|
|
49
41
|
if (key === "default" || key === "__esModule") return;
|
|
50
42
|
if (key in exports && exports[key] === _booleanField[key]) return;
|
|
@@ -55,9 +47,7 @@ Object.keys(_booleanField).forEach(function (key) {
|
|
|
55
47
|
}
|
|
56
48
|
});
|
|
57
49
|
});
|
|
58
|
-
|
|
59
50
|
var _contextField = require("./context-field");
|
|
60
|
-
|
|
61
51
|
Object.keys(_contextField).forEach(function (key) {
|
|
62
52
|
if (key === "default" || key === "__esModule") return;
|
|
63
53
|
if (key in exports && exports[key] === _contextField[key]) return;
|
|
@@ -68,9 +58,7 @@ Object.keys(_contextField).forEach(function (key) {
|
|
|
68
58
|
}
|
|
69
59
|
});
|
|
70
60
|
});
|
|
71
|
-
|
|
72
61
|
var _dateField = require("./date-field");
|
|
73
|
-
|
|
74
62
|
Object.keys(_dateField).forEach(function (key) {
|
|
75
63
|
if (key === "default" || key === "__esModule") return;
|
|
76
64
|
if (key in exports && exports[key] === _dateField[key]) return;
|
|
@@ -81,9 +69,7 @@ Object.keys(_dateField).forEach(function (key) {
|
|
|
81
69
|
}
|
|
82
70
|
});
|
|
83
71
|
});
|
|
84
|
-
|
|
85
72
|
var _field = require("./field");
|
|
86
|
-
|
|
87
73
|
Object.keys(_field).forEach(function (key) {
|
|
88
74
|
if (key === "default" || key === "__esModule") return;
|
|
89
75
|
if (key in exports && exports[key] === _field[key]) return;
|
|
@@ -94,9 +80,7 @@ Object.keys(_field).forEach(function (key) {
|
|
|
94
80
|
}
|
|
95
81
|
});
|
|
96
82
|
});
|
|
97
|
-
|
|
98
83
|
var _hasManyField = require("./has-many-field");
|
|
99
|
-
|
|
100
84
|
Object.keys(_hasManyField).forEach(function (key) {
|
|
101
85
|
if (key === "default" || key === "__esModule") return;
|
|
102
86
|
if (key in exports && exports[key] === _hasManyField[key]) return;
|
|
@@ -107,9 +91,7 @@ Object.keys(_hasManyField).forEach(function (key) {
|
|
|
107
91
|
}
|
|
108
92
|
});
|
|
109
93
|
});
|
|
110
|
-
|
|
111
94
|
var _hasOneField = require("./has-one-field");
|
|
112
|
-
|
|
113
95
|
Object.keys(_hasOneField).forEach(function (key) {
|
|
114
96
|
if (key === "default" || key === "__esModule") return;
|
|
115
97
|
if (key in exports && exports[key] === _hasOneField[key]) return;
|
|
@@ -120,9 +102,7 @@ Object.keys(_hasOneField).forEach(function (key) {
|
|
|
120
102
|
}
|
|
121
103
|
});
|
|
122
104
|
});
|
|
123
|
-
|
|
124
105
|
var _jsonField = require("./json-field");
|
|
125
|
-
|
|
126
106
|
Object.keys(_jsonField).forEach(function (key) {
|
|
127
107
|
if (key === "default" || key === "__esModule") return;
|
|
128
108
|
if (key in exports && exports[key] === _jsonField[key]) return;
|
|
@@ -133,9 +113,7 @@ Object.keys(_jsonField).forEach(function (key) {
|
|
|
133
113
|
}
|
|
134
114
|
});
|
|
135
115
|
});
|
|
136
|
-
|
|
137
116
|
var _numberField = require("./number-field");
|
|
138
|
-
|
|
139
117
|
Object.keys(_numberField).forEach(function (key) {
|
|
140
118
|
if (key === "default" || key === "__esModule") return;
|
|
141
119
|
if (key in exports && exports[key] === _numberField[key]) return;
|
|
@@ -146,9 +124,7 @@ Object.keys(_numberField).forEach(function (key) {
|
|
|
146
124
|
}
|
|
147
125
|
});
|
|
148
126
|
});
|
|
149
|
-
|
|
150
127
|
var _passwordField = require("./password-field");
|
|
151
|
-
|
|
152
128
|
Object.keys(_passwordField).forEach(function (key) {
|
|
153
129
|
if (key === "default" || key === "__esModule") return;
|
|
154
130
|
if (key in exports && exports[key] === _passwordField[key]) return;
|
|
@@ -159,9 +135,7 @@ Object.keys(_passwordField).forEach(function (key) {
|
|
|
159
135
|
}
|
|
160
136
|
});
|
|
161
137
|
});
|
|
162
|
-
|
|
163
138
|
var _radioField = require("./radio-field");
|
|
164
|
-
|
|
165
139
|
Object.keys(_radioField).forEach(function (key) {
|
|
166
140
|
if (key === "default" || key === "__esModule") return;
|
|
167
141
|
if (key in exports && exports[key] === _radioField[key]) return;
|
|
@@ -172,9 +146,7 @@ Object.keys(_radioField).forEach(function (key) {
|
|
|
172
146
|
}
|
|
173
147
|
});
|
|
174
148
|
});
|
|
175
|
-
|
|
176
149
|
var _relationField = require("./relation-field");
|
|
177
|
-
|
|
178
150
|
Object.keys(_relationField).forEach(function (key) {
|
|
179
151
|
if (key === "default" || key === "__esModule") return;
|
|
180
152
|
if (key in exports && exports[key] === _relationField[key]) return;
|
|
@@ -185,9 +157,7 @@ Object.keys(_relationField).forEach(function (key) {
|
|
|
185
157
|
}
|
|
186
158
|
});
|
|
187
159
|
});
|
|
188
|
-
|
|
189
160
|
var _setField = require("./set-field");
|
|
190
|
-
|
|
191
161
|
Object.keys(_setField).forEach(function (key) {
|
|
192
162
|
if (key === "default" || key === "__esModule") return;
|
|
193
163
|
if (key in exports && exports[key] === _setField[key]) return;
|
|
@@ -198,9 +168,7 @@ Object.keys(_setField).forEach(function (key) {
|
|
|
198
168
|
}
|
|
199
169
|
});
|
|
200
170
|
});
|
|
201
|
-
|
|
202
171
|
var _sortField = require("./sort-field");
|
|
203
|
-
|
|
204
172
|
Object.keys(_sortField).forEach(function (key) {
|
|
205
173
|
if (key === "default" || key === "__esModule") return;
|
|
206
174
|
if (key in exports && exports[key] === _sortField[key]) return;
|
|
@@ -211,9 +179,7 @@ Object.keys(_sortField).forEach(function (key) {
|
|
|
211
179
|
}
|
|
212
180
|
});
|
|
213
181
|
});
|
|
214
|
-
|
|
215
182
|
var _stringField = require("./string-field");
|
|
216
|
-
|
|
217
183
|
Object.keys(_stringField).forEach(function (key) {
|
|
218
184
|
if (key === "default" || key === "__esModule") return;
|
|
219
185
|
if (key in exports && exports[key] === _stringField[key]) return;
|
|
@@ -224,9 +190,7 @@ Object.keys(_stringField).forEach(function (key) {
|
|
|
224
190
|
}
|
|
225
191
|
});
|
|
226
192
|
});
|
|
227
|
-
|
|
228
193
|
var _textField = require("./text-field");
|
|
229
|
-
|
|
230
194
|
Object.keys(_textField).forEach(function (key) {
|
|
231
195
|
if (key === "default" || key === "__esModule") return;
|
|
232
196
|
if (key in exports && exports[key] === _textField[key]) return;
|
|
@@ -237,9 +201,7 @@ Object.keys(_textField).forEach(function (key) {
|
|
|
237
201
|
}
|
|
238
202
|
});
|
|
239
203
|
});
|
|
240
|
-
|
|
241
204
|
var _timeField = require("./time-field");
|
|
242
|
-
|
|
243
205
|
Object.keys(_timeField).forEach(function (key) {
|
|
244
206
|
if (key === "default" || key === "__esModule") return;
|
|
245
207
|
if (key in exports && exports[key] === _timeField[key]) return;
|
|
@@ -250,9 +212,7 @@ Object.keys(_timeField).forEach(function (key) {
|
|
|
250
212
|
}
|
|
251
213
|
});
|
|
252
214
|
});
|
|
253
|
-
|
|
254
215
|
var _uidField = require("./uid-field");
|
|
255
|
-
|
|
256
216
|
Object.keys(_uidField).forEach(function (key) {
|
|
257
217
|
if (key === "default" || key === "__esModule") return;
|
|
258
218
|
if (key in exports && exports[key] === _uidField[key]) return;
|
|
@@ -263,9 +223,7 @@ Object.keys(_uidField).forEach(function (key) {
|
|
|
263
223
|
}
|
|
264
224
|
});
|
|
265
225
|
});
|
|
266
|
-
|
|
267
226
|
var _uuidField = require("./uuid-field");
|
|
268
|
-
|
|
269
227
|
Object.keys(_uuidField).forEach(function (key) {
|
|
270
228
|
if (key === "default" || key === "__esModule") return;
|
|
271
229
|
if (key in exports && exports[key] === _uuidField[key]) return;
|
|
@@ -276,9 +234,7 @@ Object.keys(_uuidField).forEach(function (key) {
|
|
|
276
234
|
}
|
|
277
235
|
});
|
|
278
236
|
});
|
|
279
|
-
|
|
280
237
|
var _virtualField = require("./virtual-field");
|
|
281
|
-
|
|
282
238
|
Object.keys(_virtualField).forEach(function (key) {
|
|
283
239
|
if (key === "default" || key === "__esModule") return;
|
|
284
240
|
if (key in exports && exports[key] === _virtualField[key]) return;
|
package/lib/fields/json-field.js
CHANGED
|
@@ -4,39 +4,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.JsonbField = exports.JsonField = void 0;
|
|
7
|
-
|
|
8
7
|
function _sequelize() {
|
|
9
8
|
const data = require("sequelize");
|
|
10
|
-
|
|
11
9
|
_sequelize = function _sequelize() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
var _field = require("./field");
|
|
19
|
-
|
|
20
15
|
class JsonField extends _field.Field {
|
|
21
16
|
get dataType() {
|
|
22
17
|
return _sequelize().DataTypes.JSON;
|
|
23
18
|
}
|
|
24
|
-
|
|
25
19
|
}
|
|
26
|
-
|
|
27
20
|
exports.JsonField = JsonField;
|
|
28
|
-
|
|
29
21
|
class JsonbField extends _field.Field {
|
|
30
22
|
get dataType() {
|
|
31
23
|
const dialect = this.context.database.sequelize.getDialect();
|
|
32
|
-
|
|
33
24
|
if (dialect === 'postgres') {
|
|
34
25
|
return _sequelize().DataTypes.JSONB;
|
|
35
26
|
}
|
|
36
|
-
|
|
37
27
|
return _sequelize().DataTypes.JSON;
|
|
38
28
|
}
|
|
39
|
-
|
|
40
29
|
}
|
|
41
|
-
|
|
42
30
|
exports.JsonbField = JsonbField;
|
|
@@ -4,71 +4,48 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.RealField = exports.IntegerField = exports.FloatField = exports.DoubleField = exports.DecimalField = exports.BigIntField = void 0;
|
|
7
|
-
|
|
8
7
|
function _sequelize() {
|
|
9
8
|
const data = require("sequelize");
|
|
10
|
-
|
|
11
9
|
_sequelize = function _sequelize() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
var _field = require("./field");
|
|
19
|
-
|
|
20
15
|
class NumberField extends _field.Field {}
|
|
21
|
-
|
|
22
16
|
class IntegerField extends NumberField {
|
|
23
17
|
get dataType() {
|
|
24
18
|
return _sequelize().DataTypes.INTEGER;
|
|
25
19
|
}
|
|
26
|
-
|
|
27
20
|
}
|
|
28
|
-
|
|
29
21
|
exports.IntegerField = IntegerField;
|
|
30
|
-
|
|
31
22
|
class BigIntField extends NumberField {
|
|
32
23
|
get dataType() {
|
|
33
24
|
return _sequelize().DataTypes.BIGINT;
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
}
|
|
37
|
-
|
|
38
27
|
exports.BigIntField = BigIntField;
|
|
39
|
-
|
|
40
28
|
class FloatField extends NumberField {
|
|
41
29
|
get dataType() {
|
|
42
30
|
return _sequelize().DataTypes.FLOAT;
|
|
43
31
|
}
|
|
44
|
-
|
|
45
32
|
}
|
|
46
|
-
|
|
47
33
|
exports.FloatField = FloatField;
|
|
48
|
-
|
|
49
34
|
class DoubleField extends NumberField {
|
|
50
35
|
get dataType() {
|
|
51
36
|
return _sequelize().DataTypes.DOUBLE;
|
|
52
37
|
}
|
|
53
|
-
|
|
54
38
|
}
|
|
55
|
-
|
|
56
39
|
exports.DoubleField = DoubleField;
|
|
57
|
-
|
|
58
40
|
class RealField extends NumberField {
|
|
59
41
|
get dataType() {
|
|
60
42
|
return _sequelize().DataTypes.REAL;
|
|
61
43
|
}
|
|
62
|
-
|
|
63
44
|
}
|
|
64
|
-
|
|
65
45
|
exports.RealField = RealField;
|
|
66
|
-
|
|
67
46
|
class DecimalField extends NumberField {
|
|
68
47
|
get dataType() {
|
|
69
48
|
return _sequelize().DataTypes.DECIMAL;
|
|
70
49
|
}
|
|
71
|
-
|
|
72
50
|
}
|
|
73
|
-
|
|
74
51
|
exports.DecimalField = DecimalField;
|