ts-ref-kit 1.0.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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/index.d.ts +3 -0
- package/dist/parser/index.js +4 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/path-match.d.ts +7 -0
- package/dist/parser/path-match.js +37 -0
- package/dist/parser/path-match.js.map +1 -0
- package/dist/parser/reflect-loader.d.ts +9 -0
- package/dist/parser/reflect-loader.js +93 -0
- package/dist/parser/reflect-loader.js.map +1 -0
- package/dist/parser/reflect-parser-plugin.d.ts +7 -0
- package/dist/parser/reflect-parser-plugin.js +27 -0
- package/dist/parser/reflect-parser-plugin.js.map +1 -0
- package/dist/parser/reflect-parser.d.ts +74 -0
- package/dist/parser/reflect-parser.js +611 -0
- package/dist/parser/reflect-parser.js.map +1 -0
- package/dist/reflect-json/Mappable.d.ts +13 -0
- package/dist/reflect-json/Mappable.js +48 -0
- package/dist/reflect-json/Mappable.js.map +1 -0
- package/dist/reflect-json/decorate.d.ts +18 -0
- package/dist/reflect-json/decorate.js +62 -0
- package/dist/reflect-json/decorate.js.map +1 -0
- package/dist/reflect-json/index.d.ts +6 -0
- package/dist/reflect-json/index.js +7 -0
- package/dist/reflect-json/index.js.map +1 -0
- package/dist/reflect-json/json-translation.d.ts +38 -0
- package/dist/reflect-json/json-translation.js +243 -0
- package/dist/reflect-json/json-translation.js.map +1 -0
- package/dist/reflect-json/reflect-extension.d.ts +13 -0
- package/dist/reflect-json/reflect-extension.js +30 -0
- package/dist/reflect-json/reflect-extension.js.map +1 -0
- package/dist/reflect-json/types.d.ts +15 -0
- package/dist/reflect-json/types.js +2 -0
- package/dist/reflect-json/types.js.map +1 -0
- package/dist/reflect-json/utils.d.ts +9 -0
- package/dist/reflect-json/utils.js +48 -0
- package/dist/reflect-json/utils.js.map +1 -0
- package/dist/reflect-types/ClassDefinition.d.ts +26 -0
- package/dist/reflect-types/ClassDefinition.js +90 -0
- package/dist/reflect-types/ClassDefinition.js.map +1 -0
- package/dist/reflect-types/EnumDefinition.d.ts +8 -0
- package/dist/reflect-types/EnumDefinition.js +20 -0
- package/dist/reflect-types/EnumDefinition.js.map +1 -0
- package/dist/reflect-types/InterfaceDefinition.d.ts +16 -0
- package/dist/reflect-types/InterfaceDefinition.js +49 -0
- package/dist/reflect-types/InterfaceDefinition.js.map +1 -0
- package/dist/reflect-types/MethodDefinition.d.ts +15 -0
- package/dist/reflect-types/MethodDefinition.js +21 -0
- package/dist/reflect-types/MethodDefinition.js.map +1 -0
- package/dist/reflect-types/PropertyDefinition.d.ts +18 -0
- package/dist/reflect-types/PropertyDefinition.js +15 -0
- package/dist/reflect-types/PropertyDefinition.js.map +1 -0
- package/dist/reflect-types/assert-type.d.ts +12 -0
- package/dist/reflect-types/assert-type.js +35 -0
- package/dist/reflect-types/assert-type.js.map +1 -0
- package/dist/reflect-types/function-validate.d.ts +10 -0
- package/dist/reflect-types/function-validate.js +77 -0
- package/dist/reflect-types/function-validate.js.map +1 -0
- package/dist/reflect-types/index.d.ts +11 -0
- package/dist/reflect-types/index.js +12 -0
- package/dist/reflect-types/index.js.map +1 -0
- package/dist/reflect-types/package.d.ts +13 -0
- package/dist/reflect-types/package.js +25 -0
- package/dist/reflect-types/package.js.map +1 -0
- package/dist/reflect-types/reflect-context.d.ts +16 -0
- package/dist/reflect-types/reflect-context.js +109 -0
- package/dist/reflect-types/reflect-context.js.map +1 -0
- package/dist/reflect-types/reflect-definitions.d.ts +100 -0
- package/dist/reflect-types/reflect-definitions.js +29 -0
- package/dist/reflect-types/reflect-definitions.js.map +1 -0
- package/dist/reflect-types/reflect-types.d.ts +20 -0
- package/dist/reflect-types/reflect-types.js +83 -0
- package/dist/reflect-types/reflect-types.js.map +1 -0
- package/dist/reflect-types/reflect-validate.d.ts +24 -0
- package/dist/reflect-types/reflect-validate.js +313 -0
- package/dist/reflect-types/reflect-validate.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getClassByName, getClassDefinition, isArrayType } from '../reflect-types';
|
|
2
|
+
import { registerSerializedProperty, setDefaultIgnored } from './json-translation';
|
|
3
|
+
const mapStatus = new Map();
|
|
4
|
+
export function registerMappable(mappableClass) {
|
|
5
|
+
if (mapStatus.get(mappableClass))
|
|
6
|
+
return;
|
|
7
|
+
const classDef = getClassDefinition(mappableClass);
|
|
8
|
+
const mapping = new Proxy({}, {
|
|
9
|
+
get(target, p) {
|
|
10
|
+
return doMap(p);
|
|
11
|
+
},
|
|
12
|
+
set(target, p, newValue) {
|
|
13
|
+
doMap(p)(newValue);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
function doMap(propName) {
|
|
18
|
+
return (fieldName, transform) => {
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
const propType = (_b = (_a = Object.values((classDef === null || classDef === void 0 ? void 0 : classDef.allProperties) || {})) === null || _a === void 0 ? void 0 : _a.find(it => it.name === propName)) === null || _b === void 0 ? void 0 : _b.type;
|
|
21
|
+
let propClass = (propType === null || propType === void 0 ? void 0 : propType.name) !== undefined ? getClassByName(propType.name) : undefined;
|
|
22
|
+
if (propType && isArrayType(propType)) {
|
|
23
|
+
propClass =
|
|
24
|
+
((_c = propType.arrayElementType) === null || _c === void 0 ? void 0 : _c.name) !== undefined
|
|
25
|
+
? getClassByName(propType.arrayElementType.name)
|
|
26
|
+
: undefined;
|
|
27
|
+
}
|
|
28
|
+
if (typeof propName !== 'string')
|
|
29
|
+
return;
|
|
30
|
+
registerSerializedProperty(mappableClass.prototype, propName, {
|
|
31
|
+
name: fieldName,
|
|
32
|
+
class: propClass,
|
|
33
|
+
fromJSON: transform === null || transform === void 0 ? void 0 : transform.fromJSON,
|
|
34
|
+
toJSON: transform === null || transform === void 0 ? void 0 : transform.toJSON
|
|
35
|
+
});
|
|
36
|
+
setDefaultIgnored(mappableClass, true);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
mappableClass.prototype.mapping(mapping);
|
|
40
|
+
mapStatus.set(mappableClass, true);
|
|
41
|
+
}
|
|
42
|
+
export function mapAllProperties(target, map) {
|
|
43
|
+
const classDef = getClassDefinition(target);
|
|
44
|
+
if (!classDef)
|
|
45
|
+
return;
|
|
46
|
+
classDef.properties.forEach(prop => map[prop.name]());
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Mappable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mappable.js","sourceRoot":"","sources":["../../src/reflect-json/Mappable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEtG,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAgBlF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAA;AAE5D,MAAM,UAAU,gBAAgB,CAAqB,aAAuB;IACxE,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAM;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,KAAK,CACrB,EAAE,EACF;QACI,GAAG,CAAC,MAAc,EAAE,CAAkB;YAClC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QACD,GAAG,CAAC,MAAc,EAAE,CAAkB,EAAE,QAAgB;YACpD,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAClB,OAAO,IAAI,CAAA;QACf,CAAC;KACJ,CACU,CAAA;IAEf,SAAS,KAAK,CAAC,QAAyB;QACpC,OAAO,CACH,SAAkB,EAClB,SAGC,EACH,EAAE;;YACA,MAAM,QAAQ,GAAG,MAAA,MAAA,MAAM,CAAC,MAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,KAAI,EAAE,CAAC,0CAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,0CAAE,IAAI,CAAA;YACrG,IAAI,SAAS,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACxF,IAAI,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,SAAS;oBACL,CAAA,MAAA,QAAQ,CAAC,gBAAgB,0CAAE,IAAI,MAAK,SAAS;wBACzC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBAChD,CAAC,CAAC,SAAS,CAAA;YACvB,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,OAAM;YACxC,0BAA0B,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAC1D,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ;gBAC7B,MAAM,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM;aAC5B,CAAC,CAAA;YACF,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC,CAAA;IACL,CAAC;IAED,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAqB,MAAS,EAAE,GAAe;IAC3E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAe,CAAC,EAAE,CAAC,CAAA;AACpE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReflectPropertyKey } from './reflect-extension';
|
|
2
|
+
import type { Any } from './types';
|
|
3
|
+
export declare function defineDecoratedProperty(metaKey: symbol): PropertyDecorator;
|
|
4
|
+
export declare function callDecoratedMethod<Self extends object>(self: Self, metaKey: symbol, ...args: Any[]): Any | undefined;
|
|
5
|
+
export declare function hasDecoratedMethod<Self extends object>(self: Self, metaKey: symbol): boolean;
|
|
6
|
+
export declare function getDecoratedProperty(target: object, metaKey: symbol): ReflectPropertyKey | undefined;
|
|
7
|
+
export declare function getDecoratedPropertyValue<V>(target: object, metaKey: symbol): V | undefined;
|
|
8
|
+
export declare const PropertyWrapper: IPropertyWrapper;
|
|
9
|
+
type IPropertyWrapper = {
|
|
10
|
+
getField: (owner: object, property: ReflectPropertyKey, fieldSymbol: symbol) => Any;
|
|
11
|
+
setField: (owner: object, property: ReflectPropertyKey, newValue: Any, fieldSymbol: symbol) => void;
|
|
12
|
+
} & (<T>({ getter, setter, fieldSymbol }: {
|
|
13
|
+
getter?: (self: object, property: ReflectPropertyKey) => T;
|
|
14
|
+
setter?: (self: object, newValue: T, property: ReflectPropertyKey) => void;
|
|
15
|
+
fieldSymbol: symbol;
|
|
16
|
+
}) => PropertyDecorator);
|
|
17
|
+
export declare function Lazy(creator: (self: object, property: ReflectPropertyKey) => Any): PropertyDecorator;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getAnyValue, setAnyValue } from './utils';
|
|
2
|
+
export function defineDecoratedProperty(metaKey) {
|
|
3
|
+
return ((self, propertyKey) => Reflect.defineMetadata(metaKey, propertyKey, self.constructor));
|
|
4
|
+
}
|
|
5
|
+
export function callDecoratedMethod(self, metaKey, ...args) {
|
|
6
|
+
const method = getDecoratedPropertyValue(self, metaKey);
|
|
7
|
+
if (method !== undefined && method instanceof Function) {
|
|
8
|
+
return method.apply(self, args);
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
export function hasDecoratedMethod(self, metaKey) {
|
|
13
|
+
const method = getDecoratedPropertyValue(self, metaKey);
|
|
14
|
+
return method !== undefined && method instanceof Function;
|
|
15
|
+
}
|
|
16
|
+
export function getDecoratedProperty(target, metaKey) {
|
|
17
|
+
return Reflect.getMetadata(metaKey, target.constructor);
|
|
18
|
+
}
|
|
19
|
+
export function getDecoratedPropertyValue(target, metaKey) {
|
|
20
|
+
const propName = getDecoratedProperty(target, metaKey);
|
|
21
|
+
if (propName === undefined)
|
|
22
|
+
return;
|
|
23
|
+
return getAnyValue(target, propName);
|
|
24
|
+
}
|
|
25
|
+
export const PropertyWrapper = function ({ getter, setter, fieldSymbol }) {
|
|
26
|
+
return (target, propertyKey) => {
|
|
27
|
+
Object.defineProperty(target, propertyKey, {
|
|
28
|
+
get: function () {
|
|
29
|
+
return getter ? getter(this, propertyKey) : PropertyWrapper.getField(target, propertyKey, fieldSymbol);
|
|
30
|
+
},
|
|
31
|
+
set: function (newValue) {
|
|
32
|
+
setter
|
|
33
|
+
? setter(this, newValue, propertyKey)
|
|
34
|
+
: PropertyWrapper.setField(target, propertyKey, newValue, fieldSymbol);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
setAnyValue(PropertyWrapper, 'getField', (owner, property, fieldSymbol) => { var _a; return (_a = getAnyValue(owner, fieldSymbol)) === null || _a === void 0 ? void 0 : _a[property]; });
|
|
40
|
+
setAnyValue(PropertyWrapper, 'setField', (owner, property, newValue, fieldSymbol) => {
|
|
41
|
+
const fields = getAnyValue(owner, fieldSymbol) || {};
|
|
42
|
+
fields[property] = newValue;
|
|
43
|
+
setAnyValue(owner, fieldSymbol, fields);
|
|
44
|
+
});
|
|
45
|
+
export function Lazy(creator) {
|
|
46
|
+
const symbol = Symbol('lazy');
|
|
47
|
+
return PropertyWrapper({
|
|
48
|
+
getter: (target, property) => {
|
|
49
|
+
const stored = PropertyWrapper.getField(target, property, symbol);
|
|
50
|
+
if (stored)
|
|
51
|
+
return stored.value;
|
|
52
|
+
const value = creator(target, property);
|
|
53
|
+
PropertyWrapper.setField(target, property, { value }, symbol);
|
|
54
|
+
return value;
|
|
55
|
+
},
|
|
56
|
+
setter: () => {
|
|
57
|
+
// do nothing
|
|
58
|
+
},
|
|
59
|
+
fieldSymbol: symbol
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=decorate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorate.js","sourceRoot":"","sources":["../../src/reflect-json/decorate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reflect-json/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Any, AnyObject, Class, ClassOrInstance, JsonObject, JsonValue } from './types';
|
|
3
|
+
type FromJSON<T> = (jsonValue: JsonValue) => T;
|
|
4
|
+
type ToJSON<T> = (obj: T) => JsonValue;
|
|
5
|
+
type SerializedOptions<T> = {
|
|
6
|
+
name?: string;
|
|
7
|
+
class?: Class<T>;
|
|
8
|
+
fromJSON?: FromJSON<T>;
|
|
9
|
+
toJSON?: ToJSON<T>;
|
|
10
|
+
};
|
|
11
|
+
export declare function setDefaultIgnored(clazz: Class<Any>, defaultIgnored: boolean): void;
|
|
12
|
+
export declare function registerSerializedProperty(target: AnyObject, propName: string, options: SerializedOptions<Any>): void;
|
|
13
|
+
export declare const SerializedClass: PropertyDecorator;
|
|
14
|
+
export declare function Serialized<T extends object>(options?: SerializedOptions<T>): PropertyDecorator;
|
|
15
|
+
export declare function SerializedName(serializedName: string): PropertyDecorator;
|
|
16
|
+
export declare const IgnoreSerialization: PropertyDecorator;
|
|
17
|
+
/**
|
|
18
|
+
* serialize an object to json string
|
|
19
|
+
*/
|
|
20
|
+
export declare function serialize<T>(value: T): string;
|
|
21
|
+
export declare function serializeTo<T>(value: T): JsonValue;
|
|
22
|
+
/**
|
|
23
|
+
* convert an object to data object
|
|
24
|
+
*/
|
|
25
|
+
export declare function serializeToData<T extends object>(object: T): JsonObject | JsonObject[];
|
|
26
|
+
export declare function deserialize<T>(json: string | JsonValue, constructorOrTarget?: ClassOrInstance<T>): T;
|
|
27
|
+
export declare function deserializeArray<T>(json: string | JsonValue[], clazz?: Class<T>): T[];
|
|
28
|
+
export declare function deserializeFrom<T extends AnyObject>(data: JsonObject, target: T): void;
|
|
29
|
+
export declare function getSerializeSettings(clazz: Class<Any>): any;
|
|
30
|
+
export interface JsonValueTransform<T> {
|
|
31
|
+
fromJson: FromJSON<T>;
|
|
32
|
+
toJson: ToJSON<T>;
|
|
33
|
+
}
|
|
34
|
+
export declare function registerTransform<T>(clazz: Class<T>, transform: JsonValueTransform<T>): void;
|
|
35
|
+
export declare const itSelf: (some: Any) => any;
|
|
36
|
+
export declare const done: () => any;
|
|
37
|
+
export declare const AfterSerialized: PropertyDecorator;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { asBoolean, asNumber, asString, createNewInstance, isDictionary, setAnyValue } from './utils';
|
|
3
|
+
import { registerMappable } from './Mappable';
|
|
4
|
+
import { getClassDefinition, getErrorTraceMessages, validateInstance } from '../reflect-types';
|
|
5
|
+
import { callDecoratedMethod, defineDecoratedProperty } from "./decorate";
|
|
6
|
+
const JSON_SERIALIZED = Symbol('JSON_SERIALIZED');
|
|
7
|
+
const AFTER_SERIALIZED = Symbol('AFTER_SERIALIZED');
|
|
8
|
+
class SerializeSettings {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.settingsByName = {};
|
|
11
|
+
this.settingsBySerializedName = {};
|
|
12
|
+
this.ignoredProperties = [];
|
|
13
|
+
this.defaultIgnored = false;
|
|
14
|
+
}
|
|
15
|
+
add(prop) {
|
|
16
|
+
this.settingsByName[prop.propName] = prop;
|
|
17
|
+
this.settingsBySerializedName[prop.serializedName] = prop;
|
|
18
|
+
}
|
|
19
|
+
isPropertyIgnored(propName) {
|
|
20
|
+
if (this.defaultIgnored && !this.settingsByName[propName]) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return this.ignoredProperties.indexOf(propName) !== -1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class SerializedPropertySetting {
|
|
27
|
+
constructor(target, propName, options) {
|
|
28
|
+
this.target = target;
|
|
29
|
+
this.propName = propName;
|
|
30
|
+
this.options = options;
|
|
31
|
+
this.isArray = Reflect.getDesignType(target, propName) === Array;
|
|
32
|
+
this.serializedName = options.name || asString(propName);
|
|
33
|
+
this.class = options.class;
|
|
34
|
+
this.fromJSON = this.createBuilder();
|
|
35
|
+
this.toJSON = options.toJSON || (value => serializeTo(value));
|
|
36
|
+
}
|
|
37
|
+
createBuilder() {
|
|
38
|
+
if (this.options.fromJSON) {
|
|
39
|
+
return this.options.fromJSON;
|
|
40
|
+
}
|
|
41
|
+
else if (this.class && this.class instanceof Function) {
|
|
42
|
+
const clazz = this.class;
|
|
43
|
+
return data => {
|
|
44
|
+
const transformer = jsonTransformers.get(clazz);
|
|
45
|
+
return transformer ? transformer.fromJson(data) : deserialize(data, clazz);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return data => getValueByReflectType(this.target, this.propName, data);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function setDefaultIgnored(clazz, defaultIgnored) {
|
|
54
|
+
updateSerializeSettings(clazz, settings => {
|
|
55
|
+
settings.defaultIgnored = defaultIgnored;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export function registerSerializedProperty(target, propName, options) {
|
|
59
|
+
const clazz = target.constructor;
|
|
60
|
+
updateSerializeSettings(clazz, settings => {
|
|
61
|
+
settings.add(new SerializedPropertySetting(target, propName, options));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function updateSerializeSettings(clazz, update) {
|
|
65
|
+
let settings = Reflect.getMetadata(JSON_SERIALIZED, clazz);
|
|
66
|
+
if (settings === undefined) {
|
|
67
|
+
settings = new SerializeSettings();
|
|
68
|
+
}
|
|
69
|
+
update(settings);
|
|
70
|
+
Reflect.defineMetadata(JSON_SERIALIZED, settings, clazz);
|
|
71
|
+
}
|
|
72
|
+
export const SerializedClass = Serialized();
|
|
73
|
+
// @Annotation
|
|
74
|
+
export function Serialized(options) {
|
|
75
|
+
options = options || {};
|
|
76
|
+
return (target, propName) => registerSerializedProperty(target, asString(propName), options);
|
|
77
|
+
}
|
|
78
|
+
// @Annotation
|
|
79
|
+
export function SerializedName(serializedName) {
|
|
80
|
+
return (target, propName) => registerSerializedProperty(target, asString(propName), {
|
|
81
|
+
name: serializedName
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// @Annotation
|
|
85
|
+
export const IgnoreSerialization = (target, propName) => updateSerializeSettings(target.constructor, settings => settings.ignoredProperties.push(propName));
|
|
86
|
+
/**
|
|
87
|
+
* serialize an object to json string
|
|
88
|
+
*/
|
|
89
|
+
export function serialize(value) {
|
|
90
|
+
if (typeof value === 'object')
|
|
91
|
+
return JSON.stringify(serializeToData(value));
|
|
92
|
+
return JSON.stringify(value);
|
|
93
|
+
}
|
|
94
|
+
export function serializeTo(value) {
|
|
95
|
+
if (value === undefined)
|
|
96
|
+
throw new Error('attempt to serialize undefined value');
|
|
97
|
+
if (value === null)
|
|
98
|
+
return null;
|
|
99
|
+
const transformer = jsonTransformers.get(value.constructor);
|
|
100
|
+
return transformer ? transformer.toJson(value) : serializeToData(value);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* convert an object to data object
|
|
104
|
+
*/
|
|
105
|
+
export function serializeToData(object) {
|
|
106
|
+
var _a;
|
|
107
|
+
if (object instanceof Array) {
|
|
108
|
+
return object.map(it => serializeToData(it));
|
|
109
|
+
}
|
|
110
|
+
if (isDictionary(object)) {
|
|
111
|
+
const result = {};
|
|
112
|
+
Object.entries(object).forEach(it => {
|
|
113
|
+
const [prop, value] = it;
|
|
114
|
+
result[prop] = serializeTo(value);
|
|
115
|
+
});
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
const clazz = object.constructor;
|
|
119
|
+
const reflectEnabled = (_a = getClassDefinition(clazz)) === null || _a === void 0 ? void 0 : _a.isSubClassOf('Mappable');
|
|
120
|
+
if (reflectEnabled)
|
|
121
|
+
registerMappable(clazz);
|
|
122
|
+
const settings = Reflect.getMetadata(JSON_SERIALIZED, clazz);
|
|
123
|
+
if (settings === undefined) {
|
|
124
|
+
return object;
|
|
125
|
+
}
|
|
126
|
+
const jsonMappingObject = {};
|
|
127
|
+
Object.entries(object).forEach(entry => {
|
|
128
|
+
const propName = entry[0];
|
|
129
|
+
if (settings.isPropertyIgnored(propName))
|
|
130
|
+
return;
|
|
131
|
+
let value = entry[1];
|
|
132
|
+
if (value === undefined || value instanceof Function || typeof value === 'symbol')
|
|
133
|
+
return;
|
|
134
|
+
const propSetting = settings.settingsByName[propName];
|
|
135
|
+
const serializedName = (propSetting === null || propSetting === void 0 ? void 0 : propSetting.serializedName) || propName;
|
|
136
|
+
if (propSetting) {
|
|
137
|
+
if (propSetting.isArray) {
|
|
138
|
+
value = value.map(it => propSetting.toJSON(it));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
value = propSetting.toJSON(value);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
jsonMappingObject[serializedName] = value;
|
|
145
|
+
});
|
|
146
|
+
return jsonMappingObject;
|
|
147
|
+
}
|
|
148
|
+
export function deserialize(json, constructorOrTarget) {
|
|
149
|
+
var _a;
|
|
150
|
+
if (typeof json === 'string') {
|
|
151
|
+
json = JSON.parse(json);
|
|
152
|
+
}
|
|
153
|
+
if (constructorOrTarget === null)
|
|
154
|
+
return json;
|
|
155
|
+
if (constructorOrTarget === undefined)
|
|
156
|
+
return json;
|
|
157
|
+
try {
|
|
158
|
+
const data = json;
|
|
159
|
+
const clazz = constructorOrTarget instanceof Function ? constructorOrTarget : constructorOrTarget.constructor;
|
|
160
|
+
const reflectEnabled = (_a = getClassDefinition(clazz)) === null || _a === void 0 ? void 0 : _a.isSubClassOf('Mappable');
|
|
161
|
+
if (reflectEnabled)
|
|
162
|
+
registerMappable(clazz);
|
|
163
|
+
const transformer = jsonTransformers.get(clazz);
|
|
164
|
+
if (transformer)
|
|
165
|
+
return transformer.fromJson(data);
|
|
166
|
+
const target = constructorOrTarget instanceof Function ? createNewInstance(constructorOrTarget) : constructorOrTarget;
|
|
167
|
+
deserializeFrom(data, target);
|
|
168
|
+
if (reflectEnabled) {
|
|
169
|
+
const validateResult = validateInstance(target, clazz.name);
|
|
170
|
+
if (!validateResult.success) {
|
|
171
|
+
throw new Error(`JSON deserialize validate failed: ${getErrorTraceMessages(validateResult)} `);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return target;
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
console.error('failed to deserialize');
|
|
178
|
+
console.dir(e);
|
|
179
|
+
throw e;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export function deserializeArray(json, clazz) {
|
|
183
|
+
const data = typeof json === 'string' ? JSON.parse(json) : json;
|
|
184
|
+
if (!(data instanceof Array)) {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
return data.map(item => deserialize(item, clazz));
|
|
188
|
+
}
|
|
189
|
+
export function deserializeFrom(data, target) {
|
|
190
|
+
const clazz = target.constructor;
|
|
191
|
+
const settings = Reflect.getMetadata(JSON_SERIALIZED, clazz);
|
|
192
|
+
if (settings === undefined) {
|
|
193
|
+
Object.assign(target, data);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
Object.keys(data).forEach(serializedName => {
|
|
197
|
+
const propDef = settings.settingsBySerializedName[serializedName];
|
|
198
|
+
const jsonValue = data[serializedName];
|
|
199
|
+
if (propDef === undefined) {
|
|
200
|
+
if (!settings.defaultIgnored) {
|
|
201
|
+
setAnyValue(target, serializedName, jsonValue);
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const propName = propDef.propName;
|
|
206
|
+
if (settings.isPropertyIgnored(propName)) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
let value;
|
|
210
|
+
if (jsonValue instanceof Array) {
|
|
211
|
+
value = jsonValue.map(it => propDef.fromJSON(it));
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
value = propDef.fromJSON(jsonValue);
|
|
215
|
+
}
|
|
216
|
+
setAnyValue(target, propName, value);
|
|
217
|
+
});
|
|
218
|
+
callDecoratedMethod(target, AFTER_SERIALIZED);
|
|
219
|
+
}
|
|
220
|
+
export function getSerializeSettings(clazz) {
|
|
221
|
+
return Reflect.getMetadata(JSON_SERIALIZED, clazz);
|
|
222
|
+
}
|
|
223
|
+
function getValueByReflectType(target, propName, value) {
|
|
224
|
+
const reflectType = Reflect.getDesignType(target, propName);
|
|
225
|
+
if (reflectType === undefined)
|
|
226
|
+
return value;
|
|
227
|
+
if (reflectType === Array)
|
|
228
|
+
return deserializeArray(value);
|
|
229
|
+
const transformer = jsonTransformers.get(reflectType);
|
|
230
|
+
return transformer ? transformer.fromJson(value) : deserialize(value, reflectType);
|
|
231
|
+
}
|
|
232
|
+
const jsonTransformers = new Map();
|
|
233
|
+
export function registerTransform(clazz, transform) {
|
|
234
|
+
jsonTransformers.set(clazz, transform);
|
|
235
|
+
}
|
|
236
|
+
export const itSelf = (some) => some;
|
|
237
|
+
export const done = () => undefined;
|
|
238
|
+
registerTransform(String, { fromJson: asString, toJson: itSelf });
|
|
239
|
+
registerTransform(Number, { fromJson: asNumber, toJson: itSelf });
|
|
240
|
+
registerTransform(Boolean, { fromJson: asBoolean, toJson: itSelf });
|
|
241
|
+
registerTransform(Date, { fromJson: (anyValue) => new Date(asNumber(anyValue)), toJson: date => date.getTime() });
|
|
242
|
+
export const AfterSerialized = defineDecoratedProperty(AFTER_SERIALIZED);
|
|
243
|
+
//# sourceMappingURL=json-translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-translation.js","sourceRoot":"","sources":["../../src/reflect-json/json-translation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Any, AnyConstructorFunction, AnyObject, Optional } from './types';
|
|
3
|
+
export type ReflectPropertyKey = string | symbol;
|
|
4
|
+
export type ReflectType = StringConstructor | NumberConstructor | BooleanConstructor | ObjectConstructor | ArrayConstructor | FunctionConstructor | AnyConstructorFunction;
|
|
5
|
+
declare global {
|
|
6
|
+
namespace Reflect {
|
|
7
|
+
function getDesignType<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType>;
|
|
8
|
+
function getReturnType<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType>;
|
|
9
|
+
function getParamTypes<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType[]>;
|
|
10
|
+
function addMetadataList<T extends object>(key: symbol, value: Any, target: T): void;
|
|
11
|
+
function addMetadataList<T extends object>(key: symbol, value: Any, target: T, property: ReflectPropertyKey): void;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
const DESIGN_TYPE = 'design:type';
|
|
3
|
+
const DESIGN_RETURNTYPE = 'design:returntype';
|
|
4
|
+
const DESIGN_PARAMTYPES = 'design:paramtypes';
|
|
5
|
+
function getDesignType(target, property) {
|
|
6
|
+
return Reflect.getMetadata(DESIGN_TYPE, target, property);
|
|
7
|
+
}
|
|
8
|
+
function getReturnType(target, property) {
|
|
9
|
+
return Reflect.getMetadata(DESIGN_RETURNTYPE, target, property);
|
|
10
|
+
}
|
|
11
|
+
function getParamTypes(target, property) {
|
|
12
|
+
return Reflect.getMetadata(DESIGN_PARAMTYPES, target, property);
|
|
13
|
+
}
|
|
14
|
+
function addMetadataList(key, value, target, propertyKey) {
|
|
15
|
+
const list = (propertyKey === undefined
|
|
16
|
+
? Reflect.getMetadata(key, target)
|
|
17
|
+
: Reflect.getMetadata(key, target, propertyKey)) || [];
|
|
18
|
+
if (!list.includes(value))
|
|
19
|
+
list.push(value);
|
|
20
|
+
propertyKey === undefined
|
|
21
|
+
? Reflect.defineMetadata(key, list, target)
|
|
22
|
+
: Reflect.defineMetadata(key, list, target, propertyKey);
|
|
23
|
+
}
|
|
24
|
+
Object.assign(Reflect, {
|
|
25
|
+
getDesignType,
|
|
26
|
+
getReturnType,
|
|
27
|
+
getParamTypes,
|
|
28
|
+
addMetadataList
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=reflect-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect-extension.js","sourceRoot":"","sources":["../../src/reflect-json/reflect-extension.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAA;AACjC,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAC7C,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAwC7C,SAAS,aAAa,CAAC,MAAiB,EAAE,QAAgB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,QAAgB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,QAAgB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,eAAe,CAAmB,GAAW,EAAE,KAAU,EAAE,MAAS,EAAE,WAAgC;IAC3G,MAAM,IAAI,GACN,CAAC,WAAW,KAAK,SAAS;QACtB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3C,WAAW,KAAK,SAAS;QACrB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;IACnB,aAAa;IACb,aAAa;IACb,aAAa;IACb,eAAe;CAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type Any = any;
|
|
2
|
+
export type AnyFunction = (...args: Any[]) => Any;
|
|
3
|
+
export type AnyConstructorFunction = new (...args: Any[]) => Any;
|
|
4
|
+
export type Class<T> = new (...args: Any[]) => T;
|
|
5
|
+
export type ClassOrInstance<T> = T | Class<T>;
|
|
6
|
+
export type Dictionary<T> = {
|
|
7
|
+
[key: string | symbol]: T;
|
|
8
|
+
};
|
|
9
|
+
export type AnyObject = Dictionary<Any>;
|
|
10
|
+
export type Optional<T> = T | undefined;
|
|
11
|
+
export type Nullable<T> = T | null;
|
|
12
|
+
export type JsonValue = string | number | boolean | null | JsonObject | JsonObject[];
|
|
13
|
+
export type JsonObject = {
|
|
14
|
+
[propName: string]: JsonValue;
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reflect-json/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Any, Class } from "./types";
|
|
2
|
+
export declare function asBoolean(value: unknown): boolean;
|
|
3
|
+
export declare function asString(v: unknown): string;
|
|
4
|
+
export declare function asNumber(v: unknown): number;
|
|
5
|
+
export declare function setAnyValue<T>(target: Any, field: string | number | symbol, value: T): void;
|
|
6
|
+
export declare function getAnyValue<T>(target: Any, field: string | number | symbol): T | undefined;
|
|
7
|
+
export declare function getOrSetValue<T>(target: Any, field: string | number | symbol, defaultWith: () => T): T;
|
|
8
|
+
export declare function isDictionary(value: Any): boolean;
|
|
9
|
+
export declare function createNewInstance<T>(clazz: Class<T>): any;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function asBoolean(value) {
|
|
2
|
+
if (String(value).toLocaleLowerCase() === 'false')
|
|
3
|
+
return false;
|
|
4
|
+
return !!value;
|
|
5
|
+
}
|
|
6
|
+
export function asString(v) {
|
|
7
|
+
if (v === null || v === undefined || Number.isNaN(v)) {
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
if (v instanceof Date && String(v) === 'Invalid Date') {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
if (typeof v === 'symbol') {
|
|
14
|
+
return v.description || '';
|
|
15
|
+
}
|
|
16
|
+
return String(v);
|
|
17
|
+
}
|
|
18
|
+
export function asNumber(v) {
|
|
19
|
+
if (!v)
|
|
20
|
+
return 0;
|
|
21
|
+
if (v instanceof Date)
|
|
22
|
+
return v.getDate();
|
|
23
|
+
return Number(v);
|
|
24
|
+
}
|
|
25
|
+
export function setAnyValue(target, field, value) {
|
|
26
|
+
;
|
|
27
|
+
target[field] = value;
|
|
28
|
+
}
|
|
29
|
+
export function getAnyValue(target, field) {
|
|
30
|
+
return target[field];
|
|
31
|
+
}
|
|
32
|
+
export function getOrSetValue(target, field, defaultWith) {
|
|
33
|
+
const value = target[field];
|
|
34
|
+
if (value !== undefined)
|
|
35
|
+
return value;
|
|
36
|
+
const defaultValue = defaultWith();
|
|
37
|
+
setAnyValue(target, field, defaultValue);
|
|
38
|
+
return defaultValue;
|
|
39
|
+
}
|
|
40
|
+
export function isDictionary(value) {
|
|
41
|
+
return typeof value === 'object' && value !== null && value.constructor === Object;
|
|
42
|
+
}
|
|
43
|
+
export function createNewInstance(clazz) {
|
|
44
|
+
const result = Object.create(clazz.prototype);
|
|
45
|
+
result.constructor = this;
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/reflect-json/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,KAAK,OAAO;QAAE,OAAO,KAAK,CAAA;IAC/D,OAAO,CAAC,CAAC,KAAK,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,CAAA;IACb,CAAC;IACD,IAAI,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;QACpD,OAAO,EAAE,CAAA;IACb,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,WAAW,IAAI,EAAE,CAAA;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAU;IAC/B,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChB,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,MAAW,EAAE,KAA+B,EAAE,KAAQ;IACjF,CAAC;IAAC,MAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,MAAW,EAAE,KAA+B;IACvE,OAAQ,MAAoB,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,MAAW,EAAE,KAA+B,EAAE,WAAoB;IAC/F,MAAM,KAAK,GAAI,MAAoB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACrC,MAAM,YAAY,GAAG,WAAW,EAAE,CAAA;IAClC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IACxC,OAAO,YAAY,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,KAAe;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,OAAO,MAAM,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RawClassDefinition, TypeDefinition } from './index';
|
|
2
|
+
import { InterfaceDefinition, MethodDefinition, PropertyDefinition } from './index';
|
|
3
|
+
import type { AnyConstructorFunction, Dictionary } from './package';
|
|
4
|
+
export declare class ClassDefinition {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly superClassName: string;
|
|
7
|
+
readonly superClass: ClassDefinition | undefined;
|
|
8
|
+
readonly methods: MethodDefinition[];
|
|
9
|
+
readonly properties: PropertyDefinition[];
|
|
10
|
+
readonly jsClass: AnyConstructorFunction;
|
|
11
|
+
private readonly _implementationNames;
|
|
12
|
+
private readonly _implementations?;
|
|
13
|
+
private _allImplementations?;
|
|
14
|
+
constructor(def: RawClassDefinition & {
|
|
15
|
+
jsClass: AnyConstructorFunction;
|
|
16
|
+
});
|
|
17
|
+
get allMethods(): Dictionary<MethodDefinition>;
|
|
18
|
+
get allProperties(): Dictionary<PropertyDefinition>;
|
|
19
|
+
get implementations(): InterfaceDefinition[];
|
|
20
|
+
get allImplementations(): InterfaceDefinition[];
|
|
21
|
+
getProperty(propName: string): PropertyDefinition | undefined;
|
|
22
|
+
get type(): TypeDefinition;
|
|
23
|
+
isSubClassOf(typeName: string): boolean;
|
|
24
|
+
isSuperClassOf(typeName: string): boolean;
|
|
25
|
+
toString(): string;
|
|
26
|
+
}
|