@ibyar/decorators 1.0.0 → 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.
- package/README.md +9 -0
- package/decorator/metadata.d.ts +11 -27
- package/decorator/metadata.d.ts.map +1 -1
- package/decorator/metadata.js +40 -59
- package/decorator/metadata.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -29,3 +29,12 @@ yarn add @ibyar/decorators
|
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Create you decorator that is aware of metadata context for [proposal-decorator-metadata](https://github.com/tc39/proposal-decorator-metadata)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## Compatibility
|
|
35
|
+
|
|
36
|
+
| Version | TS Version |
|
|
37
|
+
|---------|--------------|
|
|
38
|
+
| 1.0.0 | 5.0.0, 5.1.0 |
|
|
39
|
+
| 1.1.0 | 5.2.0, ... |
|
|
40
|
+
|
package/decorator/metadata.d.ts
CHANGED
|
@@ -11,34 +11,18 @@ declare global {
|
|
|
11
11
|
*/
|
|
12
12
|
readonly metadata: unique symbol;
|
|
13
13
|
}
|
|
14
|
-
interface ClassDecoratorContext<Class extends abstract new (...args: any) => any = abstract new (...args: any) => any> {
|
|
15
|
-
metadata: MetadataContext;
|
|
16
|
-
}
|
|
17
|
-
interface ClassMethodDecoratorContext {
|
|
18
|
-
metadata: MetadataContext;
|
|
19
|
-
}
|
|
20
|
-
interface ClassGetterDecoratorContext {
|
|
21
|
-
metadata: MetadataContext;
|
|
22
|
-
}
|
|
23
|
-
interface ClassFieldDecoratorContext {
|
|
24
|
-
metadata: MetadataContext;
|
|
25
|
-
}
|
|
26
|
-
interface ClassSetterDecoratorContext {
|
|
27
|
-
metadata: MetadataContext;
|
|
28
|
-
}
|
|
29
|
-
interface ClassAccessorDecoratorContext {
|
|
30
|
-
metadata: MetadataContext;
|
|
31
|
-
}
|
|
32
14
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
15
|
+
declare class ContextService {
|
|
16
|
+
private contextMap;
|
|
17
|
+
constructor(contextMap: WeakMap<Record<any, any>, Record<any, any>>);
|
|
18
|
+
has(key: Record<any, any>): boolean;
|
|
19
|
+
get(key: Record<any, any>): Record<any, any> | undefined;
|
|
20
|
+
getOrCreate(key: Record<any, any>): any;
|
|
21
|
+
private clone;
|
|
38
22
|
}
|
|
39
|
-
export declare
|
|
40
|
-
export declare function
|
|
41
|
-
export declare function makeClassDecorator<V, Type = any>(decorator?: (param: V, constructor: Type, context: ClassDecoratorContext<new (...args: any) => any>) => void): (param: V) => (constructor: any, context: ClassDecoratorContext<new (...args: any) => any>) => any;
|
|
23
|
+
export declare const metadataHoler: ContextService;
|
|
24
|
+
export declare function makeClassDecorator<V, Type = any>(decorator?: (param: V, constructor: Type, context: ClassDecoratorContext<new (...args: any) => any>, metadata: MetadataContext) => void): (param: V) => (constructor: any, context: ClassDecoratorContext<new (...args: any) => any>) => any;
|
|
42
25
|
export declare const Metadata: (param: void) => (constructor: any, context: ClassDecoratorContext<new (...args: any) => any>) => any;
|
|
43
|
-
export declare function makeClassMemberDecorator<Value, Context extends ClassMemberDecoratorContext = ClassMemberDecoratorContext>(decorator?: (value: Value | undefined, context: Context) => void): (value: Value, context: Context) => void;
|
|
26
|
+
export declare function makeClassMemberDecorator<Value, Context extends ClassMemberDecoratorContext = ClassMemberDecoratorContext>(decorator?: (value: Value | undefined, context: Context, metadata: MetadataContext) => void): (value: Value, context: Context) => void;
|
|
27
|
+
export {};
|
|
44
28
|
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/decorators/decorator/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;IAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC;AAE1G,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;CAEhE;AAED,OAAO,CAAC,MAAM,CAAC;IAEd,UAAU,iBAAiB;QAC1B;;WAEG;QACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC;KACjC;
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/decorators/decorator/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;IAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC;AAE1G,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;CAEhE;AAED,OAAO,CAAC,MAAM,CAAC;IAEd,UAAU,iBAAiB;QAC1B;;WAEG;QACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC;KACjC;CACD;AAYD,cAAM,cAAc;IACP,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE3E,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;IAIzB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;IAcjC,OAAO,CAAC,KAAK;CAcb;AAGD,eAAO,MAAM,aAAa,gBAAiC,CAAC;AAG5D,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,EAC/C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,WAExH,CAAC,mBACM,GAAG,+CAA+C,GAAG,KAAK,GAAG,UAMnF;AAED,eAAO,MAAM,QAAQ,iCARE,GAAG,+CAA+C,GAAG,KAAK,GAAG,SAQlC,CAAC;AAEnD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,EACxH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,WAE5E,KAAK,WAAW,OAAO,UAItC"}
|
package/decorator/metadata.js
CHANGED
|
@@ -3,75 +3,58 @@ if (!Symbol.metadata) {
|
|
|
3
3
|
configurable: false,
|
|
4
4
|
enumerable: false,
|
|
5
5
|
writable: false,
|
|
6
|
-
value: Symbol('metadata'),
|
|
6
|
+
value: Symbol('Symbol.metadata'),
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
class ContextService {
|
|
10
|
+
contextMap;
|
|
11
|
+
constructor(contextMap) {
|
|
12
|
+
this.contextMap = contextMap;
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
-
return
|
|
14
|
+
has(key) {
|
|
15
|
+
return this.contextMap.has(key);
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
return
|
|
17
|
+
get(key) {
|
|
18
|
+
return this.contextMap.get(key);
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const nextValue = next[key];
|
|
23
|
-
if (typeof previousValue === 'object' && typeof nextValue === 'object') {
|
|
24
|
-
if (Array.isArray(previousValue) && Array.isArray(nextValue)) {
|
|
25
|
-
previous[key] = previousValue.concat(nextValue)
|
|
26
|
-
.filter((value, index, array) => index === array.indexOf(value));
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
previous[key] = Object.assign(previousValue, nextValue);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
previous[key] = nextValue;
|
|
34
|
-
}
|
|
20
|
+
getOrCreate(key) {
|
|
21
|
+
if (this.contextMap.has(key)) {
|
|
22
|
+
return this.contextMap.get(key);
|
|
35
23
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return currentContext;
|
|
42
|
-
}
|
|
43
|
-
export function updateCurrentMetadata(context) {
|
|
44
|
-
currentContext = context ?? MetadataContext.create();
|
|
45
|
-
}
|
|
46
|
-
function updateConstructorMetadata(constructor) {
|
|
47
|
-
const pConstr = constructor.prototype?.constructor?.[Symbol.metadata];
|
|
48
|
-
if (pConstr) {
|
|
49
|
-
if (!constructor.hasOwnProperty(Symbol.metadata)) {
|
|
50
|
-
constructor[Symbol.metadata] = MetadataContext.inherits(pConstr);
|
|
24
|
+
const value = Object.create(null);
|
|
25
|
+
const prototype = Object.getPrototypeOf(key);
|
|
26
|
+
if (this.contextMap.has(prototype)) {
|
|
27
|
+
const parent = this.contextMap.get(prototype);
|
|
28
|
+
parent && this.clone(value, parent);
|
|
51
29
|
}
|
|
52
|
-
|
|
30
|
+
this.contextMap.set(key, value);
|
|
31
|
+
return value;
|
|
53
32
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
33
|
+
clone(child, parent) {
|
|
34
|
+
for (const property in parent) {
|
|
35
|
+
const parentValue = parent[property];
|
|
36
|
+
if (Array.isArray(parentValue)) {
|
|
37
|
+
child[property] = [...parentValue];
|
|
38
|
+
}
|
|
39
|
+
else if (typeof parentValue === 'undefined' || parentValue === null) {
|
|
40
|
+
child[property] = parentValue;
|
|
41
|
+
}
|
|
42
|
+
else if (typeof parentValue === 'object') {
|
|
43
|
+
child[property] = Object.assign(Object.create(null), parentValue);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
child[property] = parentValue;
|
|
47
|
+
}
|
|
60
48
|
}
|
|
61
49
|
}
|
|
62
|
-
return constructor[Symbol.metadata];
|
|
63
50
|
}
|
|
51
|
+
const contextMap = new WeakMap();
|
|
52
|
+
export const metadataHoler = new ContextService(contextMap);
|
|
64
53
|
export function makeClassDecorator(decorator) {
|
|
65
54
|
return (param) => {
|
|
66
|
-
updateCurrentMetadata();
|
|
67
55
|
return (constructor, context) => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
context.addInitializer(() => {
|
|
71
|
-
updateCurrentMetadata();
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
decorator?.(param, constructor, context);
|
|
56
|
+
const metadata = metadataHoler.getOrCreate(context.metadata);
|
|
57
|
+
decorator?.(param, constructor, context, metadata);
|
|
75
58
|
return constructor;
|
|
76
59
|
};
|
|
77
60
|
};
|
|
@@ -79,10 +62,8 @@ export function makeClassDecorator(decorator) {
|
|
|
79
62
|
export const Metadata = makeClassDecorator();
|
|
80
63
|
export function makeClassMemberDecorator(decorator) {
|
|
81
64
|
return (value, context) => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
decorator?.(value, context);
|
|
65
|
+
const metadata = metadataHoler.getOrCreate(context.metadata);
|
|
66
|
+
decorator?.(value, context, metadata);
|
|
86
67
|
};
|
|
87
68
|
}
|
|
88
69
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/decorators/decorator/metadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/decorators/decorator/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["export type MetadataClass<T = any> = { new(...args: any): T;[Symbol.metadata]: Record<PropertyKey, any> };\n\nexport interface MetadataContext extends Record<PropertyKey, any> {\n\n}\n\ndeclare global {\n\n\tinterface SymbolConstructor {\n\t\t/**\n\t\t * metadata symbol\n\t\t */\n\t\treadonly metadata: unique symbol;\n\t}\n}\n\nif (!Symbol.metadata) {\n\tObject.defineProperty(Symbol, 'metadata', {\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t\twritable: false,\n\t\tvalue: Symbol('Symbol.metadata'),\n\t});\n}\n\n\nclass ContextService {\n\tconstructor(private contextMap: WeakMap<Record<any, any>, Record<any, any>>) { }\n\n\thas(key: Record<any, any>) {\n\t\treturn this.contextMap.has(key);\n\t}\n\n\tget(key: Record<any, any>) {\n\t\treturn this.contextMap.get(key);\n\t}\n\n\tgetOrCreate(key: Record<any, any>) {\n\t\tif (this.contextMap.has(key)) {\n\t\t\treturn this.contextMap.get(key);\n\t\t}\n\t\tconst value = Object.create(null);\n\t\tconst prototype = Object.getPrototypeOf(key);\n\t\tif (this.contextMap.has(prototype)) {\n\t\t\tconst parent = this.contextMap.get(prototype);\n\t\t\tparent && this.clone(value, parent);\n\t\t}\n\t\tthis.contextMap.set(key, value);\n\t\treturn value;\n\t}\n\n\tprivate clone(child: MetadataContext, parent: MetadataContext): void {\n\t\tfor (const property in parent) {\n\t\t\tconst parentValue = parent[property];\n\t\t\tif (Array.isArray(parentValue)) {\n\t\t\t\tchild[property] = [...parentValue];\n\t\t\t} else if (typeof parentValue === 'undefined' || parentValue === null) {\n\t\t\t\tchild[property] = parentValue;\n\t\t\t} else if (typeof parentValue === 'object') {\n\t\t\t\tchild[property] = Object.assign(Object.create(null), parentValue);\n\t\t\t} else {\n\t\t\t\tchild[property] = parentValue;\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst contextMap = new WeakMap<Record<any, any>, Record<any, any>>();\nexport const metadataHoler = new ContextService(contextMap);\n\n\nexport function makeClassDecorator<V, Type = any>(\n\tdecorator?: (param: V, constructor: Type, context: ClassDecoratorContext<new (...args: any) => any>, metadata: MetadataContext) => void\n) {\n\treturn (param: V) => {\n\t\treturn (constructor: any, context: ClassDecoratorContext<new (...args: any) => any>) => {\n\t\t\tconst metadata = metadataHoler.getOrCreate(context.metadata);\n\t\t\tdecorator?.(param, constructor, context, metadata);\n\t\t\treturn constructor;\n\t\t};\n\t};\n}\n\nexport const Metadata = makeClassDecorator<void>();\n\nexport function makeClassMemberDecorator<Value, Context extends ClassMemberDecoratorContext = ClassMemberDecoratorContext>(\n\tdecorator?: (value: Value | undefined, context: Context, metadata: MetadataContext) => void\n) {\n\treturn (value: Value, context: Context) => {\n\t\tconst metadata = metadataHoler.getOrCreate(context.metadata);\n\t\tdecorator?.(value, context, metadata);\n\t};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibyar/decorators",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Ibyar Decorators is implementations for proposal-decorator-metadata",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ibyar/aurora/tree/dev/packages/decorators",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"tslib": "^2.
|
|
36
|
+
"tslib": "^2.6.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"typescript": "^5.
|
|
39
|
+
"typescript": "^5.3.3"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "tsc --build --verbose"
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"typescript",
|
|
49
49
|
"front-end"
|
|
50
50
|
],
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "85a94555492c9cf4c4a985f5972ebd5009708775"
|
|
52
52
|
}
|