@nocobase/database 0.7.3-alpha.1 → 0.7.4-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/fields/uid-field.d.ts +3 -0
- package/lib/fields/uid-field.js +25 -5
- package/package.json +3 -3
- package/src/fields/uid-field.ts +23 -5
|
@@ -3,8 +3,11 @@ import { BaseColumnFieldOptions, Field } from './field';
|
|
|
3
3
|
export declare class UidField extends Field {
|
|
4
4
|
get dataType(): DataTypes.StringDataTypeConstructor;
|
|
5
5
|
init(): void;
|
|
6
|
+
bind(): void;
|
|
7
|
+
unbind(): void;
|
|
6
8
|
}
|
|
7
9
|
export interface UidFieldOptions extends BaseColumnFieldOptions {
|
|
8
10
|
type: 'uid';
|
|
9
11
|
prefix?: string;
|
|
12
|
+
pattern?: string;
|
|
10
13
|
}
|
package/lib/fields/uid-field.js
CHANGED
|
@@ -40,19 +40,39 @@ class UidField extends _field.Field {
|
|
|
40
40
|
const _this$options = this.options,
|
|
41
41
|
name = _this$options.name,
|
|
42
42
|
_this$options$prefix = _this$options.prefix,
|
|
43
|
-
prefix = _this$options$prefix === void 0 ? '' : _this$options$prefix
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
prefix = _this$options$prefix === void 0 ? '' : _this$options$prefix,
|
|
44
|
+
pattern = _this$options.pattern;
|
|
45
|
+
const re = new RegExp(pattern || '^[A-Za-z0-9][A-Za-z0-9_-]*$');
|
|
46
|
+
|
|
47
|
+
this.listener = /*#__PURE__*/function () {
|
|
46
48
|
var _ref = _asyncToGenerator(function* (instance) {
|
|
47
|
-
|
|
49
|
+
const value = instance.get(name);
|
|
50
|
+
|
|
51
|
+
if (!value) {
|
|
48
52
|
instance.set(name, `${prefix}${(0, _utils().uid)()}`);
|
|
53
|
+
} else if (re.test(value)) {
|
|
54
|
+
instance.set(name, value);
|
|
55
|
+
} else {
|
|
56
|
+
throw new Error(`uid '${value}' is invalid`);
|
|
49
57
|
}
|
|
50
58
|
});
|
|
51
59
|
|
|
52
60
|
return function (_x) {
|
|
53
61
|
return _ref.apply(this, arguments);
|
|
54
62
|
};
|
|
55
|
-
}()
|
|
63
|
+
}();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
bind() {
|
|
67
|
+
super.bind();
|
|
68
|
+
this.on('beforeCreate', this.listener);
|
|
69
|
+
this.on('beforeUpdate', this.listener);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
unbind() {
|
|
73
|
+
super.unbind();
|
|
74
|
+
this.off('beforeCreate', this.listener);
|
|
75
|
+
this.off('beforeUpdate', this.listener);
|
|
56
76
|
}
|
|
57
77
|
|
|
58
78
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/database",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4-alpha.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@nocobase/utils": "0.7.
|
|
15
|
+
"@nocobase/utils": "0.7.4-alpha.1",
|
|
16
16
|
"async-mutex": "^0.3.2",
|
|
17
17
|
"deepmerge": "^4.2.2",
|
|
18
18
|
"flat": "^5.0.2",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
31
31
|
"directory": "packages/database"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "543eb1c0308bb72a5ba54f208586cd78bfda8fa9"
|
|
34
34
|
}
|
package/src/fields/uid-field.ts
CHANGED
|
@@ -8,17 +8,35 @@ export class UidField extends Field {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
init() {
|
|
11
|
-
const { name, prefix = '' } = this.options;
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const { name, prefix = '', pattern } = this.options;
|
|
12
|
+
const re = new RegExp(pattern || '^[A-Za-z0-9][A-Za-z0-9_-]*$');
|
|
13
|
+
this.listener = async (instance) => {
|
|
14
|
+
const value = instance.get(name);
|
|
15
|
+
if (!value) {
|
|
15
16
|
instance.set(name, `${prefix}${uid()}`);
|
|
17
|
+
} else if (re.test(value)) {
|
|
18
|
+
instance.set(name, value);
|
|
19
|
+
} else {
|
|
20
|
+
throw new Error(`uid '${value}' is invalid`);
|
|
16
21
|
}
|
|
17
|
-
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
bind() {
|
|
26
|
+
super.bind();
|
|
27
|
+
this.on('beforeCreate', this.listener);
|
|
28
|
+
this.on('beforeUpdate', this.listener);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
unbind() {
|
|
32
|
+
super.unbind();
|
|
33
|
+
this.off('beforeCreate', this.listener);
|
|
34
|
+
this.off('beforeUpdate', this.listener);
|
|
18
35
|
}
|
|
19
36
|
}
|
|
20
37
|
|
|
21
38
|
export interface UidFieldOptions extends BaseColumnFieldOptions {
|
|
22
39
|
type: 'uid';
|
|
23
40
|
prefix?: string;
|
|
41
|
+
pattern?: string;
|
|
24
42
|
}
|