@roomkit/state 1.1.3 → 1.2.0
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.
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* State Schema Decorators
|
|
2
|
+
* State Schema Decorators - TypeScript 5.0+ Standard
|
|
3
|
+
*
|
|
4
|
+
* 使用 TS 5.0+ 的标准装饰器,无需 experimentalDecorators
|
|
3
5
|
*/
|
|
4
|
-
import 'reflect-metadata';
|
|
5
6
|
import { FieldType, FieldMetadata } from '../types.js';
|
|
6
7
|
/**
|
|
7
|
-
* @Field -
|
|
8
|
+
* @Field - 定义一个可序列化的字段(TS 5.0+ 标准装饰器)
|
|
8
9
|
*
|
|
9
10
|
* @example
|
|
10
11
|
* ```typescript
|
|
@@ -15,9 +16,9 @@ import { FieldType, FieldMetadata } from '../types.js';
|
|
|
15
16
|
* }
|
|
16
17
|
* ```
|
|
17
18
|
*/
|
|
18
|
-
export declare function Field(type: FieldType, optional?: boolean): (
|
|
19
|
+
export declare function Field(type: FieldType, optional?: boolean): (_target: undefined, context: ClassFieldDecoratorContext) => void;
|
|
19
20
|
/**
|
|
20
|
-
* @MapField - 定义一个 Map
|
|
21
|
+
* @MapField - 定义一个 Map 集合字段(TS 5.0+ 标准装饰器)
|
|
21
22
|
*
|
|
22
23
|
* @example
|
|
23
24
|
* ```typescript
|
|
@@ -26,9 +27,9 @@ export declare function Field(type: FieldType, optional?: boolean): (target: any
|
|
|
26
27
|
* }
|
|
27
28
|
* ```
|
|
28
29
|
*/
|
|
29
|
-
export declare function MapField(valueType: Function): (
|
|
30
|
+
export declare function MapField(valueType: Function): (_target: undefined, context: ClassFieldDecoratorContext) => void;
|
|
30
31
|
/**
|
|
31
|
-
* @ArrayField - 定义一个 Array
|
|
32
|
+
* @ArrayField - 定义一个 Array 集合字段(TS 5.0+ 标准装饰器)
|
|
32
33
|
*
|
|
33
34
|
* @example
|
|
34
35
|
* ```typescript
|
|
@@ -38,9 +39,9 @@ export declare function MapField(valueType: Function): (target: any, propertyKey
|
|
|
38
39
|
* }
|
|
39
40
|
* ```
|
|
40
41
|
*/
|
|
41
|
-
export declare function ArrayField(type: FieldType): (
|
|
42
|
+
export declare function ArrayField(type: FieldType): (_target: undefined, context: ClassFieldDecoratorContext) => void;
|
|
42
43
|
/**
|
|
43
|
-
* @SetField - 定义一个 Set
|
|
44
|
+
* @SetField - 定义一个 Set 集合字段(TS 5.0+ 标准装饰器)
|
|
44
45
|
*
|
|
45
46
|
* @example
|
|
46
47
|
* ```typescript
|
|
@@ -49,7 +50,7 @@ export declare function ArrayField(type: FieldType): (target: any, propertyKey:
|
|
|
49
50
|
* }
|
|
50
51
|
* ```
|
|
51
52
|
*/
|
|
52
|
-
export declare function SetField(type: FieldType): (
|
|
53
|
+
export declare function SetField(type: FieldType): (_target: undefined, context: ClassFieldDecoratorContext) => void;
|
|
53
54
|
/**
|
|
54
55
|
* 获取类的所有字段元数据
|
|
55
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAiBtE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAE,OAAe,IAE5D,SAAS,SAAS,EAClB,SAAS,0BAA0B,UAgBtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,QAAQ,IAExC,SAAS,SAAS,EAClB,SAAS,0BAA0B,UActC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,IAEtC,SAAS,SAAS,EAClB,SAAS,0BAA0B,UActC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,IAEpC,SAAS,SAAS,EAClB,SAAS,0BAA0B,UActC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAgBzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAGrD"}
|
package/dist/decorators/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* State Schema Decorators
|
|
2
|
+
* State Schema Decorators - TypeScript 5.0+ Standard
|
|
3
|
+
*
|
|
4
|
+
* 使用 TS 5.0+ 的标准装饰器,无需 experimentalDecorators
|
|
3
5
|
*/
|
|
4
|
-
import 'reflect-metadata';
|
|
5
|
-
import { METADATA_KEYS } from '../types.js';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* 获取或创建类的字段元数据(TS 5.0+ 版本)
|
|
8
8
|
*/
|
|
9
9
|
function getOrCreateFieldsMetadata(target) {
|
|
10
10
|
if (!target)
|
|
11
11
|
return new Map();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
// 直接使用属性而不是 Symbol
|
|
13
|
+
const metadataKey = '__roomkit_fields__';
|
|
14
|
+
if (!target[metadataKey]) {
|
|
15
|
+
target[metadataKey] = new Map();
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return target[metadataKey];
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* @Field -
|
|
20
|
+
* @Field - 定义一个可序列化的字段(TS 5.0+ 标准装饰器)
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```typescript
|
|
@@ -29,20 +29,23 @@ function getOrCreateFieldsMetadata(target) {
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
export function Field(type, optional = false) {
|
|
32
|
-
return function (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
return function (_target, context) {
|
|
33
|
+
// 在类初始化时添加元数据
|
|
34
|
+
context.addInitializer(function () {
|
|
35
|
+
const fields = getOrCreateFieldsMetadata(this.constructor.prototype);
|
|
36
|
+
fields.set(context.name, {
|
|
37
|
+
key: context.name,
|
|
38
|
+
type,
|
|
39
|
+
isArray: false,
|
|
40
|
+
isMap: false,
|
|
41
|
+
isSet: false,
|
|
42
|
+
optional,
|
|
43
|
+
});
|
|
41
44
|
});
|
|
42
45
|
};
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
|
-
* @MapField - 定义一个 Map
|
|
48
|
+
* @MapField - 定义一个 Map 集合字段(TS 5.0+ 标准装饰器)
|
|
46
49
|
*
|
|
47
50
|
* @example
|
|
48
51
|
* ```typescript
|
|
@@ -52,19 +55,21 @@ export function Field(type, optional = false) {
|
|
|
52
55
|
* ```
|
|
53
56
|
*/
|
|
54
57
|
export function MapField(valueType) {
|
|
55
|
-
return function (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
return function (_target, context) {
|
|
59
|
+
context.addInitializer(function () {
|
|
60
|
+
const fields = getOrCreateFieldsMetadata(this.constructor.prototype);
|
|
61
|
+
fields.set(context.name, {
|
|
62
|
+
key: context.name,
|
|
63
|
+
type: valueType,
|
|
64
|
+
isArray: false,
|
|
65
|
+
isMap: true,
|
|
66
|
+
isSet: false,
|
|
67
|
+
});
|
|
63
68
|
});
|
|
64
69
|
};
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
67
|
-
* @ArrayField - 定义一个 Array
|
|
72
|
+
* @ArrayField - 定义一个 Array 集合字段(TS 5.0+ 标准装饰器)
|
|
68
73
|
*
|
|
69
74
|
* @example
|
|
70
75
|
* ```typescript
|
|
@@ -75,19 +80,21 @@ export function MapField(valueType) {
|
|
|
75
80
|
* ```
|
|
76
81
|
*/
|
|
77
82
|
export function ArrayField(type) {
|
|
78
|
-
return function (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
return function (_target, context) {
|
|
84
|
+
context.addInitializer(function () {
|
|
85
|
+
const fields = getOrCreateFieldsMetadata(this.constructor.prototype);
|
|
86
|
+
fields.set(context.name, {
|
|
87
|
+
key: context.name,
|
|
88
|
+
type,
|
|
89
|
+
isArray: true,
|
|
90
|
+
isMap: false,
|
|
91
|
+
isSet: false,
|
|
92
|
+
});
|
|
86
93
|
});
|
|
87
94
|
};
|
|
88
95
|
}
|
|
89
96
|
/**
|
|
90
|
-
* @SetField - 定义一个 Set
|
|
97
|
+
* @SetField - 定义一个 Set 集合字段(TS 5.0+ 标准装饰器)
|
|
91
98
|
*
|
|
92
99
|
* @example
|
|
93
100
|
* ```typescript
|
|
@@ -97,14 +104,16 @@ export function ArrayField(type) {
|
|
|
97
104
|
* ```
|
|
98
105
|
*/
|
|
99
106
|
export function SetField(type) {
|
|
100
|
-
return function (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
return function (_target, context) {
|
|
108
|
+
context.addInitializer(function () {
|
|
109
|
+
const fields = getOrCreateFieldsMetadata(this.constructor.prototype);
|
|
110
|
+
fields.set(context.name, {
|
|
111
|
+
key: context.name,
|
|
112
|
+
type,
|
|
113
|
+
isArray: false,
|
|
114
|
+
isMap: false,
|
|
115
|
+
isSet: true,
|
|
116
|
+
});
|
|
108
117
|
});
|
|
109
118
|
};
|
|
110
119
|
}
|
|
@@ -114,17 +123,16 @@ export function SetField(type) {
|
|
|
114
123
|
export function getFieldsMetadata(target) {
|
|
115
124
|
if (!target)
|
|
116
125
|
return new Map();
|
|
126
|
+
const metadataKey = '__roomkit_fields__';
|
|
117
127
|
// 尝试从实例获取
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
? Reflect.getMetadata(METADATA_KEYS.FIELDS, target.constructor.prototype)
|
|
125
|
-
: undefined;
|
|
128
|
+
if (target[metadataKey]) {
|
|
129
|
+
return target[metadataKey];
|
|
130
|
+
}
|
|
131
|
+
// 尝试从原型获取
|
|
132
|
+
if (target.constructor && target.constructor.prototype[metadataKey]) {
|
|
133
|
+
return target.constructor.prototype[metadataKey];
|
|
126
134
|
}
|
|
127
|
-
return
|
|
135
|
+
return new Map();
|
|
128
136
|
}
|
|
129
137
|
/**
|
|
130
138
|
* 检查对象是否有 State 装饰器定义
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roomkit/state",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "High-performance state synchronization library
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "High-performance state synchronization library with TypeScript 5.0+ decorators",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -63,8 +63,7 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
65
65
|
"fast-json-patch": "^3.1.1",
|
|
66
|
-
"pako": "^2.1.0"
|
|
67
|
-
"reflect-metadata": "^0.2.1"
|
|
66
|
+
"pako": "^2.1.0"
|
|
68
67
|
},
|
|
69
68
|
"devDependencies": {
|
|
70
69
|
"@types/node": "^20.10.0",
|