@nocobase/database 0.7.0-alpha.9 → 0.7.1-alpha.6
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-importer.js +85 -68
- package/lib/collection.d.ts +6 -2
- package/lib/collection.js +371 -210
- package/lib/database.d.ts +23 -4
- package/lib/database.js +599 -273
- package/lib/fields/array-field.js +45 -25
- package/lib/fields/belongs-to-field.js +101 -54
- package/lib/fields/belongs-to-many-field.js +98 -53
- package/lib/fields/boolean-field.js +24 -9
- package/lib/fields/context-field.js +77 -45
- package/lib/fields/date-field.js +24 -9
- package/lib/fields/field.d.ts +4 -1
- package/lib/fields/field.js +231 -75
- package/lib/fields/formula-field.d.ts +19 -0
- package/lib/fields/formula-field.js +184 -0
- package/lib/fields/has-inverse-field.js +4 -2
- package/lib/fields/has-many-field.js +105 -56
- package/lib/fields/has-one-field.js +105 -54
- package/lib/fields/index.d.ts +5 -1
- package/lib/fields/index.js +290 -32
- package/lib/fields/json-field.js +36 -16
- package/lib/fields/number-field.js +53 -26
- package/lib/fields/password-field.js +120 -73
- package/lib/fields/radio-field.js +75 -47
- package/lib/fields/relation-field.js +41 -28
- package/lib/fields/sort-field.js +165 -89
- package/lib/fields/string-field.js +24 -9
- package/lib/fields/text-field.js +24 -9
- package/lib/fields/time-field.js +24 -9
- package/lib/fields/uid-field.js +57 -28
- package/lib/fields/uuid-field.d.ts +9 -0
- package/lib/fields/uuid-field.js +39 -0
- package/lib/fields/virtual-field.js +24 -9
- package/lib/filter-parser.js +288 -179
- package/lib/index.d.ts +1 -0
- package/lib/index.js +224 -29
- package/lib/magic-attribute-model.js +123 -71
- package/lib/migration.d.ts +35 -0
- package/lib/migration.js +90 -0
- package/lib/mock-database.d.ts +1 -0
- package/lib/mock-database.js +69 -34
- package/lib/model-hook.d.ts +5 -5
- package/lib/model-hook.js +109 -60
- package/lib/model.js +116 -81
- package/lib/operators/array.js +136 -96
- package/lib/operators/association.js +30 -14
- package/lib/operators/boolean.d.ts +13 -0
- package/lib/operators/boolean.js +35 -0
- package/lib/operators/date.js +78 -34
- package/lib/operators/empty.js +113 -75
- package/lib/operators/index.js +15 -3
- package/lib/operators/ne.js +27 -12
- package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
- package/lib/operators/notIn.js +29 -0
- package/lib/operators/string.js +56 -35
- package/lib/operators/utils.js +18 -10
- package/lib/options-parser.js +345 -215
- package/lib/playground.js +66 -53
- package/lib/relation-repository/belongs-to-many-repository.js +281 -198
- package/lib/relation-repository/belongs-to-repository.js +10 -6
- package/lib/relation-repository/hasmany-repository.js +168 -121
- package/lib/relation-repository/hasone-repository.js +10 -6
- package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
- package/lib/relation-repository/multiple-relation-repository.js +263 -148
- package/lib/relation-repository/relation-repository.d.ts +1 -1
- package/lib/relation-repository/relation-repository.js +163 -93
- package/lib/relation-repository/single-relation-repository.d.ts +6 -6
- package/lib/relation-repository/single-relation-repository.js +145 -99
- package/lib/relation-repository/types.js +4 -2
- package/lib/repository.d.ts +4 -7
- package/lib/repository.js +473 -291
- package/lib/transaction-decorator.js +80 -67
- package/lib/update-associations.d.ts +1 -2
- package/lib/update-associations.js +525 -321
- package/lib/update-guard.js +160 -117
- package/package.json +9 -9
- package/src/__tests__/collection.test.ts +27 -0
- package/src/__tests__/database.test.ts +47 -0
- package/src/__tests__/fields/formula-field.test.ts +69 -0
- package/src/__tests__/fields/uuid-field.test.ts +30 -0
- package/src/__tests__/fixtures/migrations/m1.ts +7 -0
- package/src/__tests__/fixtures/migrations/m2.ts +7 -0
- package/src/__tests__/hooks/afterCreateWithAssociations.test.ts +33 -0
- package/src/__tests__/migrator.test.ts +70 -0
- package/src/__tests__/model-hook.test.ts +54 -0
- package/src/__tests__/operator/notIn.test.ts +33 -0
- package/src/__tests__/option-parser.test.ts +30 -6
- package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +1 -1
- package/src/__tests__/sequelize-hooks.test.ts +69 -0
- package/src/__tests__/sort.test.ts +51 -0
- package/src/__tests__/update-associations.test.ts +3 -3
- package/src/collection-importer.ts +12 -20
- package/src/collection.ts +26 -2
- package/src/database.ts +144 -14
- package/src/fields/field.ts +88 -1
- package/src/fields/formula-field.ts +106 -0
- package/src/fields/index.ts +6 -0
- package/src/fields/password-field.ts +2 -0
- package/src/fields/uuid-field.ts +21 -0
- package/src/index.ts +1 -0
- package/src/migration.ts +76 -0
- package/src/mock-database.ts +2 -1
- package/src/model-hook.ts +26 -22
- package/src/operators/boolean.ts +18 -0
- package/src/operators/index.ts +2 -0
- package/src/operators/notIn.ts +12 -0
- package/src/options-parser.ts +14 -10
- package/src/relation-repository/multiple-relation-repository.ts +14 -6
- package/src/relation-repository/relation-repository.ts +12 -6
- package/src/relation-repository/single-relation-repository.ts +11 -7
- package/src/repository.ts +20 -10
- package/src/update-associations.ts +2 -3
- package/esm/collection-importer.d.ts +0 -7
- package/esm/collection-importer.js +0 -49
- package/esm/collection-importer.js.map +0 -1
- package/esm/collection.d.ts +0 -73
- package/esm/collection.js +0 -224
- package/esm/collection.js.map +0 -1
- package/esm/database.d.ts +0 -101
- package/esm/database.js +0 -275
- package/esm/database.js.map +0 -1
- package/esm/fields/array-field.d.ts +0 -11
- package/esm/fields/array-field.js +0 -26
- package/esm/fields/array-field.js.map +0 -1
- package/esm/fields/belongs-to-field.d.ts +0 -12
- package/esm/fields/belongs-to-field.js +0 -57
- package/esm/fields/belongs-to-field.js.map +0 -1
- package/esm/fields/belongs-to-many-field.d.ts +0 -11
- package/esm/fields/belongs-to-many-field.js +0 -55
- package/esm/fields/belongs-to-many-field.js.map +0 -1
- package/esm/fields/boolean-field.d.ts +0 -8
- package/esm/fields/boolean-field.js +0 -8
- package/esm/fields/boolean-field.js.map +0 -1
- package/esm/fields/context-field.d.ts +0 -13
- package/esm/fields/context-field.js +0 -43
- package/esm/fields/context-field.js.map +0 -1
- package/esm/fields/date-field.d.ts +0 -8
- package/esm/fields/date-field.js +0 -8
- package/esm/fields/date-field.js.map +0 -1
- package/esm/fields/field.d.ts +0 -37
- package/esm/fields/field.js +0 -74
- package/esm/fields/field.js.map +0 -1
- package/esm/fields/has-inverse-field.d.ts +0 -4
- package/esm/fields/has-inverse-field.js +0 -2
- package/esm/fields/has-inverse-field.js.map +0 -1
- package/esm/fields/has-many-field.d.ts +0 -64
- package/esm/fields/has-many-field.js +0 -58
- package/esm/fields/has-many-field.js.map +0 -1
- package/esm/fields/has-one-field.d.ts +0 -64
- package/esm/fields/has-one-field.js +0 -57
- package/esm/fields/has-one-field.js.map +0 -1
- package/esm/fields/index.d.ts +0 -40
- package/esm/fields/index.js +0 -21
- package/esm/fields/index.js.map +0 -1
- package/esm/fields/json-field.d.ts +0 -14
- package/esm/fields/json-field.js +0 -17
- package/esm/fields/json-field.js.map +0 -1
- package/esm/fields/number-field.d.ts +0 -32
- package/esm/fields/number-field.js +0 -28
- package/esm/fields/number-field.js.map +0 -1
- package/esm/fields/password-field.d.ts +0 -21
- package/esm/fields/password-field.js +0 -71
- package/esm/fields/password-field.js.map +0 -1
- package/esm/fields/radio-field.d.ts +0 -14
- package/esm/fields/radio-field.js +0 -49
- package/esm/fields/radio-field.js.map +0 -1
- package/esm/fields/relation-field.d.ts +0 -20
- package/esm/fields/relation-field.js +0 -27
- package/esm/fields/relation-field.js.map +0 -1
- package/esm/fields/sort-field.d.ts +0 -16
- package/esm/fields/sort-field.js +0 -90
- package/esm/fields/sort-field.js.map +0 -1
- package/esm/fields/string-field.d.ts +0 -8
- package/esm/fields/string-field.js +0 -8
- package/esm/fields/string-field.js.map +0 -1
- package/esm/fields/text-field.d.ts +0 -8
- package/esm/fields/text-field.js +0 -8
- package/esm/fields/text-field.js.map +0 -1
- package/esm/fields/time-field.d.ts +0 -8
- package/esm/fields/time-field.js +0 -8
- package/esm/fields/time-field.js.map +0 -1
- package/esm/fields/uid-field.d.ts +0 -10
- package/esm/fields/uid-field.js +0 -27
- package/esm/fields/uid-field.js.map +0 -1
- package/esm/fields/virtual-field.d.ts +0 -8
- package/esm/fields/virtual-field.js +0 -8
- package/esm/fields/virtual-field.js.map +0 -1
- package/esm/filter-parser.d.ts +0 -27
- package/esm/filter-parser.js +0 -185
- package/esm/filter-parser.js.map +0 -1
- package/esm/index.d.ts +0 -15
- package/esm/index.js +0 -16
- package/esm/index.js.map +0 -1
- package/esm/magic-attribute-model.d.ts +0 -7
- package/esm/magic-attribute-model.js +0 -70
- package/esm/magic-attribute-model.js.map +0 -1
- package/esm/mock-database.d.ts +0 -22
- package/esm/mock-database.js +0 -34
- package/esm/mock-database.js.map +0 -1
- package/esm/model-hook.d.ts +0 -12
- package/esm/model-hook.js +0 -61
- package/esm/model-hook.js.map +0 -1
- package/esm/model.d.ts +0 -15
- package/esm/model.js +0 -80
- package/esm/model.js.map +0 -1
- package/esm/operators/array.d.ts +0 -26
- package/esm/operators/array.js +0 -105
- package/esm/operators/array.js.map +0 -1
- package/esm/operators/association.d.ts +0 -10
- package/esm/operators/association.js +0 -14
- package/esm/operators/association.js.map +0 -1
- package/esm/operators/date.d.ts +0 -34
- package/esm/operators/date.js +0 -35
- package/esm/operators/date.js.map +0 -1
- package/esm/operators/empty.d.ts +0 -28
- package/esm/operators/empty.js +0 -58
- package/esm/operators/empty.js.map +0 -1
- package/esm/operators/index.d.ts +0 -2
- package/esm/operators/index.js +0 -2
- package/esm/operators/index.js.map +0 -1
- package/esm/operators/ne.js +0 -12
- package/esm/operators/ne.js.map +0 -1
- package/esm/operators/string.d.ts +0 -21
- package/esm/operators/string.js +0 -35
- package/esm/operators/string.js.map +0 -1
- package/esm/operators/utils.d.ts +0 -4
- package/esm/operators/utils.js +0 -11
- package/esm/operators/utils.js.map +0 -1
- package/esm/options-parser.d.ts +0 -31
- package/esm/options-parser.js +0 -225
- package/esm/options-parser.js.map +0 -1
- package/esm/playground.d.ts +0 -1
- package/esm/playground.js +0 -53
- package/esm/playground.js.map +0 -1
- package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
- package/esm/relation-repository/belongs-to-many-repository.js +0 -199
- package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
- package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
- package/esm/relation-repository/belongs-to-repository.js +0 -4
- package/esm/relation-repository/belongs-to-repository.js.map +0 -1
- package/esm/relation-repository/hasmany-repository.d.ts +0 -23
- package/esm/relation-repository/hasmany-repository.js +0 -125
- package/esm/relation-repository/hasmany-repository.js.map +0 -1
- package/esm/relation-repository/hasone-repository.d.ts +0 -17
- package/esm/relation-repository/hasone-repository.js +0 -4
- package/esm/relation-repository/hasone-repository.js.map +0 -1
- package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
- package/esm/relation-repository/multiple-relation-repository.js +0 -149
- package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
- package/esm/relation-repository/relation-repository.d.ts +0 -32
- package/esm/relation-repository/relation-repository.js +0 -93
- package/esm/relation-repository/relation-repository.js.map +0 -1
- package/esm/relation-repository/single-relation-repository.d.ts +0 -23
- package/esm/relation-repository/single-relation-repository.js +0 -96
- package/esm/relation-repository/single-relation-repository.js.map +0 -1
- package/esm/relation-repository/types.d.ts +0 -7
- package/esm/relation-repository/types.js +0 -2
- package/esm/relation-repository/types.js.map +0 -1
- package/esm/repository.d.ts +0 -165
- package/esm/repository.js +0 -276
- package/esm/repository.js.map +0 -1
- package/esm/transaction-decorator.d.ts +0 -1
- package/esm/transaction-decorator.js +0 -63
- package/esm/transaction-decorator.js.map +0 -1
- package/esm/update-associations.d.ts +0 -60
- package/esm/update-associations.js +0 -362
- package/esm/update-associations.js.map +0 -1
- package/esm/update-guard.d.ts +0 -26
- package/esm/update-guard.js +0 -122
- package/esm/update-guard.js.map +0 -1
- package/lib/collection-importer.js.map +0 -1
- package/lib/collection.js.map +0 -1
- package/lib/database.js.map +0 -1
- package/lib/fields/array-field.js.map +0 -1
- package/lib/fields/belongs-to-field.js.map +0 -1
- package/lib/fields/belongs-to-many-field.js.map +0 -1
- package/lib/fields/boolean-field.js.map +0 -1
- package/lib/fields/context-field.js.map +0 -1
- package/lib/fields/date-field.js.map +0 -1
- package/lib/fields/field.js.map +0 -1
- package/lib/fields/has-inverse-field.js.map +0 -1
- package/lib/fields/has-many-field.js.map +0 -1
- package/lib/fields/has-one-field.js.map +0 -1
- package/lib/fields/index.js.map +0 -1
- package/lib/fields/json-field.js.map +0 -1
- package/lib/fields/number-field.js.map +0 -1
- package/lib/fields/password-field.js.map +0 -1
- package/lib/fields/radio-field.js.map +0 -1
- package/lib/fields/relation-field.js.map +0 -1
- package/lib/fields/sort-field.js.map +0 -1
- package/lib/fields/string-field.js.map +0 -1
- package/lib/fields/text-field.js.map +0 -1
- package/lib/fields/time-field.js.map +0 -1
- package/lib/fields/uid-field.js.map +0 -1
- package/lib/fields/virtual-field.js.map +0 -1
- package/lib/filter-parser.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/magic-attribute-model.js.map +0 -1
- package/lib/mock-database.js.map +0 -1
- package/lib/model-hook.js.map +0 -1
- package/lib/model.js.map +0 -1
- package/lib/operators/array.js.map +0 -1
- package/lib/operators/association.js.map +0 -1
- package/lib/operators/date.js.map +0 -1
- package/lib/operators/empty.js.map +0 -1
- package/lib/operators/index.js.map +0 -1
- package/lib/operators/ne.js.map +0 -1
- package/lib/operators/string.js.map +0 -1
- package/lib/operators/utils.js.map +0 -1
- package/lib/options-parser.js.map +0 -1
- package/lib/playground.js.map +0 -1
- package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
- package/lib/relation-repository/belongs-to-repository.js.map +0 -1
- package/lib/relation-repository/hasmany-repository.js.map +0 -1
- package/lib/relation-repository/hasone-repository.js.map +0 -1
- package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
- package/lib/relation-repository/relation-repository.js.map +0 -1
- package/lib/relation-repository/single-relation-repository.js.map +0 -1
- package/lib/relation-repository/types.js.map +0 -1
- package/lib/repository.js.map +0 -1
- package/lib/transaction-decorator.js.map +0 -1
- package/lib/update-associations.js.map +0 -1
- package/lib/update-guard.js.map +0 -1
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -5
package/esm/database.js
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
11
|
-
var t = {};
|
|
12
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
13
|
-
t[p] = s[p];
|
|
14
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
15
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
16
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17
|
-
t[p[i]] = s[p[i]];
|
|
18
|
-
}
|
|
19
|
-
return t;
|
|
20
|
-
};
|
|
21
|
-
import { applyMixins, AsyncEmitter } from '@nocobase/utils';
|
|
22
|
-
import { EventEmitter } from 'events';
|
|
23
|
-
import lodash from 'lodash';
|
|
24
|
-
import { Op, Sequelize, Utils } from 'sequelize';
|
|
25
|
-
import { Collection } from './collection';
|
|
26
|
-
import { ImporterReader } from './collection-importer';
|
|
27
|
-
import * as FieldTypes from './fields';
|
|
28
|
-
import { ModelHook } from './model-hook';
|
|
29
|
-
import extendOperators from './operators';
|
|
30
|
-
export class Database extends EventEmitter {
|
|
31
|
-
constructor(options) {
|
|
32
|
-
super();
|
|
33
|
-
this.fieldTypes = new Map();
|
|
34
|
-
this.models = new Map();
|
|
35
|
-
this.repositories = new Map();
|
|
36
|
-
this.operators = new Map();
|
|
37
|
-
this.collections = new Map();
|
|
38
|
-
this.pendingFields = new Map();
|
|
39
|
-
this.modelCollection = new Map();
|
|
40
|
-
this.delayCollectionExtend = new Map();
|
|
41
|
-
if (options instanceof Sequelize) {
|
|
42
|
-
this.sequelize = options;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.sequelize = new Sequelize(options);
|
|
46
|
-
this.options = options;
|
|
47
|
-
}
|
|
48
|
-
this.collections = new Map();
|
|
49
|
-
this.modelHook = new ModelHook(this);
|
|
50
|
-
this.on('afterDefineCollection', (collection) => {
|
|
51
|
-
var _a, _b;
|
|
52
|
-
// after collection defined, call bind method on pending fields
|
|
53
|
-
(_a = this.pendingFields.get(collection.name)) === null || _a === void 0 ? void 0 : _a.forEach((field) => field.bind());
|
|
54
|
-
(_b = this.delayCollectionExtend.get(collection.name)) === null || _b === void 0 ? void 0 : _b.forEach((collectionExtend) => {
|
|
55
|
-
collection.updateOptions(collectionExtend.collectionOptions, collectionExtend.mergeOptions);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
// register database field types
|
|
59
|
-
for (const [name, field] of Object.entries(FieldTypes)) {
|
|
60
|
-
if (['Field', 'RelationField'].includes(name)) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
let key = name.replace(/Field$/g, '');
|
|
64
|
-
key = key.substring(0, 1).toLowerCase() + key.substring(1);
|
|
65
|
-
this.registerFieldTypes({
|
|
66
|
-
[key]: field,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
this.initOperators();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Add collection to database
|
|
73
|
-
* @param options
|
|
74
|
-
*/
|
|
75
|
-
collection(options) {
|
|
76
|
-
this.emit('beforeDefineCollection', options);
|
|
77
|
-
const collection = new Collection(options, {
|
|
78
|
-
database: this,
|
|
79
|
-
});
|
|
80
|
-
this.collections.set(collection.name, collection);
|
|
81
|
-
this.modelCollection.set(collection.model, collection);
|
|
82
|
-
this.emit('afterDefineCollection', collection);
|
|
83
|
-
return collection;
|
|
84
|
-
}
|
|
85
|
-
getTablePrefix() {
|
|
86
|
-
return this.options.tablePrefix || '';
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* get exists collection by its name
|
|
90
|
-
* @param name
|
|
91
|
-
*/
|
|
92
|
-
getCollection(name) {
|
|
93
|
-
return this.collections.get(name);
|
|
94
|
-
}
|
|
95
|
-
hasCollection(name) {
|
|
96
|
-
return this.collections.has(name);
|
|
97
|
-
}
|
|
98
|
-
removeCollection(name) {
|
|
99
|
-
const collection = this.collections.get(name);
|
|
100
|
-
this.emit('beforeRemoveCollection', collection);
|
|
101
|
-
const result = this.collections.delete(name);
|
|
102
|
-
if (result) {
|
|
103
|
-
this.emit('afterRemoveCollection', collection);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
getModel(name) {
|
|
107
|
-
return this.getCollection(name).model;
|
|
108
|
-
}
|
|
109
|
-
getRepository(name, relationId) {
|
|
110
|
-
var _a, _b, _c;
|
|
111
|
-
if (relationId) {
|
|
112
|
-
const [collection, relation] = name.split('.');
|
|
113
|
-
return (_b = (_a = this.getRepository(collection)) === null || _a === void 0 ? void 0 : _a.relation(relation)) === null || _b === void 0 ? void 0 : _b.of(relationId);
|
|
114
|
-
}
|
|
115
|
-
return (_c = this.getCollection(name)) === null || _c === void 0 ? void 0 : _c.repository;
|
|
116
|
-
}
|
|
117
|
-
addPendingField(field) {
|
|
118
|
-
const associating = this.pendingFields;
|
|
119
|
-
const items = this.pendingFields.get(field.target) || [];
|
|
120
|
-
items.push(field);
|
|
121
|
-
associating.set(field.target, items);
|
|
122
|
-
}
|
|
123
|
-
removePendingField(field) {
|
|
124
|
-
const items = this.pendingFields.get(field.target) || [];
|
|
125
|
-
const index = items.indexOf(field);
|
|
126
|
-
if (index !== -1) {
|
|
127
|
-
delete items[index];
|
|
128
|
-
this.pendingFields.set(field.target, items);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
registerFieldTypes(fieldTypes) {
|
|
132
|
-
for (const [type, fieldType] of Object.entries(fieldTypes)) {
|
|
133
|
-
this.fieldTypes.set(type, fieldType);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
registerModels(models) {
|
|
137
|
-
for (const [type, schemaType] of Object.entries(models)) {
|
|
138
|
-
this.models.set(type, schemaType);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
registerRepositories(repositories) {
|
|
142
|
-
for (const [type, schemaType] of Object.entries(repositories)) {
|
|
143
|
-
this.repositories.set(type, schemaType);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
initOperators() {
|
|
147
|
-
const operators = new Map();
|
|
148
|
-
// Sequelize 内置
|
|
149
|
-
for (const key in Op) {
|
|
150
|
-
operators.set('$' + key, Op[key]);
|
|
151
|
-
const val = Utils.underscoredIf(key, true);
|
|
152
|
-
operators.set('$' + val, Op[key]);
|
|
153
|
-
operators.set('$' + val.replace(/_/g, ''), Op[key]);
|
|
154
|
-
}
|
|
155
|
-
this.operators = operators;
|
|
156
|
-
this.registerOperators(Object.assign({}, extendOperators));
|
|
157
|
-
}
|
|
158
|
-
registerOperators(operators) {
|
|
159
|
-
for (const [key, operator] of Object.entries(operators)) {
|
|
160
|
-
this.operators.set(key, operator);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
buildField(options, context) {
|
|
164
|
-
const { type } = options;
|
|
165
|
-
const Field = this.fieldTypes.get(type);
|
|
166
|
-
if (!Field) {
|
|
167
|
-
throw Error(`unsupported field type ${type}`);
|
|
168
|
-
}
|
|
169
|
-
return new Field(options, context);
|
|
170
|
-
}
|
|
171
|
-
sync(options) {
|
|
172
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
-
const isMySQL = this.sequelize.getDialect() === 'mysql';
|
|
174
|
-
if (isMySQL) {
|
|
175
|
-
yield this.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null);
|
|
176
|
-
}
|
|
177
|
-
const result = yield this.sequelize.sync(options);
|
|
178
|
-
if (isMySQL) {
|
|
179
|
-
yield this.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null);
|
|
180
|
-
}
|
|
181
|
-
return result;
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
clean(options) {
|
|
185
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
-
const { drop } = options, others = __rest(options, ["drop"]);
|
|
187
|
-
if (drop) {
|
|
188
|
-
yield this.sequelize.getQueryInterface().dropAllTables(others);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
isSqliteMemory() {
|
|
193
|
-
return this.sequelize.getDialect() === 'sqlite' && lodash.get(this.options, 'storage') == ':memory:';
|
|
194
|
-
}
|
|
195
|
-
reconnect() {
|
|
196
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
197
|
-
if (this.isSqliteMemory()) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
// @ts-ignore
|
|
201
|
-
const ConnectionManager = this.sequelize.dialect.connectionManager.constructor;
|
|
202
|
-
// @ts-ignore
|
|
203
|
-
const connectionManager = new ConnectionManager(this.sequelize.dialect, this.sequelize);
|
|
204
|
-
// @ts-ignore
|
|
205
|
-
this.sequelize.dialect.connectionManager = connectionManager;
|
|
206
|
-
// @ts-ignore
|
|
207
|
-
this.sequelize.connectionManager = connectionManager;
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
closed() {
|
|
211
|
-
// @ts-ignore
|
|
212
|
-
return this.sequelize.connectionManager.pool._draining;
|
|
213
|
-
}
|
|
214
|
-
close() {
|
|
215
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
216
|
-
if (this.isSqliteMemory()) {
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
return this.sequelize.close();
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
on(event, listener) {
|
|
223
|
-
const modelEventName = this.modelHook.isModelHook(event);
|
|
224
|
-
if (modelEventName && !this.modelHook.hasBindEvent(modelEventName)) {
|
|
225
|
-
this.sequelize.addHook(modelEventName, this.modelHook.sequelizeHookBuilder(modelEventName));
|
|
226
|
-
this.modelHook.bindEvent(modelEventName);
|
|
227
|
-
}
|
|
228
|
-
return super.on(event, listener);
|
|
229
|
-
}
|
|
230
|
-
import(options) {
|
|
231
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
232
|
-
const reader = new ImporterReader(options.directory, options.extensions);
|
|
233
|
-
const modules = yield reader.read();
|
|
234
|
-
const result = new Map();
|
|
235
|
-
for (const module of modules) {
|
|
236
|
-
if (module.extend) {
|
|
237
|
-
const collectionName = module.collectionOptions.name;
|
|
238
|
-
const existCollection = this.getCollection(collectionName);
|
|
239
|
-
if (existCollection) {
|
|
240
|
-
existCollection.updateOptions(module.collectionOptions, module.mergeOptions);
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
const existDelayExtends = this.delayCollectionExtend.get(collectionName) || [];
|
|
244
|
-
this.delayCollectionExtend.set(collectionName, [...existDelayExtends, module]);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
const collection = this.collection(module);
|
|
249
|
-
result.set(collection.name, collection);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
return result;
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
export function extend(collectionOptions, mergeOptions) {
|
|
257
|
-
return {
|
|
258
|
-
collectionOptions,
|
|
259
|
-
mergeOptions,
|
|
260
|
-
extend: true,
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
export const defineCollection = (collectionOptions) => {
|
|
264
|
-
return collectionOptions;
|
|
265
|
-
};
|
|
266
|
-
export const extendCollection = (collectionOptions, mergeOptions) => {
|
|
267
|
-
return {
|
|
268
|
-
collectionOptions,
|
|
269
|
-
mergeOptions,
|
|
270
|
-
extend: true,
|
|
271
|
-
};
|
|
272
|
-
};
|
|
273
|
-
applyMixins(Database, [AsyncEmitter]);
|
|
274
|
-
export default Database;
|
|
275
|
-
//# sourceMappingURL=database.js.map
|
package/esm/database.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyMixins, AsyncEmitter } from '@nocobase/utils';\nimport merge from 'deepmerge';\nimport { EventEmitter } from 'events';\nimport lodash from 'lodash';\nimport { ModelCtor, Op, Options, QueryInterfaceDropAllTablesOptions, Sequelize, SyncOptions, Utils } from 'sequelize';\nimport { Collection, CollectionOptions, RepositoryType } from './collection';\nimport { ImporterReader, ImportFileExtension } from './collection-importer';\nimport * as FieldTypes from './fields';\nimport { Field, FieldContext, RelationField } from './fields';\nimport { Model } from './model';\nimport { ModelHook } from './model-hook';\nimport extendOperators from './operators';\nimport { RelationRepository } from './relation-repository/relation-repository';\nimport { Repository } from './repository';\n\nexport interface MergeOptions extends merge.Options {}\n\nexport interface PendingOptions {\n field: RelationField;\n model: ModelCtor<Model>;\n}\n\ninterface MapOf<T> {\n [key: string]: T;\n}\n\nexport interface IDatabaseOptions extends Options {\n tablePrefix?: string;\n}\n\nexport type DatabaseOptions = IDatabaseOptions | Sequelize;\n\ninterface RegisterOperatorsContext {\n db?: Database;\n path?: string;\n field?: Field;\n app?: any;\n}\n\nexport interface CleanOptions extends QueryInterfaceDropAllTablesOptions {\n drop?: boolean;\n}\n\ntype OperatorFunc = (value: any, ctx?: RegisterOperatorsContext) => any;\n\nexport class Database extends EventEmitter implements AsyncEmitter {\n sequelize: Sequelize;\n fieldTypes = new Map();\n options: IDatabaseOptions;\n models = new Map<string, ModelCtor<Model>>();\n repositories = new Map<string, RepositoryType>();\n operators = new Map();\n collections = new Map<string, Collection>();\n pendingFields = new Map<string, RelationField[]>();\n modelCollection = new Map<ModelCtor<any>, Collection>();\n\n modelHook: ModelHook;\n\n delayCollectionExtend = new Map<string, { collectionOptions: CollectionOptions; mergeOptions?: any }[]>();\n\n constructor(options: DatabaseOptions) {\n super();\n\n if (options instanceof Sequelize) {\n this.sequelize = options;\n } else {\n this.sequelize = new Sequelize(options);\n this.options = options;\n }\n\n this.collections = new Map();\n this.modelHook = new ModelHook(this);\n\n this.on('afterDefineCollection', (collection: Collection) => {\n // after collection defined, call bind method on pending fields\n this.pendingFields.get(collection.name)?.forEach((field) => field.bind());\n this.delayCollectionExtend.get(collection.name)?.forEach((collectionExtend) => {\n collection.updateOptions(collectionExtend.collectionOptions, collectionExtend.mergeOptions);\n });\n });\n\n // register database field types\n for (const [name, field] of Object.entries(FieldTypes)) {\n if (['Field', 'RelationField'].includes(name)) {\n continue;\n }\n let key = name.replace(/Field$/g, '');\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n this.registerFieldTypes({\n [key]: field,\n });\n }\n\n this.initOperators();\n }\n\n /**\n * Add collection to database\n * @param options\n */\n collection<Attributes = any, CreateAttributes = Attributes>(\n options: CollectionOptions,\n ): Collection<Attributes, CreateAttributes> {\n this.emit('beforeDefineCollection', options);\n\n const collection = new Collection(options, {\n database: this,\n });\n\n this.collections.set(collection.name, collection);\n this.modelCollection.set(collection.model, collection);\n\n this.emit('afterDefineCollection', collection);\n\n return collection;\n }\n\n getTablePrefix() {\n return this.options.tablePrefix || '';\n }\n\n /**\n * get exists collection by its name\n * @param name\n */\n getCollection(name: string): Collection {\n return this.collections.get(name);\n }\n\n hasCollection(name: string): boolean {\n return this.collections.has(name);\n }\n\n removeCollection(name: string) {\n const collection = this.collections.get(name);\n this.emit('beforeRemoveCollection', collection);\n\n const result = this.collections.delete(name);\n\n if (result) {\n this.emit('afterRemoveCollection', collection);\n }\n }\n\n getModel<M extends Model>(name: string) {\n return this.getCollection(name).model as ModelCtor<M>;\n }\n\n getRepository<R extends Repository>(name: string): R;\n getRepository<R extends RelationRepository>(name: string, relationId: string | number): R;\n\n getRepository<R extends RelationRepository>(name: string, relationId?: string | number): Repository | R {\n if (relationId) {\n const [collection, relation] = name.split('.');\n return this.getRepository(collection)?.relation(relation)?.of(relationId) as R;\n }\n\n return this.getCollection(name)?.repository;\n }\n\n addPendingField(field: RelationField) {\n const associating = this.pendingFields;\n const items = this.pendingFields.get(field.target) || [];\n items.push(field);\n associating.set(field.target, items);\n }\n\n removePendingField(field: RelationField) {\n const items = this.pendingFields.get(field.target) || [];\n const index = items.indexOf(field);\n if (index !== -1) {\n delete items[index];\n this.pendingFields.set(field.target, items);\n }\n }\n\n registerFieldTypes(fieldTypes: MapOf<typeof Field>) {\n for (const [type, fieldType] of Object.entries(fieldTypes)) {\n this.fieldTypes.set(type, fieldType);\n }\n }\n\n registerModels(models: MapOf<ModelCtor<any>>) {\n for (const [type, schemaType] of Object.entries(models)) {\n this.models.set(type, schemaType);\n }\n }\n\n registerRepositories(repositories: MapOf<RepositoryType>) {\n for (const [type, schemaType] of Object.entries(repositories)) {\n this.repositories.set(type, schemaType);\n }\n }\n\n initOperators() {\n const operators = new Map();\n\n // Sequelize 内置\n for (const key in Op) {\n operators.set('$' + key, Op[key]);\n const val = Utils.underscoredIf(key, true);\n operators.set('$' + val, Op[key]);\n operators.set('$' + val.replace(/_/g, ''), Op[key]);\n }\n\n this.operators = operators;\n\n this.registerOperators({\n ...extendOperators,\n });\n }\n\n registerOperators(operators: MapOf<OperatorFunc>) {\n for (const [key, operator] of Object.entries(operators)) {\n this.operators.set(key, operator);\n }\n }\n\n buildField(options, context: FieldContext) {\n const { type } = options;\n const Field = this.fieldTypes.get(type);\n if (!Field) {\n throw Error(`unsupported field type ${type}`);\n }\n return new Field(options, context);\n }\n\n async sync(options?: SyncOptions) {\n const isMySQL = this.sequelize.getDialect() === 'mysql';\n if (isMySQL) {\n await this.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null);\n }\n const result = await this.sequelize.sync(options);\n if (isMySQL) {\n await this.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null);\n }\n return result;\n }\n\n async clean(options: CleanOptions) {\n const { drop, ...others } = options;\n if (drop) {\n await this.sequelize.getQueryInterface().dropAllTables(others);\n }\n }\n\n public isSqliteMemory() {\n return this.sequelize.getDialect() === 'sqlite' && lodash.get(this.options, 'storage') == ':memory:';\n }\n\n async reconnect() {\n if (this.isSqliteMemory()) {\n return;\n }\n // @ts-ignore\n const ConnectionManager = this.sequelize.dialect.connectionManager.constructor;\n // @ts-ignore\n const connectionManager = new ConnectionManager(this.sequelize.dialect, this.sequelize);\n // @ts-ignore\n this.sequelize.dialect.connectionManager = connectionManager;\n // @ts-ignore\n this.sequelize.connectionManager = connectionManager;\n }\n\n closed() {\n // @ts-ignore\n return this.sequelize.connectionManager.pool._draining;\n }\n\n async close() {\n if (this.isSqliteMemory()) {\n return;\n }\n\n return this.sequelize.close();\n }\n\n on(event: string | symbol, listener: (...args: any[]) => void): this {\n const modelEventName = this.modelHook.isModelHook(event);\n\n if (modelEventName && !this.modelHook.hasBindEvent(modelEventName)) {\n this.sequelize.addHook(modelEventName, this.modelHook.sequelizeHookBuilder(modelEventName));\n\n this.modelHook.bindEvent(modelEventName);\n }\n\n return super.on(event, listener);\n }\n\n async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>> {\n const reader = new ImporterReader(options.directory, options.extensions);\n const modules = await reader.read();\n const result = new Map<string, Collection>();\n\n for (const module of modules) {\n if (module.extend) {\n const collectionName = module.collectionOptions.name;\n const existCollection = this.getCollection(collectionName);\n if (existCollection) {\n existCollection.updateOptions(module.collectionOptions, module.mergeOptions);\n } else {\n const existDelayExtends = this.delayCollectionExtend.get(collectionName) || [];\n\n this.delayCollectionExtend.set(collectionName, [...existDelayExtends, module]);\n }\n } else {\n const collection = this.collection(module);\n result.set(collection.name, collection);\n }\n }\n\n return result;\n }\n\n emitAsync: (event: string | symbol, ...args: any[]) => Promise<boolean>;\n}\n\nexport function extend(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions) {\n return {\n collectionOptions,\n mergeOptions,\n extend: true,\n };\n}\n\nexport const defineCollection = (collectionOptions: CollectionOptions) => {\n return collectionOptions;\n};\n\nexport const extendCollection = (collectionOptions: CollectionOptions, mergeOptions?: MergeOptions) => {\n return {\n collectionOptions,\n mergeOptions,\n extend: true,\n };\n};\n\napplyMixins(Database, [AsyncEmitter]);\n\nexport default Database;\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BaseColumnFieldOptions, Field } from './field';
|
|
2
|
-
import { DataTypes } from 'sequelize';
|
|
3
|
-
export declare class ArrayField extends Field {
|
|
4
|
-
get dataType(): DataTypes.AbstractDataTypeConstructor;
|
|
5
|
-
sortValue(model: any): void;
|
|
6
|
-
bind(): void;
|
|
7
|
-
unbind(): void;
|
|
8
|
-
}
|
|
9
|
-
export interface ArrayFieldOptions extends BaseColumnFieldOptions {
|
|
10
|
-
type: 'array';
|
|
11
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Field } from './field';
|
|
2
|
-
import { DataTypes } from 'sequelize';
|
|
3
|
-
export class ArrayField extends Field {
|
|
4
|
-
get dataType() {
|
|
5
|
-
if (this.database.sequelize.getDialect() === 'postgres') {
|
|
6
|
-
return DataTypes.JSONB;
|
|
7
|
-
}
|
|
8
|
-
return DataTypes.JSON;
|
|
9
|
-
}
|
|
10
|
-
sortValue(model) {
|
|
11
|
-
const oldValue = model.get(this.options.name);
|
|
12
|
-
if (oldValue) {
|
|
13
|
-
const newValue = oldValue.sort();
|
|
14
|
-
model.set(this.options.name, newValue);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
bind() {
|
|
18
|
-
super.bind();
|
|
19
|
-
this.on('beforeSave', this.sortValue.bind(this));
|
|
20
|
-
}
|
|
21
|
-
unbind() {
|
|
22
|
-
super.unbind();
|
|
23
|
-
this.off('beforeSave', this.sortValue.bind(this));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=array-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array-field.js","sourceRoot":"","sources":["../../src/fields/array-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;YACvD,OAAO,SAAS,CAAC,KAAK,CAAC;SACxB;QAED,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,KAAK;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACxC;IACH,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;CACF","sourcesContent":["import { BaseColumnFieldOptions, Field } from './field';\nimport { DataTypes } from 'sequelize';\n\nexport class ArrayField extends Field {\n get dataType() {\n if (this.database.sequelize.getDialect() === 'postgres') {\n return DataTypes.JSONB;\n }\n\n return DataTypes.JSON;\n }\n\n sortValue(model) {\n const oldValue = model.get(this.options.name);\n\n if (oldValue) {\n const newValue = oldValue.sort();\n model.set(this.options.name, newValue);\n }\n }\n\n bind() {\n super.bind();\n this.on('beforeSave', this.sortValue.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeSave', this.sortValue.bind(this));\n }\n}\n\nexport interface ArrayFieldOptions extends BaseColumnFieldOptions {\n type: 'array';\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { BelongsToOptions as SequelizeBelongsToOptions } from 'sequelize';
|
|
2
|
-
import { BaseRelationFieldOptions, RelationField } from './relation-field';
|
|
3
|
-
export declare class BelongsToField extends RelationField {
|
|
4
|
-
static type: string;
|
|
5
|
-
get target(): any;
|
|
6
|
-
bind(): boolean;
|
|
7
|
-
unbind(): void;
|
|
8
|
-
}
|
|
9
|
-
export interface BelongsToFieldOptions extends BaseRelationFieldOptions, SequelizeBelongsToOptions {
|
|
10
|
-
type: 'belongsTo';
|
|
11
|
-
target?: string;
|
|
12
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { omit } from 'lodash';
|
|
2
|
-
import { Utils } from 'sequelize';
|
|
3
|
-
import { RelationField } from './relation-field';
|
|
4
|
-
export class BelongsToField extends RelationField {
|
|
5
|
-
get target() {
|
|
6
|
-
const { target, name } = this.options;
|
|
7
|
-
return target || Utils.pluralize(name);
|
|
8
|
-
}
|
|
9
|
-
bind() {
|
|
10
|
-
const { database, collection } = this.context;
|
|
11
|
-
const Target = this.TargetModel;
|
|
12
|
-
// if target model not exists, add it to pending field,
|
|
13
|
-
// it will bind later
|
|
14
|
-
if (!Target) {
|
|
15
|
-
database.addPendingField(this);
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
if (collection.model.associations[this.name]) {
|
|
19
|
-
delete collection.model.associations[this.name];
|
|
20
|
-
}
|
|
21
|
-
// define relation on sequelize model
|
|
22
|
-
const association = collection.model.belongsTo(Target, Object.assign({ as: this.name }, omit(this.options, ['name', 'type', 'target'])));
|
|
23
|
-
// inverse relation
|
|
24
|
-
// this.TargetModel.hasMany(collection.model);
|
|
25
|
-
// 建立关系之后从 pending 列表中删除
|
|
26
|
-
database.removePendingField(this);
|
|
27
|
-
if (!this.options.foreignKey) {
|
|
28
|
-
this.options.foreignKey = association.foreignKey;
|
|
29
|
-
}
|
|
30
|
-
if (!this.options.sourceKey) {
|
|
31
|
-
// @ts-ignore
|
|
32
|
-
this.options.sourceKey = association.sourceKey;
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
unbind() {
|
|
37
|
-
const { database, collection } = this.context;
|
|
38
|
-
// 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
|
|
39
|
-
database.removePendingField(this);
|
|
40
|
-
// 如果外键没有显式的创建,关系表也无反向关联字段,删除关系时,外键也删除掉
|
|
41
|
-
const tcoll = database.collections.get(this.target);
|
|
42
|
-
const foreignKey = this.options.foreignKey;
|
|
43
|
-
const field1 = collection.getField(foreignKey);
|
|
44
|
-
const field2 = tcoll.findField((field) => {
|
|
45
|
-
return field.type === 'hasMany' && field.foreignKey === foreignKey;
|
|
46
|
-
});
|
|
47
|
-
if (!field1 && !field2) {
|
|
48
|
-
collection.model.removeAttribute(foreignKey);
|
|
49
|
-
}
|
|
50
|
-
// 删掉 model 的关联字段
|
|
51
|
-
delete collection.model.associations[this.name];
|
|
52
|
-
// @ts-ignore
|
|
53
|
-
collection.model.refreshAttributes();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
BelongsToField.type = 'belongsTo';
|
|
57
|
-
//# sourceMappingURL=belongs-to-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-field.js","sourceRoot":"","sources":["../../src/fields/belongs-to-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAiD,KAAK,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAA4B,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,OAAO,cAAe,SAAQ,aAAa;IAG/C,IAAI,MAAM;QACR,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAEhC,uDAAuD;QACvD,qBAAqB;QACrB,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;SACd;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjD;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,kBACnD,EAAE,EAAE,IAAI,CAAC,IAAI,IACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EACjD,CAAC;QAEH,mBAAmB;QACnB,8CAA8C;QAE9C,wBAAwB;QACxB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;SAClD;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,aAAa;YACb,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;SAChD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,iCAAiC;QACjC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,uCAAuC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SAC9C;QACD,iBAAiB;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,aAAa;QACb,UAAU,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;;AAhEM,mBAAI,GAAG,WAAW,CAAC","sourcesContent":["import { omit } from 'lodash';\nimport { BelongsToOptions as SequelizeBelongsToOptions, Utils } from 'sequelize';\nimport { BaseRelationFieldOptions, RelationField } from './relation-field';\n\nexport class BelongsToField extends RelationField {\n static type = 'belongsTo';\n\n get target() {\n const { target, name } = this.options;\n return target || Utils.pluralize(name);\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n\n // if target model not exists, add it to pending field,\n // it will bind later\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n\n if (collection.model.associations[this.name]) {\n delete collection.model.associations[this.name];\n }\n\n // define relation on sequelize model\n const association = collection.model.belongsTo(Target, {\n as: this.name,\n ...omit(this.options, ['name', 'type', 'target']),\n });\n\n // inverse relation\n // this.TargetModel.hasMany(collection.model);\n\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n\n if (!this.options.sourceKey) {\n // @ts-ignore\n this.options.sourceKey = association.sourceKey;\n }\n\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 如果外键没有显式的创建,关系表也无反向关联字段,删除关系时,外键也删除掉\n const tcoll = database.collections.get(this.target);\n const foreignKey = this.options.foreignKey;\n const field1 = collection.getField(foreignKey);\n const field2 = tcoll.findField((field) => {\n return field.type === 'hasMany' && field.foreignKey === foreignKey;\n });\n if (!field1 && !field2) {\n collection.model.removeAttribute(foreignKey);\n }\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n // @ts-ignore\n collection.model.refreshAttributes();\n }\n}\n\nexport interface BelongsToFieldOptions extends BaseRelationFieldOptions, SequelizeBelongsToOptions {\n type: 'belongsTo';\n target?: string;\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BelongsToManyOptions as SequelizeBelongsToManyOptions } from 'sequelize';
|
|
2
|
-
import { MultipleRelationFieldOptions, RelationField } from './relation-field';
|
|
3
|
-
export declare class BelongsToManyField extends RelationField {
|
|
4
|
-
get through(): any;
|
|
5
|
-
bind(): boolean;
|
|
6
|
-
unbind(): void;
|
|
7
|
-
}
|
|
8
|
-
export interface BelongsToManyFieldOptions extends MultipleRelationFieldOptions, Omit<SequelizeBelongsToManyOptions, 'through'> {
|
|
9
|
-
type: 'belongsToMany';
|
|
10
|
-
through?: string;
|
|
11
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { omit } from 'lodash';
|
|
2
|
-
import { Utils } from 'sequelize';
|
|
3
|
-
import { RelationField } from './relation-field';
|
|
4
|
-
export class BelongsToManyField extends RelationField {
|
|
5
|
-
get through() {
|
|
6
|
-
return (this.options.through ||
|
|
7
|
-
Utils.camelize([this.context.collection.model.name, this.target]
|
|
8
|
-
.map((name) => name.toLowerCase())
|
|
9
|
-
.sort()
|
|
10
|
-
.join('_')));
|
|
11
|
-
}
|
|
12
|
-
bind() {
|
|
13
|
-
const { database, collection } = this.context;
|
|
14
|
-
const Target = this.TargetModel;
|
|
15
|
-
if (!Target) {
|
|
16
|
-
database.addPendingField(this);
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const through = this.through;
|
|
20
|
-
let Through;
|
|
21
|
-
if (database.hasCollection(through)) {
|
|
22
|
-
Through = database.getCollection(through);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
Through = database.collection({
|
|
26
|
-
name: through,
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(Through.model, 'isThrough', { value: true });
|
|
29
|
-
}
|
|
30
|
-
const association = collection.model.belongsToMany(Target, Object.assign(Object.assign({}, omit(this.options, ['name', 'type', 'target'])), { as: this.name, through: Through.model }));
|
|
31
|
-
// 建立关系之后从 pending 列表中删除
|
|
32
|
-
database.removePendingField(this);
|
|
33
|
-
if (!this.options.foreignKey) {
|
|
34
|
-
this.options.foreignKey = association.foreignKey;
|
|
35
|
-
}
|
|
36
|
-
if (!this.options.sourceKey) {
|
|
37
|
-
this.options.sourceKey = association.sourceKey;
|
|
38
|
-
}
|
|
39
|
-
if (!this.options.otherKey) {
|
|
40
|
-
this.options.otherKey = association.otherKey;
|
|
41
|
-
}
|
|
42
|
-
if (!this.options.through) {
|
|
43
|
-
this.options.through = this.through;
|
|
44
|
-
}
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
unbind() {
|
|
48
|
-
const { database, collection } = this.context;
|
|
49
|
-
// 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
|
|
50
|
-
database.removePendingField(this);
|
|
51
|
-
// 删掉 model 的关联字段
|
|
52
|
-
delete collection.model.associations[this.name];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=belongs-to-many-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-many-field.js","sourceRoot":"","sources":["../../src/fields/belongs-to-many-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAyD,KAAK,EAAE,MAAM,WAAW,CAAC;AAEzF,OAAO,EAAgC,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,IAAI,OAAO;QACT,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,OAAO;YACpB,KAAK,CAAC,QAAQ,CACZ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;iBAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;iBACjC,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,CAAC,CACb,CACF,CAAC;IACJ,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,OAAmB,CAAC;QAExB,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;YACnC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC3C;aAAM;YACL,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAC5B,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SACpE;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,kCACpD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,KACjD,EAAE,EAAE,IAAI,CAAC,IAAI,EACb,OAAO,EAAE,OAAO,CAAC,KAAK,IACtB,CAAC;QAEH,wBAAwB;QACxB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;SAClD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;SAChD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;SAC9C;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SACrC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,iCAAiC;QACjC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,iBAAiB;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;CACF","sourcesContent":["import { omit } from 'lodash';\nimport { BelongsToManyOptions as SequelizeBelongsToManyOptions, Utils } from 'sequelize';\nimport { Collection } from '../collection';\nimport { MultipleRelationFieldOptions, RelationField } from './relation-field';\n\nexport class BelongsToManyField extends RelationField {\n get through() {\n return (\n this.options.through ||\n Utils.camelize(\n [this.context.collection.model.name, this.target]\n .map((name) => name.toLowerCase())\n .sort()\n .join('_'),\n )\n );\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n const through = this.through;\n\n let Through: Collection;\n\n if (database.hasCollection(through)) {\n Through = database.getCollection(through);\n } else {\n Through = database.collection({\n name: through,\n });\n Object.defineProperty(Through.model, 'isThrough', { value: true });\n }\n\n const association = collection.model.belongsToMany(Target, {\n ...omit(this.options, ['name', 'type', 'target']),\n as: this.name,\n through: Through.model,\n });\n\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n if (!this.options.sourceKey) {\n this.options.sourceKey = association.sourceKey;\n }\n if (!this.options.otherKey) {\n this.options.otherKey = association.otherKey;\n }\n if (!this.options.through) {\n this.options.through = this.through;\n }\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n }\n}\n\nexport interface BelongsToManyFieldOptions\n extends MultipleRelationFieldOptions,\n Omit<SequelizeBelongsToManyOptions, 'through'> {\n type: 'belongsToMany';\n through?: string;\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { DataTypes } from 'sequelize';
|
|
2
|
-
import { BaseColumnFieldOptions, Field } from './field';
|
|
3
|
-
export declare class BooleanField extends Field {
|
|
4
|
-
get dataType(): DataTypes.AbstractDataTypeConstructor;
|
|
5
|
-
}
|
|
6
|
-
export interface BooleanFieldOptions extends BaseColumnFieldOptions {
|
|
7
|
-
type: 'boolean';
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boolean-field.js","sourceRoot":"","sources":["../../src/fields/boolean-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class BooleanField extends Field {\n get dataType() {\n return DataTypes.BOOLEAN;\n }\n}\n\nexport interface BooleanFieldOptions extends BaseColumnFieldOptions {\n type: 'boolean';\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { BaseColumnFieldOptions, Field } from './field';
|
|
2
|
-
export declare class ContextField extends Field {
|
|
3
|
-
get dataType(): any;
|
|
4
|
-
init(): void;
|
|
5
|
-
bind(): void;
|
|
6
|
-
unbind(): void;
|
|
7
|
-
}
|
|
8
|
-
export interface ContextFieldOptions extends BaseColumnFieldOptions {
|
|
9
|
-
type: 'context';
|
|
10
|
-
dataIndex: string;
|
|
11
|
-
dataType?: string;
|
|
12
|
-
createOnly?: boolean;
|
|
13
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import lodash from 'lodash';
|
|
11
|
-
import { DataTypes } from 'sequelize';
|
|
12
|
-
import { Field } from './field';
|
|
13
|
-
export class ContextField extends Field {
|
|
14
|
-
get dataType() {
|
|
15
|
-
const type = this.options.dataType || 'string';
|
|
16
|
-
return DataTypes[type.toUpperCase()] || DataTypes.STRING;
|
|
17
|
-
}
|
|
18
|
-
init() {
|
|
19
|
-
const { name, dataIndex } = this.options;
|
|
20
|
-
this.listener = (model, options) => __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
const { context } = options;
|
|
22
|
-
model.set(name, lodash.get(context, dataIndex));
|
|
23
|
-
model.changed(name, true);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
bind() {
|
|
27
|
-
super.bind();
|
|
28
|
-
const { createOnly } = this.options;
|
|
29
|
-
this.on('beforeCreate', this.listener);
|
|
30
|
-
if (!createOnly) {
|
|
31
|
-
this.on('beforeUpdate', this.listener);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
unbind() {
|
|
35
|
-
super.unbind();
|
|
36
|
-
const { createOnly } = this.options;
|
|
37
|
-
this.off('beforeCreate', this.listener);
|
|
38
|
-
if (!createOnly) {
|
|
39
|
-
this.off('beforeUpdate', this.listener);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=context-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-field.js","sourceRoot":"","sources":["../../src/fields/context-field.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,MAAM,IAAI,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACvD,OAAO,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IAC3D,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,CAAO,KAAY,EAAE,OAAO,EAAE,EAAE;YAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YAChD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAA,CAAC;IACJ,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxC;IACH,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;IACH,CAAC;CACF","sourcesContent":["import lodash from 'lodash';\nimport { DataTypes } from 'sequelize';\nimport { Model } from '../model';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class ContextField extends Field {\n get dataType() {\n const type: string = this.options.dataType || 'string';\n return DataTypes[type.toUpperCase()] || DataTypes.STRING;\n }\n\n init() {\n const { name, dataIndex } = this.options;\n this.listener = async (model: Model, options) => {\n const { context } = options;\n model.set(name, lodash.get(context, dataIndex));\n model.changed(name, true);\n };\n }\n\n bind() {\n super.bind();\n const { createOnly } = this.options;\n this.on('beforeCreate', this.listener);\n if (!createOnly) {\n this.on('beforeUpdate', this.listener);\n }\n }\n\n unbind() {\n super.unbind();\n const { createOnly } = this.options;\n this.off('beforeCreate', this.listener);\n if (!createOnly) {\n this.off('beforeUpdate', this.listener);\n }\n }\n}\n\nexport interface ContextFieldOptions extends BaseColumnFieldOptions {\n type: 'context';\n dataIndex: string;\n dataType?: string;\n createOnly?: boolean;\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { DataTypes } from 'sequelize';
|
|
2
|
-
import { BaseColumnFieldOptions, Field } from './field';
|
|
3
|
-
export declare class DateField extends Field {
|
|
4
|
-
get dataType(): DataTypes.DateDataTypeConstructor;
|
|
5
|
-
}
|
|
6
|
-
export interface DateFieldOptions extends BaseColumnFieldOptions {
|
|
7
|
-
type: 'date';
|
|
8
|
-
}
|
package/esm/fields/date-field.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-field.js","sourceRoot":"","sources":["../../src/fields/date-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class DateField extends Field {\n get dataType() {\n return DataTypes.DATE;\n }\n}\n\nexport interface DateFieldOptions extends BaseColumnFieldOptions {\n type: 'date';\n}\n"]}
|