@allgemein/schema-api 1.5.17 → 1.5.20
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/decorators/Namespace.js +5 -1
- package/decorators/Namespace.js.map +1 -1
- package/lib/ClassRef.d.ts +4 -1
- package/lib/ClassRef.js +18 -19
- package/lib/ClassRef.js.map +1 -1
- package/lib/Constants.d.ts +1 -1
- package/lib/Constants.js.map +1 -1
- package/lib/json-schema/Constants.d.ts +1 -0
- package/lib/json-schema/Constants.js +2 -1
- package/lib/json-schema/Constants.js.map +1 -1
- package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +12 -0
- package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -1
- package/lib/json-schema/IJsonSchemaUnserializeOptions.d.ts +4 -0
- package/lib/json-schema/IJsonSchemaUnserializeOptions.js.map +1 -1
- package/lib/json-schema/JsonSchema7Serializer.d.ts +6 -0
- package/lib/json-schema/JsonSchema7Serializer.js +37 -12
- package/lib/json-schema/JsonSchema7Serializer.js.map +1 -1
- package/lib/json-schema/JsonSchema7Unserializer.d.ts +1 -1
- package/lib/json-schema/JsonSchema7Unserializer.js +6 -5
- package/lib/json-schema/JsonSchema7Unserializer.js.map +1 -1
- package/lib/registry/AbstractRegistry.d.ts +6 -8
- package/lib/registry/AbstractRegistry.js +11 -21
- package/lib/registry/AbstractRegistry.js.map +1 -1
- package/lib/registry/DefaultNamespacedRegistry.d.ts +1 -1
- package/lib/registry/DefaultNamespacedRegistry.js +20 -15
- package/lib/registry/DefaultNamespacedRegistry.js.map +1 -1
- package/lib/registry/DefaultPropertyRef.js +1 -1
- package/lib/registry/DefaultPropertyRef.js.map +1 -1
- package/lib/registry/MetadataRegistry.js +2 -1
- package/lib/registry/MetadataRegistry.js.map +1 -1
- package/package.json +1 -1
package/decorators/Namespace.js
CHANGED
|
@@ -7,7 +7,11 @@ function Namespace(ns) {
|
|
|
7
7
|
return function (object) {
|
|
8
8
|
const options = {
|
|
9
9
|
target: object,
|
|
10
|
-
targetTypes: [
|
|
10
|
+
targetTypes: [
|
|
11
|
+
Constants_1.METATYPE_ENTITY,
|
|
12
|
+
Constants_1.METATYPE_CLASS_REF,
|
|
13
|
+
Constants_1.METATYPE_EMBEDDABLE
|
|
14
|
+
],
|
|
11
15
|
attributes: {
|
|
12
16
|
namespace: ns
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/decorators/Namespace.ts"],"names":[],"mappings":";;;AAAA,gDAA8G;AAC9G,uEAAkE;AAGlE,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,UAAU,MAAgB;QAC/B,MAAM,OAAO,GAAsB;YACjC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../src/decorators/Namespace.ts"],"names":[],"mappings":";;;AAAA,gDAA8G;AAC9G,uEAAkE;AAGlE,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,UAAU,MAAgB;QAC/B,MAAM,OAAO,GAAsB;YACjC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE;gBACX,2BAAe;gBACf,8BAAkB;gBAClB,+BAAmB;aACpB;YACD,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE;aACd;SACF,CAAC;QACF,mCAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,8BAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAfD,8BAeC","file":"Namespace.js","sourcesContent":["import {METATYPE_CLASS_REF, METATYPE_EMBEDDABLE, METATYPE_ENTITY, METATYPE_NAMESPACE} from '../lib/Constants';\nimport {MetadataRegistry} from '../lib/registry/MetadataRegistry';\nimport {IAttributeOptions} from '../lib/options/IAttributeOptions';\n\nexport function Namespace(ns: string) {\n return function (object: Function) {\n const options: IAttributeOptions = {\n target: object,\n targetTypes: [\n METATYPE_ENTITY,\n METATYPE_CLASS_REF,\n METATYPE_EMBEDDABLE\n ],\n attributes: {\n namespace: ns\n }\n };\n MetadataRegistry.$().add(METATYPE_NAMESPACE, options, false);\n };\n}\n\n"],"sourceRoot":".."}
|
package/lib/ClassRef.d.ts
CHANGED
|
@@ -74,7 +74,10 @@ export declare class ClassRef extends AbstractRef implements IClassRef {
|
|
|
74
74
|
* @param namespace
|
|
75
75
|
* @param resolve
|
|
76
76
|
*/
|
|
77
|
-
static get(klass: string | Function, namespace?: string,
|
|
77
|
+
static get(klass: string | Function, namespace?: string, options?: boolean | {
|
|
78
|
+
resolve?: boolean;
|
|
79
|
+
checkNamespace?: boolean;
|
|
80
|
+
}): ClassRef;
|
|
78
81
|
/**
|
|
79
82
|
* Create a class ref.
|
|
80
83
|
*
|
package/lib/ClassRef.js
CHANGED
|
@@ -8,6 +8,7 @@ const Constants_1 = require("./Constants");
|
|
|
8
8
|
const LookupRegistry_1 = require("./LookupRegistry");
|
|
9
9
|
const RegistryFactory_1 = require("./registry/RegistryFactory");
|
|
10
10
|
const AbstractRef_1 = require("./AbstractRef");
|
|
11
|
+
const MetadataRegistry_1 = require("./registry/MetadataRegistry");
|
|
11
12
|
/**
|
|
12
13
|
* Reflective reference to a class function
|
|
13
14
|
*
|
|
@@ -119,27 +120,17 @@ class ClassRef extends AbstractRef_1.AbstractRef {
|
|
|
119
120
|
throw new base_1.NotYetImplementedError('getClass for ' + this.originalValue);
|
|
120
121
|
}
|
|
121
122
|
static find(klass, namespace = Constants_1.DEFAULT_NAMESPACE) {
|
|
123
|
+
const registry = namespace === Constants_1.GLOBAL_NAMESPACE ? LookupRegistry_1.LookupRegistry : LookupRegistry_1.LookupRegistry.$(namespace);
|
|
124
|
+
let className = ClassRef.getClassName(klass);
|
|
125
|
+
let classRef = null;
|
|
122
126
|
if ((0, lodash_1.isString)(klass)) {
|
|
123
|
-
|
|
124
|
-
let classRef = null;
|
|
125
|
-
if (namespace === Constants_1.GLOBAL_NAMESPACE) {
|
|
126
|
-
classRef = LookupRegistry_1.LookupRegistry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.className === name);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
classRef = LookupRegistry_1.LookupRegistry.$(namespace).find(Constants_1.METATYPE_CLASS_REF, (c) => c.className === name);
|
|
130
|
-
}
|
|
131
|
-
return classRef;
|
|
127
|
+
classRef = registry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.className === className);
|
|
132
128
|
}
|
|
133
129
|
else {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
classRef = LookupRegistry_1.LookupRegistry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name));
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
classRef = LookupRegistry_1.LookupRegistry.$(namespace).find(Constants_1.METATYPE_CLASS_REF, (c) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name));
|
|
140
|
-
}
|
|
141
|
-
return classRef;
|
|
130
|
+
classRef = registry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.getClass(true) === klass ||
|
|
131
|
+
(c.isPlaceholder() && c.className === className));
|
|
142
132
|
}
|
|
133
|
+
return classRef;
|
|
143
134
|
}
|
|
144
135
|
/**
|
|
145
136
|
* get all class refs for some class name
|
|
@@ -165,7 +156,7 @@ class ClassRef extends AbstractRef_1.AbstractRef {
|
|
|
165
156
|
if ((0, lodash_1.isEmpty)(name)) {
|
|
166
157
|
let fn = null;
|
|
167
158
|
try {
|
|
168
|
-
|
|
159
|
+
fn = klass();
|
|
169
160
|
}
|
|
170
161
|
catch (e) {
|
|
171
162
|
}
|
|
@@ -186,11 +177,19 @@ class ClassRef extends AbstractRef_1.AbstractRef {
|
|
|
186
177
|
* @param namespace
|
|
187
178
|
* @param resolve
|
|
188
179
|
*/
|
|
189
|
-
static get(klass, namespace = Constants_1.GLOBAL_NAMESPACE,
|
|
180
|
+
static get(klass, namespace = Constants_1.GLOBAL_NAMESPACE, options) {
|
|
181
|
+
const resolve = (0, lodash_1.isBoolean)(options) ? options : (0, lodash_1.get)(options || {}, 'resolve', false);
|
|
190
182
|
if (resolve) {
|
|
191
183
|
klass = this.checkIfFunctionCallback(klass);
|
|
192
184
|
}
|
|
185
|
+
const checkNs = (0, lodash_1.isObjectLike)(options) ? (0, lodash_1.get)(options || {}, 'checkNamespace', false) : false;
|
|
193
186
|
const isAnonymous = (0, lodash_1.isFunction)(klass) && klass.name === 'anonymous';
|
|
187
|
+
if (checkNs) {
|
|
188
|
+
const ns = MetadataRegistry_1.MetadataRegistry.$().getByContextAndTarget(Constants_1.METATYPE_NAMESPACE, (0, lodash_1.isFunction)(klass) ? klass.name : klass);
|
|
189
|
+
if (ns.length > 0) {
|
|
190
|
+
namespace = (0, lodash_1.get)((0, lodash_1.first)(ns), 'attributes.' + Constants_1.METATYPE_NAMESPACE, namespace);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
194
193
|
let classRef = this.find(klass, namespace);
|
|
195
194
|
if (classRef) {
|
|
196
195
|
if (classRef.isPlaceholder && (0, lodash_1.isFunction)(klass) && !isAnonymous) {
|
package/lib/ClassRef.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/ClassRef.ts"],"names":[],"mappings":"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","file":"ClassRef.js","sourcesContent":["import {first, has, isEmpty, isFunction, isString, isUndefined, kebabCase, snakeCase} from 'lodash';\nimport {ClassUtils, NotYetImplementedError} from '@allgemein/base';\nimport {SchemaUtils} from './SchemaUtils';\nimport {\n __CLASS__,\n __NS__,\n C_PROP_NAME,\n DEFAULT_NAMESPACE,\n GLOBAL_NAMESPACE,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_ENTITY,\n METATYPE_PROPERTY,\n XS_ID_SEPARATOR\n} from './Constants';\nimport {LookupRegistry} from './LookupRegistry';\nimport {IClassRef} from '../api/IClassRef';\nimport {IEntityRef} from '../api/IEntityRef';\nimport {IPropertyRef} from '../api/IPropertyRef';\nimport {IBuildOptions} from '../api/IBuildOptions';\nimport {RegistryFactory} from './registry/RegistryFactory';\nimport {AbstractRef} from './AbstractRef';\n\n/**\n * Reflective reference to a class function\n *\n * There can exist multiple ClassRef depending of context for a single class function.\n * The context is defined by the lookup registry.\n * It can be also a placeholder, for a dummy or later loaded class.\n *\n * This is a default implementation for IClassRef\n *\n\n class can be in different namespaces\n */\nexport class ClassRef extends AbstractRef implements IClassRef {\n\n static __inc: number = 0;\n\n private readonly idx: number;\n\n /**\n * Original reference to the class function or the given class name as string\n */\n originalValue: string | Function;\n\n private _cacheEntity: IEntityRef;\n\n private _isPlaceholder: boolean = false;\n\n private _isAnonymous: boolean = false;\n\n extends: IClassRef[] = [];\n\n constructor(klass: string | Function, namespace: string = DEFAULT_NAMESPACE) {\n super(METATYPE_CLASS_REF, ClassRef.getClassName(klass), null, namespace);\n this._isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n this.idx = ClassRef.__inc++;\n if (isString(klass)) {\n this.originalValue = klass;\n this._isPlaceholder = true;\n } else {\n this.originalValue = ClassUtils.getFunction(klass);\n }\n }\n\n\n isPlaceholder() {\n return this._isPlaceholder;\n }\n\n\n isAnonymous() {\n return this._isAnonymous;\n }\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n return ClassRef.get(<string | Function>object, this.namespace, type == METATYPE_PROPERTY);\n }\n\n static getClassName(k: any) {\n if (k[__CLASS__]) {\n return k[__CLASS__];\n }\n return ClassUtils.getClassName(k);\n }\n\n\n updateClass(cls: Function) {\n this.originalValue = ClassUtils.getFunction(cls);\n this._isPlaceholder = false;\n }\n\n\n get className() {\n return this.name;\n }\n\n get storingName() {\n let name = this.getOptions(C_PROP_NAME, this.className);\n return snakeCase(name);\n }\n\n set storingName(v: string) {\n this.setOption(C_PROP_NAME, v);\n }\n\n /**\n * Check if name is passed by options\n */\n hasName() {\n return this.hasOption(C_PROP_NAME);\n }\n\n /**\n * Return the namespace for/of this class\n */\n getNamespace() {\n return this.namespace;\n }\n\n /**\n * TODO implement\n *\n * @param namespace\n */\n switchNamespace(namespace: string) {\n // this.getRegistry().remove(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass() === this.getClass());\n // this.namespace = namespace;\n // this.getRegistry().add(METATYPE_CLASS_REF, this);\n }\n\n isOf(instance: any): boolean {\n const name = ClassRef.getClassName(instance);\n // if(name)\n if (name && name === this.name) {\n return true;\n } else if (has(instance, __CLASS__) && instance[__CLASS__] === this.name) {\n return true;\n } else {\n return this.getPropertyRefs()\n .map(x => has(instance, x.name))\n .reduce((previousValue, currentValue) => previousValue && currentValue, true);\n }\n return false;\n }\n\n\n get machineName() {\n return snakeCase(this.className);\n }\n\n\n getClass(create: boolean = false): Function {\n if (isFunction(this.originalValue)) {\n return this.originalValue;\n } else if (isString(this.originalValue) && this.isPlaceholder) {\n if (create) {\n this.originalValue = SchemaUtils.clazz(this.originalValue);\n return this.originalValue;\n }\n }\n throw new NotYetImplementedError('getClass for ' + this.originalValue);\n }\n\n\n static find(klass: string | Function, namespace: string = DEFAULT_NAMESPACE): ClassRef {\n if (isString(klass)) {\n let name = ClassRef.getClassName(klass);\n let classRef = null;\n if (namespace === GLOBAL_NAMESPACE) {\n classRef = LookupRegistry.find<ClassRef>(METATYPE_CLASS_REF, (c: ClassRef) => c.className === name);\n } else {\n classRef = LookupRegistry.$(namespace).find<ClassRef>(METATYPE_CLASS_REF, (c: ClassRef) => c.className === name);\n }\n return classRef;\n } else {\n let classRef = null;\n if (namespace === GLOBAL_NAMESPACE) {\n classRef = LookupRegistry.find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name)\n );\n } else {\n classRef = LookupRegistry.$(namespace).find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name)\n );\n }\n return classRef;\n }\n }\n\n\n /**\n * get all class refs for some class name\n *\n * @param klass\n */\n static getAllByClassName(klass: any): IClassRef[] {\n let name = ClassRef.getClassName(klass);\n return LookupRegistry.filter<ClassRef>(METATYPE_CLASS_REF, (c: IClassRef) => c.name == name);\n }\n\n\n /**\n * filter function for classrefs\n *\n * @param klass\n */\n static filter(fn: (c: IClassRef) => boolean): IClassRef[] {\n return LookupRegistry.filter<IClassRef>(METATYPE_CLASS_REF, fn);\n }\n\n\n static checkIfFunctionCallback(klass: string | Function) {\n if (isFunction(klass)) {\n // maybe function which return type like () => type\n let name = ClassRef.getClassName(klass);\n\n if (isEmpty(name)) {\n let fn = null;\n try {\n //fn = klass();\n } catch (e) {\n\n }\n if (fn) {\n let name = ClassRef.getClassName(fn);\n if (!isEmpty(name)) {\n klass = fn;\n }\n }\n }\n }\n return klass;\n }\n\n\n /**\n * check if class reference already exists for given string or Function, if not create a new one\n *\n * @param klass\n * @param namespace\n * @param resolve\n */\n static get(klass: string | Function, namespace: string = GLOBAL_NAMESPACE, resolve: boolean = false): ClassRef {\n if (resolve) {\n klass = this.checkIfFunctionCallback(klass);\n }\n\n const isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n let classRef = this.find(klass, namespace);\n if (classRef) {\n if (classRef.isPlaceholder && isFunction(klass) && !isAnonymous) {\n classRef.updateClass(klass);\n }\n return classRef;\n }\n\n if (namespace === GLOBAL_NAMESPACE) {\n namespace = DEFAULT_NAMESPACE;\n }\n return this.createRef(klass, namespace);\n }\n\n /**\n * Create a class ref.\n *\n * @param klass\n * @param namespace\n */\n static createRef(klass: Function | string, namespace: string = GLOBAL_NAMESPACE) {\n const classRef = new ClassRef(klass, namespace);\n if (isFunction(klass)) {\n const proto = SchemaUtils.getInherited(klass);\n if (proto) {\n // is extends\n // TODO how to handle cirlces\n const extendRef = ClassRef.get(proto, namespace);\n classRef.addExtend(extendRef);\n }\n }\n return classRef.getRegistry().add(METATYPE_CLASS_REF, classRef);\n }\n\n\n /**\n * return global class reference\n *\n * @param klass\n * @param resolve\n */\n static getGlobal(klass: string | Function, resolve: boolean = false): ClassRef {\n return this.get(klass, GLOBAL_NAMESPACE, resolve);\n }\n\n\n getRegistry() {\n return RegistryFactory.get(this.namespace);\n }\n\n\n getEntityRef(): IEntityRef {\n if (isUndefined(this._cacheEntity)) {\n this._cacheEntity = this.getRegistry().find(METATYPE_ENTITY, (x: IEntityRef) => x.getClassRef() === this);\n }\n return this._cacheEntity;\n }\n\n hasEntityRef() {\n return !!this.getEntityRef();\n }\n\n\n create<T>(addinfo: boolean = true): T {\n return this.new(addinfo);\n }\n\n\n new<T>(addinfo: boolean = true): T {\n let klass = this.getClass();\n let instance = Reflect.construct(klass, []);\n if (addinfo) {\n Reflect.defineProperty(instance, __NS__, {value: this.namespace, enumerable: true});\n Reflect.defineProperty(instance, __CLASS__, {value: this.className, enumerable: true});\n }\n return instance;\n }\n\n\n getPropertyRefs(): IPropertyRef[] {\n const inheritedProps = [].concat(...this.getExtends().map(x => x.getPropertyRefs()));\n const registeredProps = this.getRegistry().getPropertyRefs(this);\n inheritedProps.forEach((x: IPropertyRef) => {\n if (!registeredProps.find(z => x.name === z.name)) {\n registeredProps.push(x);\n }\n });\n return registeredProps;\n }\n\n\n getPropertyRef(name: string): IPropertyRef {\n let registeredProp = this.getRegistry().getPropertyRef(this, name);\n if (registeredProp) {\n return registeredProp;\n } else {\n for (const clsRef of this.getExtends()) {\n registeredProp = clsRef.getPropertyRef(name);\n if (registeredProp) {\n return registeredProp;\n }\n }\n }\n return null;\n }\n\n\n id() {\n return [this.namespace, this.className].map(x => kebabCase(x)).join(XS_ID_SEPARATOR);\n }\n\n\n build<T>(data: any, options: IBuildOptions = {}): T {\n return <T>SchemaUtils.transform(this, data, options);\n }\n\n /**\n * Return base inherited class for the underlying class\n * ```\n * class X exnteds Y { }\n * ```\n * Y would be returned.\n *\n */\n getExtend(): IClassRef {\n return !isEmpty(this.extends) ? first(this.extends) : null;\n }\n\n /**\n * Return all inherited classes for underlying class. Mostly added manually.\n *\n */\n getExtends(): IClassRef[] {\n return this.extends;\n }\n\n /**\n * Append extend class ref.\n * @param ref\n */\n addExtend(ref: IClassRef) {\n this.extends.push(ref);\n return ref;\n }\n\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/ClassRef.ts"],"names":[],"mappings":"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","file":"ClassRef.js","sourcesContent":["import {\n first,\n has,\n isEmpty,\n isFunction,\n isString,\n isUndefined,\n kebabCase,\n snakeCase,\n get,\n isBoolean,\n isObjectLike\n} from 'lodash';\nimport {ClassUtils, NotYetImplementedError} from '@allgemein/base';\nimport {SchemaUtils} from './SchemaUtils';\nimport {\n __CLASS__,\n __NS__,\n C_PROP_NAME,\n DEFAULT_NAMESPACE,\n GLOBAL_NAMESPACE,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_ENTITY, METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n XS_ID_SEPARATOR\n} from './Constants';\nimport {LookupRegistry} from './LookupRegistry';\nimport {IClassRef} from '../api/IClassRef';\nimport {IEntityRef} from '../api/IEntityRef';\nimport {IPropertyRef} from '../api/IPropertyRef';\nimport {IBuildOptions} from '../api/IBuildOptions';\nimport {RegistryFactory} from './registry/RegistryFactory';\nimport {AbstractRef} from './AbstractRef';\nimport {MetadataRegistry} from \"./registry/MetadataRegistry\";\n\n/**\n * Reflective reference to a class function\n *\n * There can exist multiple ClassRef depending of context for a single class function.\n * The context is defined by the lookup registry.\n * It can be also a placeholder, for a dummy or later loaded class.\n *\n * This is a default implementation for IClassRef\n *\n\n class can be in different namespaces\n */\nexport class ClassRef extends AbstractRef implements IClassRef {\n\n static __inc: number = 0;\n\n private readonly idx: number;\n\n /**\n * Original reference to the class function or the given class name as string\n */\n originalValue: string | Function;\n\n private _cacheEntity: IEntityRef;\n\n private _isPlaceholder: boolean = false;\n\n private _isAnonymous: boolean = false;\n\n extends: IClassRef[] = [];\n\n constructor(klass: string | Function, namespace: string = DEFAULT_NAMESPACE) {\n super(METATYPE_CLASS_REF, ClassRef.getClassName(klass), null, namespace);\n this._isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n this.idx = ClassRef.__inc++;\n if (isString(klass)) {\n this.originalValue = klass;\n this._isPlaceholder = true;\n } else {\n this.originalValue = ClassUtils.getFunction(klass);\n }\n }\n\n\n isPlaceholder() {\n return this._isPlaceholder;\n }\n\n\n isAnonymous() {\n return this._isAnonymous;\n }\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n return ClassRef.get(<string | Function>object, this.namespace, type == METATYPE_PROPERTY);\n }\n\n static getClassName(k: any) {\n if (k[__CLASS__]) {\n return k[__CLASS__];\n }\n return ClassUtils.getClassName(k);\n }\n\n\n updateClass(cls: Function) {\n this.originalValue = ClassUtils.getFunction(cls);\n this._isPlaceholder = false;\n }\n\n\n get className() {\n return this.name;\n }\n\n get storingName() {\n let name = this.getOptions(C_PROP_NAME, this.className);\n return snakeCase(name);\n }\n\n set storingName(v: string) {\n this.setOption(C_PROP_NAME, v);\n }\n\n /**\n * Check if name is passed by options\n */\n hasName() {\n return this.hasOption(C_PROP_NAME);\n }\n\n /**\n * Return the namespace for/of this class\n */\n getNamespace() {\n return this.namespace;\n }\n\n /**\n * TODO implement\n *\n * @param namespace\n */\n switchNamespace(namespace: string) {\n // this.getRegistry().remove(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass() === this.getClass());\n // this.namespace = namespace;\n // this.getRegistry().add(METATYPE_CLASS_REF, this);\n }\n\n isOf(instance: any): boolean {\n const name = ClassRef.getClassName(instance);\n // if(name)\n if (name && name === this.name) {\n return true;\n } else if (has(instance, __CLASS__) && instance[__CLASS__] === this.name) {\n return true;\n } else {\n return this.getPropertyRefs()\n .map(x => has(instance, x.name))\n .reduce((previousValue, currentValue) => previousValue && currentValue, true);\n }\n return false;\n }\n\n\n get machineName() {\n return snakeCase(this.className);\n }\n\n\n getClass(create: boolean = false): Function {\n if (isFunction(this.originalValue)) {\n return this.originalValue;\n } else if (isString(this.originalValue) && this.isPlaceholder) {\n if (create) {\n this.originalValue = SchemaUtils.clazz(this.originalValue);\n return this.originalValue;\n }\n }\n throw new NotYetImplementedError('getClass for ' + this.originalValue);\n }\n\n\n static find(klass: string | Function, namespace: string = DEFAULT_NAMESPACE): ClassRef {\n const registry = namespace === GLOBAL_NAMESPACE ? LookupRegistry : LookupRegistry.$(namespace);\n let className = ClassRef.getClassName(klass);\n let classRef = null;\n if (isString(klass)) {\n classRef = registry.find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) => c.className === className\n );\n } else {\n classRef = registry.find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) =>\n c.getClass(true) === klass ||\n (c.isPlaceholder() && c.className === className)\n );\n }\n return classRef;\n }\n\n\n /**\n * get all class refs for some class name\n *\n * @param klass\n */\n static getAllByClassName(klass: any): IClassRef[] {\n let name = ClassRef.getClassName(klass);\n return LookupRegistry.filter<ClassRef>(METATYPE_CLASS_REF, (c: IClassRef) => c.name == name);\n }\n\n\n /**\n * filter function for classrefs\n *\n * @param klass\n */\n static filter(fn: (c: IClassRef) => boolean): IClassRef[] {\n return LookupRegistry.filter<IClassRef>(METATYPE_CLASS_REF, fn);\n }\n\n\n static checkIfFunctionCallback(klass: string | Function) {\n if (isFunction(klass)) {\n // maybe function which return type like () => type\n let name = ClassRef.getClassName(klass);\n\n if (isEmpty(name)) {\n let fn = null;\n try {\n fn = klass();\n } catch (e) {\n }\n if (fn) {\n let name = ClassRef.getClassName(fn);\n if (!isEmpty(name)) {\n klass = fn;\n }\n }\n }\n }\n return klass;\n }\n\n\n /**\n * check if class reference already exists for given string or Function, if not create a new one\n *\n * @param klass\n * @param namespace\n * @param resolve\n */\n static get(klass: string | Function,\n namespace: string = GLOBAL_NAMESPACE,\n options?: boolean | { resolve?: boolean, checkNamespace?: boolean }): ClassRef {\n const resolve = isBoolean(options) ? options : get(options || {}, 'resolve', false);\n if (resolve) {\n klass = this.checkIfFunctionCallback(klass);\n }\n\n const checkNs = isObjectLike(options) ? get(options || {}, 'checkNamespace', false) : false;\n const isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n if (checkNs) {\n const ns = MetadataRegistry.$().getByContextAndTarget(METATYPE_NAMESPACE, isFunction(klass) ? klass.name : klass);\n if (ns.length > 0) {\n namespace = get(first(ns), 'attributes.' + METATYPE_NAMESPACE, namespace);\n }\n }\n\n let classRef = this.find(klass, namespace);\n if (classRef) {\n if (classRef.isPlaceholder && isFunction(klass) && !isAnonymous) {\n classRef.updateClass(klass);\n }\n return classRef;\n }\n\n if (namespace === GLOBAL_NAMESPACE) {\n namespace = DEFAULT_NAMESPACE;\n }\n return this.createRef(klass, namespace);\n }\n\n /**\n * Create a class ref.\n *\n * @param klass\n * @param namespace\n */\n static createRef(klass: Function | string, namespace: string = GLOBAL_NAMESPACE) {\n const classRef = new ClassRef(klass, namespace);\n if (isFunction(klass)) {\n const proto = SchemaUtils.getInherited(klass);\n if (proto) {\n // is extends\n // TODO how to handle cirlces\n const extendRef = ClassRef.get(proto, namespace);\n classRef.addExtend(extendRef);\n }\n }\n return classRef.getRegistry().add(METATYPE_CLASS_REF, classRef);\n }\n\n\n /**\n * return global class reference\n *\n * @param klass\n * @param resolve\n */\n static getGlobal(klass: string | Function, resolve: boolean = false): ClassRef {\n return this.get(klass, GLOBAL_NAMESPACE, resolve);\n }\n\n\n getRegistry() {\n return RegistryFactory.get(this.namespace);\n }\n\n\n getEntityRef(): IEntityRef {\n if (isUndefined(this._cacheEntity)) {\n this._cacheEntity = this.getRegistry().find(METATYPE_ENTITY, (x: IEntityRef) => x.getClassRef() === this);\n }\n return this._cacheEntity;\n }\n\n hasEntityRef() {\n return !!this.getEntityRef();\n }\n\n\n create<T>(addinfo: boolean = true): T {\n return this.new(addinfo);\n }\n\n\n new<T>(addinfo: boolean = true): T {\n let klass = this.getClass();\n let instance = Reflect.construct(klass, []);\n if (addinfo) {\n Reflect.defineProperty(instance, __NS__, {value: this.namespace, enumerable: true});\n Reflect.defineProperty(instance, __CLASS__, {value: this.className, enumerable: true});\n }\n return instance;\n }\n\n\n getPropertyRefs(): IPropertyRef[] {\n const inheritedProps = [].concat(...this.getExtends().map(x => x.getPropertyRefs()));\n const registeredProps = this.getRegistry().getPropertyRefs(this);\n inheritedProps.forEach((x: IPropertyRef) => {\n if (!registeredProps.find(z => x.name === z.name)) {\n registeredProps.push(x);\n }\n });\n return registeredProps;\n }\n\n\n getPropertyRef(name: string): IPropertyRef {\n let registeredProp = this.getRegistry().getPropertyRef(this, name);\n if (registeredProp) {\n return registeredProp;\n } else {\n for (const clsRef of this.getExtends()) {\n registeredProp = clsRef.getPropertyRef(name);\n if (registeredProp) {\n return registeredProp;\n }\n }\n }\n return null;\n }\n\n\n id() {\n return [this.namespace, this.className].map(x => kebabCase(x)).join(XS_ID_SEPARATOR);\n }\n\n\n build<T>(data: any, options: IBuildOptions = {}): T {\n return <T>SchemaUtils.transform(this, data, options);\n }\n\n /**\n * Return base inherited class for the underlying class\n * ```\n * class X exnteds Y { }\n * ```\n * Y would be returned.\n *\n */\n getExtend(): IClassRef {\n return !isEmpty(this.extends) ? first(this.extends) : null;\n }\n\n /**\n * Return all inherited classes for underlying class. Mostly added manually.\n *\n */\n getExtends(): IClassRef[] {\n return this.extends;\n }\n\n /**\n * Append extend class ref.\n * @param ref\n */\n addExtend(ref: IClassRef) {\n this.extends.push(ref);\n return ref;\n }\n\n\n}\n"],"sourceRoot":".."}
|
package/lib/Constants.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const METATYPE_NAMESPACE = "namespace";
|
|
|
13
13
|
export declare const METATYPE_CLASS_REF = "class_ref";
|
|
14
14
|
export declare const METATYPE_PROPERTY = "property";
|
|
15
15
|
export declare const METATYPE_EMBEDDABLE = "object";
|
|
16
|
-
export declare type METADATA_TYPE = 'schema' | 'object' | 'entity' | 'property' | 'class_ref';
|
|
16
|
+
export declare type METADATA_TYPE = 'schema' | 'object' | 'entity' | 'property' | 'class_ref' | 'namespace';
|
|
17
17
|
export declare const BINDING_SCHEMA_ENTITY = "schema_entity";
|
|
18
18
|
export declare const BINDING_SCHEMA_CLASS_REF = "schema_class_ref";
|
|
19
19
|
export declare type METADATA_AND_BIND_TYPE = METADATA_TYPE | 'schema_entity' | 'entity_property' | 'property_entity' | 'schema_class_ref';
|
package/lib/Constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/Constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAGhC,QAAA,YAAY,GAAG,YAAY,CAAC;AAC5B,QAAA,MAAM,GAAG,MAAM,CAAC;AAChB,QAAA,MAAM,GAAG,MAAM,CAAC;AAChB,QAAA,UAAU,GAAG,UAAU,CAAC;AACxB,QAAA,aAAa,GAAG,aAAa,CAAC;AAG9B,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AAEzC,QAAA,mBAAmB,GAAG,aAAa,CAAC;AACpC,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,iBAAiB,GAAG,UAAU,CAAC;AAC/B,QAAA,mBAAmB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/Constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAGhC,QAAA,YAAY,GAAG,YAAY,CAAC;AAC5B,QAAA,MAAM,GAAG,MAAM,CAAC;AAChB,QAAA,MAAM,GAAG,MAAM,CAAC;AAChB,QAAA,UAAU,GAAG,UAAU,CAAC;AACxB,QAAA,aAAa,GAAG,aAAa,CAAC;AAG9B,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AAEzC,QAAA,mBAAmB,GAAG,aAAa,CAAC;AACpC,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,iBAAiB,GAAG,UAAU,CAAC;AAC/B,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAW/B,QAAA,qBAAqB,GAAG,eAAe,CAAC;AACxC,QAAA,wBAAwB,GAAG,kBAAkB,CAAC;AAS9C,QAAA,eAAe,GAAG,IAAI,CAAC;AAEvB,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAG9B,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAyBxC,QAAA,2BAA2B,GAAG,oBAAoB,CAAC;AAChE,mEAAmE;AAEtD,QAAA,aAAa,GAAoB;IAC5C,QAAQ;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,WAAW;IACX,QAAQ;CACX,CAAC;AAEW,QAAA,kBAAkB,GAAoB;IACjD,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;CACT,CAAC;AAGW,QAAA,WAAW,GAAG,KAAK,CAAC;AACpB,QAAA,cAAc,GAAG,QAAQ,CAAC;AAC1B,QAAA,cAAc,GAAG,QAAQ,CAAC;AAC1B,QAAA,sBAAsB,GAAG,gBAAgB,CAAC;AAE1C,QAAA,QAAQ,GAAG,QAAQ,CAAC;AACpB,QAAA,OAAO,GAAG,OAAO,CAAC;AAClB,QAAA,QAAQ,GAAG,QAAQ,CAAC;AACpB,QAAA,SAAS,GAAG,SAAS,CAAC;AAEtB,QAAA,WAAW,GAAG,MAAM,CAAC;AACrB,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,MAAM,GAAG,QAAQ,CAAC;AAClB,QAAA,kBAAkB,GAAG,eAAe,CAAC;AAErC,QAAA,SAAS,GAAG,QAAQ,CAAC;AAErB,QAAA,kBAAkB,GAAG,iBAAiB,CAAC;AACvC,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAWpC,QAAA,mBAAmB,GAAG,CAAC,cAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,cAAM,CAAC,CAAC;AAE/G;;GAEG;AACU,QAAA,cAAc,GAAG,SAAS,CAAC;AAE3B,QAAA,qBAAqB,GAAG,CAAC,sBAAc,CAAC,CAAC","file":"Constants.js","sourcesContent":["import exp = require('constants');\n\nexport const DEFAULT_NAMESPACE = 'default';\nexport const GLOBAL_NAMESPACE = '__global__';\n\n\nexport const C_IDENTIFIER = 'identifier';\nexport const C_TYPE = 'type';\nexport const C_NAME = 'name';\nexport const C_APPENDED = 'appended';\nexport const C_CARDINALITY = 'cardinality';\n\n\nexport const XS_DEFAULT_CLASSES = 'default_class_ref';\n\nexport const REFLECT_DESIGN_TYPE = 'design:type';\nexport const METATYPE_SCHEMA = 'schema';\nexport const METATYPE_ENTITY = 'entity';\nexport const METATYPE_NAMESPACE = 'namespace';\nexport const METATYPE_CLASS_REF = 'class_ref';\nexport const METATYPE_PROPERTY = 'property';\nexport const METATYPE_EMBEDDABLE = 'object';\n\nexport type METADATA_TYPE =\n 'schema'\n | 'object'\n | 'entity'\n | 'property'\n | 'class_ref'\n | 'namespace';\n\n\nexport const BINDING_SCHEMA_ENTITY = 'schema_entity';\nexport const BINDING_SCHEMA_CLASS_REF = 'schema_class_ref';\n\nexport type METADATA_AND_BIND_TYPE = METADATA_TYPE\n | 'schema_entity'\n | 'entity_property'\n | 'property_entity'\n | 'schema_class_ref';\n\nexport type XS_DATA_TYPES = 'string' | 'number' | 'boolean' | 'entity' | 'array' | 'any';\nexport const XS_ID_SEPARATOR = '--';\n\nexport const XS_DEFAULT_SCHEMA = 'default';\n\n\nexport const METADATA_REGISTRY = 'metadata/registry';\n\n\nexport type ClassType<T> = { new(...args: any[]): T; };\n\nexport type JS_DATA_TYPES =\n 'string'\n | 'text'\n | 'number'\n | 'boolean'\n | 'double'\n | 'json'\n | 'date'\n | 'time'\n | 'datetime'\n | 'timestamp'\n | 'byte'\n | 'object'\n | 'array'\n | 'symbol'\n | 'null'\n | 'undefined'\n | 'bigint'\n ;\n\nexport const XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';\n// export const XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';\n\nexport const JS_DATA_TYPES: JS_DATA_TYPES[] = [\n 'string'\n , 'text'\n , 'number'\n , 'boolean'\n , 'double'\n , 'json'\n , 'date'\n , 'time'\n , 'datetime'\n , 'timestamp'\n , 'byte'\n , 'object'\n , 'symbol'\n , 'null'\n , 'undefined'\n , 'bigint'\n];\n\nexport const JS_PRIMATIVE_TYPES: JS_DATA_TYPES[] = [\n 'string',\n 'number',\n 'boolean',\n 'object',\n 'symbol',\n 'date',\n 'null',\n 'undefined',\n 'bigint'\n];\n\n\nexport const C_EVENT_ADD = 'add';\nexport const C_EVENT_REMOVE = 'remove';\nexport const C_EVENT_UPDATE = 'update';\nexport const C_EVENT_DRAIN_FINISHED = 'drain_finished';\n\nexport const T_STRING = 'string';\nexport const T_ARRAY = 'array';\nexport const T_OBJECT = 'object';\nexport const T_BOOLEAN = 'boolean';\n\nexport const C_PROP_NAME = 'name';\nexport const __CLASS__ = '__CLASS__';\nexport const __NS__ = '__NS__';\nexport const OPT_CREAT_AND_COPY = 'createAndCopy';\n\nexport const STATE_KEY = '$state';\n\nexport const K_PATTERN_PROPERTY = 'patternProperty';\nexport const K_TRIGGERED = Symbol('_triggered_');\n\nexport type CLASS_TYPE = Function | ClassType<any>;\nexport type MERGE_TYPE = 'default' | 'assign' | 'merge';\n\nexport interface IMinMax {\n min: number;\n max: number;\n}\n\n\nexport const DEFAULT_KEY_TO_SKIP = [C_TYPE, '$ref', 'target', 'propertyName', 'metaType', 'namespace', C_NAME];\n\n/**\n * Entity option signals that entity is generate by an other\n */\nexport const K_ENTITY_BUILT = '_built_';\n\nexport const DEFINED_PROPS_TO_OPTS = [K_ENTITY_BUILT];\n"],"sourceRoot":".."}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DRAFT_07 = exports.JSON_SCHEMA_SERIALIZER = void 0;
|
|
3
|
+
exports.C_ONLY_DECORATED = exports.DRAFT_07 = exports.JSON_SCHEMA_SERIALIZER = void 0;
|
|
4
4
|
exports.JSON_SCHEMA_SERIALIZER = 'json-schema';
|
|
5
5
|
exports.DRAFT_07 = 'draft-07';
|
|
6
|
+
exports.C_ONLY_DECORATED = 'onlyDecorated';
|
|
6
7
|
|
|
7
8
|
//# sourceMappingURL=Constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/json-schema/Constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,aAAa,CAAC;AACvC,QAAA,QAAQ,GAAG,UAAU,CAAC","file":"Constants.js","sourcesContent":["export const JSON_SCHEMA_SERIALIZER = 'json-schema';\nexport const DRAFT_07 = 'draft-07';\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/json-schema/Constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,aAAa,CAAC;AACvC,QAAA,QAAQ,GAAG,UAAU,CAAC;AAEtB,QAAA,gBAAgB,GAAG,eAAe,CAAC","file":"Constants.js","sourcesContent":["export const JSON_SCHEMA_SERIALIZER = 'json-schema';\nexport const DRAFT_07 = 'draft-07';\n\nexport const C_ONLY_DECORATED = 'onlyDecorated';\n"],"sourceRoot":"../.."}
|
|
@@ -59,4 +59,16 @@ export interface IJsonSchemaSerializeOptions extends ISerializeOptions {
|
|
|
59
59
|
* Serialize only decorated properties (default is true)
|
|
60
60
|
*/
|
|
61
61
|
onlyDecorated?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Add $namespace to schema
|
|
64
|
+
*/
|
|
65
|
+
appendNamespace?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Check if kind of property should be serialized
|
|
68
|
+
*
|
|
69
|
+
* - check for property ref
|
|
70
|
+
* - or klass + property name
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
allowedProperty?: (entry: IPropertyRef | string, klass?: Function) => boolean;
|
|
62
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/json-schema/IJsonSchemaSerializeOptions.ts"],"names":[],"mappings":"","file":"IJsonSchemaSerializeOptions.js","sourcesContent":["import {IJsonSchemaSerializer} from './IJsonSchemaSerializer';\nimport {ISerializeOptions} from '../serializer/ISerializeOptions';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {IClassRef} from \"../../api/IClassRef\";\n\nexport interface IJsonSchemaSerializeOptions extends ISerializeOptions {\n\n /**\n * Version of json schema\n */\n version?: 'draft-07' | string;\n\n /**\n * If multiple schemas\n */\n handleMultipleSchemas?: 'reference' | 'clone';\n\n\n /**\n * If set then on entries with type object the class function will be passed under key $target\n *\n * {\n * title: 'TestClass',\n * type: 'object',\n * $target: ClassType<TestClass>\n * }\n */\n appendTarget?: boolean;\n\n\n /**\n * Callback for postprocess\n */\n postProcess?: (src: any, dst: any, serializer?: IJsonSchemaSerializer) => void;\n\n\n /**\n * Allow override of existing standard properties\n */\n allowKeyOverride?: boolean;\n\n /**\n * Property keys where information can be skipped\n * Default if not set: ['type', '$ref', 'target', '$target','propertyName', 'metaType', 'namespace', 'name']\n * See constant DEFAULT_KEY_TO_SKIP\n */\n keysToSkip?: string[];\n\n /**\n * By default options of reference properties are removed, to pass them set this to 'false'.\n */\n deleteReferenceKeys?: boolean;\n\n\n /**\n * Passed method for type correction if necessary, else\n */\n typeConversion?: (type: any, property: IPropertyRef) => string | null;\n\n /**\n * Passed method for type hint if necessary, else\n */\n typeHint?: (klass: Function | IClassRef, propertyName: string, instance: any, value: any) => string;\n\n /**\n * Default type hint on null or undefined\n */\n defaultTypeHint?: string;\n\n /**\n * Ignore unknown type\n */\n ignoreUnknownType?: boolean;\n\n /**\n * Serialize only decorated properties (default is true)\n */\n onlyDecorated?: boolean;\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/json-schema/IJsonSchemaSerializeOptions.ts"],"names":[],"mappings":"","file":"IJsonSchemaSerializeOptions.js","sourcesContent":["import {IJsonSchemaSerializer} from './IJsonSchemaSerializer';\nimport {ISerializeOptions} from '../serializer/ISerializeOptions';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {IClassRef} from \"../../api/IClassRef\";\nimport {IEntityRef} from \"../../api/IEntityRef\";\n\nexport interface IJsonSchemaSerializeOptions extends ISerializeOptions {\n\n /**\n * Version of json schema\n */\n version?: 'draft-07' | string;\n\n /**\n * If multiple schemas\n */\n handleMultipleSchemas?: 'reference' | 'clone';\n\n\n /**\n * If set then on entries with type object the class function will be passed under key $target\n *\n * {\n * title: 'TestClass',\n * type: 'object',\n * $target: ClassType<TestClass>\n * }\n */\n appendTarget?: boolean;\n\n\n /**\n * Callback for postprocess\n */\n postProcess?: (src: any, dst: any, serializer?: IJsonSchemaSerializer) => void;\n\n\n /**\n * Allow override of existing standard properties\n */\n allowKeyOverride?: boolean;\n\n /**\n * Property keys where information can be skipped\n * Default if not set: ['type', '$ref', 'target', '$target','propertyName', 'metaType', 'namespace', 'name']\n * See constant DEFAULT_KEY_TO_SKIP\n */\n keysToSkip?: string[];\n\n /**\n * By default options of reference properties are removed, to pass them set this to 'false'.\n */\n deleteReferenceKeys?: boolean;\n\n\n /**\n * Passed method for type correction if necessary, else\n */\n typeConversion?: (type: any, property: IPropertyRef) => string | null;\n\n /**\n * Passed method for type hint if necessary, else\n */\n typeHint?: (klass: Function | IClassRef, propertyName: string, instance: any, value: any) => string;\n\n /**\n * Default type hint on null or undefined\n */\n defaultTypeHint?: string;\n\n /**\n * Ignore unknown type\n */\n ignoreUnknownType?: boolean;\n\n /**\n * Serialize only decorated properties (default is true)\n */\n onlyDecorated?: boolean;\n\n /**\n * Add $namespace to schema\n */\n appendNamespace?: boolean;\n\n /**\n * Check if kind of property should be serialized\n *\n * - check for property ref\n * - or klass + property name\n *\n */\n allowedProperty?: (entry: IPropertyRef | string, klass?: Function) => boolean;\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/json-schema/IJsonSchemaUnserializeOptions.ts"],"names":[],"mappings":"","file":"IJsonSchemaUnserializeOptions.js","sourcesContent":["import {METADATA_TYPE} from '../Constants';\nimport {IParseOptions} from './IParseOptions';\nimport {IUnserializeOptions} from '../serializer/IUnserializeOptions';\n\nexport interface IJsonSchemaUnserializeOptions extends IParseOptions, IUnserializeOptions {\n\n /**\n * Version of json schema\n */\n version?: 'draft-7' | string;\n\n /**\n * Key specific method for options extraction from json schema to entity or property options\n */\n collector?: { type: METADATA_TYPE, key?: string, fn: (key: string, data: any, options: IParseOptions) => any }[];\n\n /**\n * If set then a new class ref will be created even if an with same name already exists.\n */\n forceClassRefCreation?: boolean;\n\n /**\n * If set then a new entity ref will be created even if an with same name already exists.\n */\n forceEntityRefCreation?: boolean;\n\n /**\n * If set then a new property ref for class ref will be created even if an with same name already exists.\n */\n forcePropertyRefCreation?: boolean;\n\n\n /**\n * Is root object an entity.\n */\n rootAsEntity?: boolean;\n\n /**\n * Prepend class name on object which is a property.\n */\n prependClass?: boolean;\n\n /**\n * Current working directory\n */\n cwd?: string;\n}\n\n\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/json-schema/IJsonSchemaUnserializeOptions.ts"],"names":[],"mappings":"","file":"IJsonSchemaUnserializeOptions.js","sourcesContent":["import {METADATA_TYPE} from '../Constants';\nimport {IParseOptions} from './IParseOptions';\nimport {IUnserializeOptions} from '../serializer/IUnserializeOptions';\n\nexport interface IJsonSchemaUnserializeOptions extends IParseOptions, IUnserializeOptions {\n\n /**\n * Version of json schema\n */\n version?: 'draft-7' | string;\n\n /**\n * Key specific method for options extraction from json schema to entity or property options\n */\n collector?: { type: METADATA_TYPE, key?: string, fn: (key: string, data: any, options: IParseOptions) => any }[];\n\n /**\n * If set then a new class ref will be created even if an with same name already exists.\n */\n forceClassRefCreation?: boolean;\n\n /**\n * If set then a new entity ref will be created even if an with same name already exists.\n */\n forceEntityRefCreation?: boolean;\n\n /**\n * If set then a new property ref for class ref will be created even if an with same name already exists.\n */\n forcePropertyRefCreation?: boolean;\n\n\n /**\n * Is root object an entity.\n */\n rootAsEntity?: boolean;\n\n /**\n * Prepend class name on object which is a property.\n */\n prependClass?: boolean;\n\n /**\n * Current working directory\n */\n cwd?: string;\n\n /**\n * Ignore namespaces marked by $namespace in json schema data\n */\n skipNamespace?: boolean;\n}\n\n\n"],"sourceRoot":"../.."}
|
|
@@ -35,6 +35,12 @@ export declare class JsonSchema7Serializer implements IJsonSchemaSerializer {
|
|
|
35
35
|
isAppendTargetSet(): boolean;
|
|
36
36
|
describePropertyForFunction(klass: Function | IClassRef, propertyName: string, instance?: any): IJsonSchema7Definition;
|
|
37
37
|
appendAdditionalOptions(propMeta: any, data: IEntityOptions | IPropertyOptions): void;
|
|
38
|
+
/**
|
|
39
|
+
* General handle to check allow options method
|
|
40
|
+
*
|
|
41
|
+
* @param entry
|
|
42
|
+
*/
|
|
43
|
+
allowed(entry: IPropertyRef | string, klass?: any): boolean;
|
|
38
44
|
describePropertyForRef(klass: IClassRef, property: IPropertyRef): IJsonSchema7Definition;
|
|
39
45
|
describeTargetRef(property: IPropertyRef, propMeta: any, mode: 'collection' | 'single'): void;
|
|
40
46
|
propertyPostproces(opt: IJsonSchema7): void;
|
|
@@ -19,7 +19,7 @@ class JsonSchema7Serializer {
|
|
|
19
19
|
keysToSkip: Constants_1.DEFAULT_KEY_TO_SKIP,
|
|
20
20
|
ignoreUnknownType: false,
|
|
21
21
|
defaultTypeHint: 'string',
|
|
22
|
-
|
|
22
|
+
[Constants_2.C_ONLY_DECORATED]: false,
|
|
23
23
|
postProcess: (src, dst, serializer) => {
|
|
24
24
|
if (src && src.metaType === Constants_1.METATYPE_PROPERTY && (0, lodash_1.has)(dst, 'cardinality')) {
|
|
25
25
|
const cardinality = dst['cardinality'];
|
|
@@ -93,7 +93,10 @@ class JsonSchema7Serializer {
|
|
|
93
93
|
else if ((0, IClassRef_1.isClassRef)(klass) && klass.hasEntityRef()) {
|
|
94
94
|
root.$id = '#' + klass.getEntityRef().name;
|
|
95
95
|
}
|
|
96
|
-
if ((0, IEntityRef_1.isEntityRef)(klass) || (0, IClassRef_1.isClassRef)(klass)) {
|
|
96
|
+
if (((0, IEntityRef_1.isEntityRef)(klass) || (0, IClassRef_1.isClassRef)(klass))) {
|
|
97
|
+
if ((0, lodash_1.get)(this.options, 'appendNamespace', false)) {
|
|
98
|
+
(0, lodash_1.set)(root, '$' + Constants_1.METATYPE_NAMESPACE, klass.getRegistry().getLookupRegistry().getNamespace());
|
|
99
|
+
}
|
|
97
100
|
const data = klass.getOptions();
|
|
98
101
|
this.appendAdditionalOptions(root, data);
|
|
99
102
|
}
|
|
@@ -137,7 +140,6 @@ class JsonSchema7Serializer {
|
|
|
137
140
|
describeRef(klass) {
|
|
138
141
|
const clsRef = (0, IEntityRef_1.isEntityRef)(klass) ? klass.getClassRef() : klass;
|
|
139
142
|
const className = (0, IEntityRef_1.isEntityRef)(klass) ? klass.name : clsRef.name;
|
|
140
|
-
// schema = this.getOrCreateSchemaDefinitions(schema);
|
|
141
143
|
const root = this.getOrCreateRoot(className, klass);
|
|
142
144
|
if (!root) {
|
|
143
145
|
return null;
|
|
@@ -201,7 +203,7 @@ class JsonSchema7Serializer {
|
|
|
201
203
|
const _properties = Reflect.ownKeys(instance);
|
|
202
204
|
for (const p of _properties) {
|
|
203
205
|
if ((0, lodash_1.isString)(p)) {
|
|
204
|
-
if (!(0, lodash_1.get)(this.options,
|
|
206
|
+
if (!(0, lodash_1.get)(this.options, Constants_2.C_ONLY_DECORATED, false) && this.allowed(p, klass)) {
|
|
205
207
|
const result = this.describePropertyForFunction(klass, p, instance);
|
|
206
208
|
properties[p] = result;
|
|
207
209
|
}
|
|
@@ -212,17 +214,23 @@ class JsonSchema7Serializer {
|
|
|
212
214
|
describePropertiesForRef(klass) {
|
|
213
215
|
const properties = {};
|
|
214
216
|
for (const prop of klass.getPropertyRefs()) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
+
if (this.allowed(prop)) {
|
|
218
|
+
const result = this.describePropertyForRef(klass, prop);
|
|
219
|
+
if (result) {
|
|
220
|
+
properties[prop.name] = result;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
217
223
|
}
|
|
218
224
|
const instance = klass.create(false);
|
|
219
225
|
// TODO own key
|
|
220
226
|
const _properties = Reflect.ownKeys(instance);
|
|
221
227
|
for (const p of _properties) {
|
|
222
228
|
if ((0, lodash_1.isString)(p) && !(0, lodash_1.has)(properties, p)) {
|
|
223
|
-
if (!(0, lodash_1.get)(this.options,
|
|
229
|
+
if (!(0, lodash_1.get)(this.options, Constants_2.C_ONLY_DECORATED, false)) {
|
|
224
230
|
const result = this.describePropertyForFunction(klass, p, instance);
|
|
225
|
-
|
|
231
|
+
if (result) {
|
|
232
|
+
properties[p] = result;
|
|
233
|
+
}
|
|
226
234
|
}
|
|
227
235
|
}
|
|
228
236
|
else if ((0, lodash_1.isString)(p) && (0, lodash_1.has)(properties, p)) {
|
|
@@ -252,6 +260,7 @@ class JsonSchema7Serializer {
|
|
|
252
260
|
else {
|
|
253
261
|
if (typeHint === Constants_1.T_OBJECT) {
|
|
254
262
|
if (reflectMetadataType && reflectMetadataType !== Constants_1.T_OBJECT) {
|
|
263
|
+
//
|
|
255
264
|
typeHint = reflectMetadataType;
|
|
256
265
|
}
|
|
257
266
|
else {
|
|
@@ -263,11 +272,16 @@ class JsonSchema7Serializer {
|
|
|
263
272
|
}
|
|
264
273
|
else {
|
|
265
274
|
typeHint = (_a = Reflect.getPrototypeOf(value)) === null || _a === void 0 ? void 0 : _a.constructor;
|
|
266
|
-
if (typeHint
|
|
267
|
-
typeHint
|
|
275
|
+
if (typeHint && typeHint.name) {
|
|
276
|
+
if (typeHint.name === Object.name) {
|
|
277
|
+
typeHint = Constants_1.T_OBJECT;
|
|
278
|
+
}
|
|
279
|
+
else if (typeHint.name === Array.name) {
|
|
280
|
+
typeHint = Constants_1.T_ARRAY;
|
|
281
|
+
}
|
|
268
282
|
}
|
|
269
|
-
else
|
|
270
|
-
typeHint =
|
|
283
|
+
else {
|
|
284
|
+
typeHint = this.getDefaultTypeHint();
|
|
271
285
|
}
|
|
272
286
|
}
|
|
273
287
|
}
|
|
@@ -376,6 +390,17 @@ class JsonSchema7Serializer {
|
|
|
376
390
|
}
|
|
377
391
|
}
|
|
378
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* General handle to check allow options method
|
|
395
|
+
*
|
|
396
|
+
* @param entry
|
|
397
|
+
*/
|
|
398
|
+
allowed(entry, klass) {
|
|
399
|
+
if (this.options && this.options.allowedProperty && (0, lodash_1.isFunction)(this.options.allowedProperty)) {
|
|
400
|
+
return this.options.allowedProperty(entry, klass);
|
|
401
|
+
}
|
|
402
|
+
return true;
|
|
403
|
+
}
|
|
379
404
|
describePropertyForRef(klass, property) {
|
|
380
405
|
const propMeta = {};
|
|
381
406
|
if (property.isCollection()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/json-schema/JsonSchema7Serializer.ts"],"names":[],"mappings":"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","file":"JsonSchema7Serializer.js","sourcesContent":["import {defaults, get, has, isEmpty, isFunction, isNull, isString, isUndefined, keys, snakeCase, uniqBy} from 'lodash';\nimport {ClassUtils, NotSupportedError} from '@allgemein/base';\nimport {IJsonSchema7, IJsonSchema7Definition, IJsonSchema7TypeName, JSON_SCHEMA_7_TYPES} from './JsonSchema7';\nimport {\n DEFAULT_KEY_TO_SKIP,\n K_PATTERN_PROPERTY,\n METATYPE_PROPERTY,\n T_ARRAY,\n T_BOOLEAN,\n T_OBJECT,\n T_STRING\n} from '../Constants';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {SchemaUtils} from '../SchemaUtils';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {IJsonSchemaSerializer} from './IJsonSchemaSerializer';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IJsonSchemaSerializeOptions} from './IJsonSchemaSerializeOptions';\nimport {DRAFT_07} from './Constants';\nimport {MetadataRegistry} from '../registry/MetadataRegistry';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {getReflectedType, setDefaultArray} from \"./functions\";\nimport {getClassName} from \"../functions\";\n\n\nexport class JsonSchema7Serializer implements IJsonSchemaSerializer {\n\n options: IJsonSchemaSerializeOptions;\n\n data: IJsonSchema7;\n\n current: string;\n\n constructor(opts: IJsonSchemaSerializeOptions) {\n this.options = opts || {};\n defaults(this.options, <IJsonSchemaSerializeOptions>{\n keysToSkip: DEFAULT_KEY_TO_SKIP,\n ignoreUnknownType: false,\n defaultTypeHint: 'string',\n onlyDecorated: false,\n postProcess: (src, dst, serializer) => {\n if (src && src.metaType === METATYPE_PROPERTY && has(dst, 'cardinality')) {\n const cardinality = dst['cardinality'];\n delete dst['cardinality'];\n // TODO handle value corretly minItem/maxItem when item!\n if (cardinality === 0) {\n\n } else {\n //delete dst['cardinality'];\n }\n }\n }\n });\n this.data = this.getOrCreateSchemaDefinitions();\n }\n\n\n uri(): string {\n return `http://json-schema.org/${DRAFT_07}/schema`;\n }\n\n\n private isCurrentClass(x: string) {\n return snakeCase(this.current) === snakeCase(x);\n }\n\n\n serialize(klass: IClassRef | IEntityRef | Function | object): IJsonSchema7 {\n if (isFunction(klass)) {\n this.current = ClassUtils.getClassName(klass);\n this.describeClass(klass);\n } else if (isClassRef(klass)) {\n this.current = klass.name;\n this.describeClassRef(klass);\n } else if (isEntityRef(klass)) {\n this.current = klass.name;\n this.describeEntityRef(klass);\n } else {\n throw new NotSupportedError('class or function can\\'t be used');\n }\n return this.getJsonSchema();\n }\n\n\n getJsonSchema() {\n return this.data;\n }\n\n\n private getOrCreateSchemaDefinitions(schema?: IJsonSchema7) {\n if (!schema) {\n schema = {\n $schema: this.uri() + '#',\n definitions: {}\n };\n } else if (schema && !schema.definitions) {\n schema.definitions = {};\n }\n return schema;\n }\n\n\n private getOrCreateRoot(entityName: string, klass: Function | IClassRef | IEntityRef) {\n if (this.data.definitions[entityName]) {\n // definition is present and\n this.applyRef(entityName);\n return null;\n }\n\n const className = getClassName(klass);\n\n\n const appendTarget = this.isAppendTargetSet();\n const root: IJsonSchema7Definition = this.data.definitions[entityName] = {\n title: className ? className : entityName,\n type: T_OBJECT,\n };\n\n if (isEntityRef(klass)) {\n // when an entity mark with $id!\n root.$id = '#' + klass.name;\n } else if (isClassRef(klass) && klass.hasEntityRef()) {\n root.$id = '#' + klass.getEntityRef().name;\n }\n\n if (isEntityRef(klass) || isClassRef(klass)) {\n const data = klass.getOptions();\n this.appendAdditionalOptions(root, data);\n }\n\n if (appendTarget) {\n root.$target = SchemaUtils.getFunction(klass);\n }\n\n this.applyRef(entityName);\n\n if (this.options.postProcess) {\n this.options.postProcess(klass, root, this);\n }\n return root;\n }\n\n\n applyRef(className: string) {\n if (!this.data.$ref && !this.data.anyOf) {\n this.data.$ref = '#/definitions/' + className;\n } else if (this.data.$ref && !this.data.anyOf) {\n if (this.isCurrentClass(className)) {\n this.data.anyOf = [\n {$ref: this.data.$ref},\n {$ref: '#/definitions/' + className}\n ];\n delete this.data['$ref'];\n }\n } else if (!this.data.$ref && this.data.anyOf) {\n if (this.isCurrentClass(className)) {\n this.data.anyOf.push({$ref: '#/definitions/' + className});\n }\n }\n\n if (this.data.anyOf) {\n this.data.anyOf = uniqBy(this.data.anyOf, x => JSON.stringify(x));\n }\n }\n\n\n describeEntityRef(klass: IEntityRef): IJsonSchema7 {\n return this.describeRef(klass);\n }\n\n\n describeClassRef(klass: IClassRef): IJsonSchema7 {\n return this.describeRef(klass);\n }\n\n private describeRef(klass: IEntityRef | IClassRef): IJsonSchema7 {\n const clsRef = isEntityRef(klass) ? klass.getClassRef() : klass;\n const className = isEntityRef(klass) ? klass.name : clsRef.name;\n\n // schema = this.getOrCreateSchemaDefinitions(schema);\n const root = this.getOrCreateRoot(className, klass);\n if (!root) {\n return null;\n }\n\n const rootProps = this.describePropertiesForRef(clsRef);\n this.appendProperties(root, rootProps);\n\n const proto = clsRef.getExtend();\n if (proto) {\n this.describeInheritedClass(root, proto);\n }\n return root;\n }\n\n\n describeInheritedClass(root: IJsonSchema7, proto: IClassRef) {\n const inheritedClassName = proto.name;\n root.allOf = [{$ref: '#/definitions/' + inheritedClassName}];\n if (!this.data.definitions[inheritedClassName]) {\n const inheritedClass = this.getOrCreateRoot(inheritedClassName, proto);\n const props = this.describePropertiesForRef(proto);\n this.appendProperties(inheritedClass, props);\n }\n }\n\n\n describeClass(klass: Function): IJsonSchema7 {\n const className = ClassUtils.getClassName(klass);\n\n const root = this.getOrCreateRoot(className, klass);\n if (!root) {\n return null;\n }\n\n const rootProps = this.describePropertiesForFunction(klass);\n this.appendProperties(root, rootProps);\n\n const proto = SchemaUtils.getInherited(klass);\n if (proto) {\n const inheritedClassName = ClassUtils.getClassName(proto);\n root.allOf = [{$ref: '#/definitions/' + inheritedClassName}];\n if (this.data && !this.data.definitions[inheritedClassName]) {\n const inheritedClass = this.getOrCreateRoot(inheritedClassName, proto);\n const props = this.describePropertiesForFunction(proto);\n this.appendProperties(inheritedClass, props);\n }\n }\n return root;\n }\n\n appendProperties(data: any, properties: { [k: string]: IJsonSchema7Definition }) {\n data.properties = {};\n for (const k of keys(properties)) {\n const p = properties[k];\n if (p[K_PATTERN_PROPERTY]) {\n if (!data.patternProperties) {\n data.patternProperties = {};\n }\n data.patternProperties[k] = p;\n } else {\n data.properties[k] = p;\n }\n delete p[K_PATTERN_PROPERTY];\n }\n }\n\n\n describePropertiesForFunction(klass: Function) {\n const properties: { [k: string]: IJsonSchema7Definition } = {};\n const instance = Reflect.construct(klass, []);\n const _properties = Reflect.ownKeys(instance);\n for (const p of _properties) {\n if (isString(p)) {\n if (!get(this.options, 'onlyDecorated', false)) {\n const result = this.describePropertyForFunction(klass, p, instance);\n properties[p] = result;\n }\n }\n }\n return properties;\n }\n\n\n describePropertiesForRef(klass: IClassRef) {\n const properties: { [k: string]: IJsonSchema7Definition } = {};\n\n for (const prop of klass.getPropertyRefs()) {\n const result = this.describePropertyForRef(klass, prop);\n properties[prop.name] = result;\n }\n\n const instance = klass.create<object>(false);\n // TODO own key\n const _properties = Reflect.ownKeys(instance);\n for (const p of _properties) {\n if (isString(p) && !has(properties, p)) {\n if (!get(this.options, 'onlyDecorated', false)) {\n const result = this.describePropertyForFunction(klass, p, instance);\n properties[p] = result;\n }\n } else if (isString(p) && has(properties, p)) {\n const value = instance[p];\n if (!isNull(value) || !isUndefined(value)) {\n // add default value if exists\n (properties[p] as any).default = SchemaUtils.normValue(value);\n }\n }\n }\n return properties;\n }\n\n\n isAppendTargetSet() {\n return get(this.options, 'appendTarget', false);\n }\n\n\n describePropertyForFunction(klass: Function | IClassRef, propertyName: string, instance?: any): IJsonSchema7Definition {\n const clazz = isClassRef(klass) ? klass.getClass() : klass;\n const propMeta: IJsonSchema7Definition = {};\n\n // check if property is object\n let value = instance[propertyName];\n let typeHint: any = typeof value;\n const reflectMetadataType = getReflectedType(clazz, propertyName);\n if (this.options.typeHint && isFunction(this.options.typeHint)) {\n typeHint = this.options.typeHint(klass, propertyName, instance, value);\n } else {\n if (typeHint === T_OBJECT) {\n if (reflectMetadataType && reflectMetadataType !== T_OBJECT) {\n typeHint = reflectMetadataType;\n } else {\n if (value === null || value === undefined) {\n typeHint = this.getDefaultTypeHint();\n } else if (value === false || value === true) {\n typeHint = T_BOOLEAN;\n } else {\n typeHint = Reflect.getPrototypeOf(value)?.constructor;\n if (typeHint.name === Object.name) {\n typeHint = T_OBJECT;\n } else if (typeHint.name === Array.name) {\n typeHint = T_ARRAY;\n }\n }\n }\n }\n }\n\n let target = null;\n if (typeHint) {\n if (isString(typeHint)) {\n propMeta.type = typeHint as IJsonSchema7TypeName;\n if (propMeta.type === T_ARRAY) {\n setDefaultArray(propMeta);\n }\n } else if (isFunction(typeHint)) {\n if (typeHint === Date) {\n // propMeta.type = 'date' as any;\n propMeta.type = T_STRING;\n propMeta.format = 'date-time';\n } else {\n const name = ClassUtils.getClassName(typeHint);\n if (name === '' || name === Function.name) {\n // Function passing the parameter type\n // propMeta.$target = typeHint();\n target = typeHint();\n } else {\n // propMeta.$target = typeHint as Function;\n target = typeHint as Function;\n }\n\n // maybe follow the object here\n if (target.name === Array.name) {\n setDefaultArray(propMeta);\n } else {\n propMeta.type = T_OBJECT;\n }\n }\n }\n }\n\n\n if (!propMeta.type || (isString(propMeta.type) && isEmpty(propMeta.type))) {\n if (reflectMetadataType) {\n const className = ClassUtils.getClassName(reflectMetadataType);\n if (JSON_SCHEMA_7_TYPES.includes(className.toLowerCase() as any)) {\n propMeta.type = className.toLowerCase() as IJsonSchema7TypeName;\n } else if (className === Array.name) {\n setDefaultArray(propMeta);\n } else {\n propMeta.type = T_OBJECT;\n target = reflectMetadataType;\n }\n } else {\n // not reflection data\n propMeta.type = this.getDefaultTypeHint();\n }\n }\n\n if (target) {\n if (this.isAppendTargetSet()) {\n propMeta.$target = target;\n }\n\n const className = ClassUtils.getClassName(target);\n let ref = '#/definitions/' + className;\n if (propMeta.type === T_ARRAY) {\n propMeta.items = {\n $ref: ref\n };\n } else {\n propMeta['$ref'] = ref;\n delete propMeta['type'];\n }\n if (this.data && !this.data.definitions[className]) {\n this.describeClass(target);\n }\n }\n\n if (!(isUndefined(value) || isNull(value))) {\n propMeta.default = SchemaUtils.normValue(value);\n }\n\n this.propertyPostproces(propMeta);\n const data = MetadataRegistry.$().find(METATYPE_PROPERTY, (x: any) => x.target === clazz && x.propertyName === propertyName);\n this.appendAdditionalOptions(propMeta, data);\n return propMeta;\n }\n\n\n appendAdditionalOptions(propMeta: any, data: IEntityOptions | IPropertyOptions) {\n if (data && keys(data).length > 0) {\n const metaType = data.metaType;\n if (metaType === METATYPE_PROPERTY) {\n if (isClassRef(data.type) || isEntityRef(data.type)) {\n // if reference ignore adding\n if (get(this.options, 'deleteReferenceKeys', true)) {\n return;\n }\n }\n }\n const _keys = keys(data);\n\n for (const k of _keys) {\n if (this.options.keysToSkip.includes(k)) {\n continue;\n }\n\n if (!propMeta[k] || get(this.options, 'allowKeyOverride', false)) {\n propMeta[k] = data[k];\n }\n }\n }\n }\n\n\n describePropertyForRef(klass: IClassRef, property: IPropertyRef): IJsonSchema7Definition {\n const propMeta: IJsonSchema7Definition = {};\n\n if (property.isCollection()) {\n setDefaultArray(propMeta);\n if (property.isReference()) {\n this.describeTargetRef(property, propMeta, 'collection');\n } else {\n const normedType = this.getNormedType(property);\n propMeta.items = {\n type: normedType as any\n };\n this.propertyPostproces(propMeta.items);\n }\n } else {\n propMeta.type = T_OBJECT;\n if (property.isReference()) {\n this.describeTargetRef(property, propMeta, 'single');\n } else {\n const normedType = this.getNormedType(property);\n propMeta.type = normedType as any;\n this.propertyPostproces(propMeta);\n }\n }\n\n const data = property.getOptions();\n this.appendAdditionalOptions(propMeta, data);\n // pass data pattern property for later correct selection\n if (data[K_PATTERN_PROPERTY]) {\n (propMeta as any)[K_PATTERN_PROPERTY] = true;\n }\n if (this.options.postProcess) {\n this.options.postProcess(property, propMeta, this);\n }\n return propMeta;\n }\n\n\n describeTargetRef(property: IPropertyRef, propMeta: any, mode: 'collection' | 'single') {\n let targetRef: any = property.getTargetRef();\n if (get(this.options, 'deleteReferenceKeys', true)) {\n keys(propMeta).map(k => delete propMeta[k]);\n } else {\n this.options.keysToSkip.map(x => delete propMeta[x]);\n }\n\n if (targetRef.hasEntityRef()) {\n targetRef = targetRef.getEntityRef();\n if (mode === 'collection') {\n propMeta.type = T_ARRAY;\n propMeta.items = {$ref: '#/definitions/' + targetRef.name};\n } else {\n propMeta.$ref = '#/definitions/' + targetRef.name;\n }\n if (this.data && !this.data.definitions[targetRef.name]) {\n this.describeEntityRef(targetRef);\n }\n } else {\n if (mode === 'collection') {\n propMeta.type = T_ARRAY;\n propMeta.items = {$ref: '#/definitions/' + targetRef.name};\n } else {\n propMeta.$ref = '#/definitions/' + targetRef.name;\n }\n if (this.data && !this.data.definitions[targetRef.name]) {\n this.describeClassRef(targetRef);\n }\n }\n }\n\n propertyPostproces(opt: IJsonSchema7) {\n if ((opt.type as any) === 'date') {\n opt.type = T_STRING;\n opt.format = 'date-time';\n }\n }\n\n\n getNormedType(property: IPropertyRef) {\n let retType = null;\n const type = property.getType();\n if (this.options.typeConversion) {\n retType = this.options.typeConversion(type, property);\n }\n\n if (!retType) {\n retType = isFunction(type) ? type.name.toLowerCase() : type;\n }\n\n return retType;\n }\n\n\n getDefaultTypeHint() {\n return this.options && this.options.defaultTypeHint ? this.options.defaultTypeHint as any : T_STRING;\n }\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/json-schema/JsonSchema7Serializer.ts"],"names":[],"mappings":"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","file":"JsonSchema7Serializer.js","sourcesContent":["import {\n defaults,\n get,\n has,\n isEmpty,\n isFunction,\n isNull,\n isString,\n isUndefined,\n keys,\n set,\n snakeCase,\n uniqBy\n} from 'lodash';\nimport {ClassUtils, NotSupportedError} from '@allgemein/base';\nimport {IJsonSchema7, IJsonSchema7Definition, IJsonSchema7TypeName, JSON_SCHEMA_7_TYPES} from './JsonSchema7';\nimport {\n DEFAULT_KEY_TO_SKIP,\n K_PATTERN_PROPERTY, METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n T_ARRAY,\n T_BOOLEAN,\n T_OBJECT,\n T_STRING\n} from '../Constants';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {SchemaUtils} from '../SchemaUtils';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {IJsonSchemaSerializer} from './IJsonSchemaSerializer';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IJsonSchemaSerializeOptions} from './IJsonSchemaSerializeOptions';\nimport {C_ONLY_DECORATED, DRAFT_07} from './Constants';\nimport {MetadataRegistry} from '../registry/MetadataRegistry';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {getReflectedType, setDefaultArray} from \"./functions\";\nimport {getClassName} from \"../functions\";\n\n\nexport class JsonSchema7Serializer implements IJsonSchemaSerializer {\n\n options: IJsonSchemaSerializeOptions;\n\n data: IJsonSchema7;\n\n current: string;\n\n constructor(opts: IJsonSchemaSerializeOptions) {\n this.options = opts || {};\n defaults(this.options, <IJsonSchemaSerializeOptions>{\n keysToSkip: DEFAULT_KEY_TO_SKIP,\n ignoreUnknownType: false,\n defaultTypeHint: 'string',\n [C_ONLY_DECORATED]: false,\n postProcess: (src, dst, serializer) => {\n if (src && src.metaType === METATYPE_PROPERTY && has(dst, 'cardinality')) {\n const cardinality = dst['cardinality'];\n delete dst['cardinality'];\n // TODO handle value corretly minItem/maxItem when item!\n if (cardinality === 0) {\n\n } else {\n //delete dst['cardinality'];\n }\n }\n }\n });\n this.data = this.getOrCreateSchemaDefinitions();\n }\n\n\n uri(): string {\n return `http://json-schema.org/${DRAFT_07}/schema`;\n }\n\n\n private isCurrentClass(x: string) {\n return snakeCase(this.current) === snakeCase(x);\n }\n\n\n serialize(klass: IClassRef | IEntityRef | Function | object): IJsonSchema7 {\n if (isFunction(klass)) {\n this.current = ClassUtils.getClassName(klass);\n this.describeClass(klass);\n } else if (isClassRef(klass)) {\n this.current = klass.name;\n this.describeClassRef(klass);\n } else if (isEntityRef(klass)) {\n this.current = klass.name;\n this.describeEntityRef(klass);\n } else {\n throw new NotSupportedError('class or function can\\'t be used');\n }\n return this.getJsonSchema();\n }\n\n\n getJsonSchema() {\n return this.data;\n }\n\n\n private getOrCreateSchemaDefinitions(schema?: IJsonSchema7) {\n if (!schema) {\n schema = {\n $schema: this.uri() + '#',\n definitions: {}\n };\n } else if (schema && !schema.definitions) {\n schema.definitions = {};\n }\n return schema;\n }\n\n\n private getOrCreateRoot(entityName: string, klass: Function | IClassRef | IEntityRef) {\n if (this.data.definitions[entityName]) {\n // definition is present and\n this.applyRef(entityName);\n return null;\n }\n\n const className = getClassName(klass);\n const appendTarget = this.isAppendTargetSet();\n const root: IJsonSchema7Definition = this.data.definitions[entityName] = {\n title: className ? className : entityName,\n type: T_OBJECT,\n };\n if (isEntityRef(klass)) {\n // when an entity mark with $id!\n root.$id = '#' + klass.name;\n } else if (isClassRef(klass) && klass.hasEntityRef()) {\n root.$id = '#' + klass.getEntityRef().name;\n }\n\n if ((isEntityRef(klass) || isClassRef(klass))) {\n if (get(this.options, 'appendNamespace', false)) {\n set(root, '$' + METATYPE_NAMESPACE, klass.getRegistry().getLookupRegistry().getNamespace());\n }\n const data = klass.getOptions();\n this.appendAdditionalOptions(root, data);\n }\n\n if (appendTarget) {\n root.$target = SchemaUtils.getFunction(klass);\n }\n\n this.applyRef(entityName);\n if (this.options.postProcess) {\n this.options.postProcess(klass, root, this);\n }\n return root;\n }\n\n\n applyRef(className: string) {\n if (!this.data.$ref && !this.data.anyOf) {\n this.data.$ref = '#/definitions/' + className;\n } else if (this.data.$ref && !this.data.anyOf) {\n if (this.isCurrentClass(className)) {\n this.data.anyOf = [\n {$ref: this.data.$ref},\n {$ref: '#/definitions/' + className}\n ];\n delete this.data['$ref'];\n }\n } else if (!this.data.$ref && this.data.anyOf) {\n if (this.isCurrentClass(className)) {\n this.data.anyOf.push({$ref: '#/definitions/' + className});\n }\n }\n\n if (this.data.anyOf) {\n this.data.anyOf = uniqBy(this.data.anyOf, x => JSON.stringify(x));\n }\n }\n\n\n describeEntityRef(klass: IEntityRef): IJsonSchema7 {\n return this.describeRef(klass);\n }\n\n\n describeClassRef(klass: IClassRef): IJsonSchema7 {\n return this.describeRef(klass);\n }\n\n\n private describeRef(klass: IEntityRef | IClassRef): IJsonSchema7 {\n const clsRef = isEntityRef(klass) ? klass.getClassRef() : klass;\n const className = isEntityRef(klass) ? klass.name : clsRef.name;\n\n const root = this.getOrCreateRoot(className, klass);\n if (!root) {\n return null;\n }\n\n const rootProps = this.describePropertiesForRef(clsRef);\n this.appendProperties(root, rootProps);\n\n const proto = clsRef.getExtend();\n if (proto) {\n this.describeInheritedClass(root, proto);\n }\n return root;\n }\n\n\n describeInheritedClass(root: IJsonSchema7, proto: IClassRef) {\n const inheritedClassName = proto.name;\n root.allOf = [{$ref: '#/definitions/' + inheritedClassName}];\n if (!this.data.definitions[inheritedClassName]) {\n const inheritedClass = this.getOrCreateRoot(inheritedClassName, proto);\n const props = this.describePropertiesForRef(proto);\n this.appendProperties(inheritedClass, props);\n }\n }\n\n\n describeClass(klass: Function): IJsonSchema7 {\n const className = ClassUtils.getClassName(klass);\n\n const root = this.getOrCreateRoot(className, klass);\n if (!root) {\n return null;\n }\n\n const rootProps = this.describePropertiesForFunction(klass);\n this.appendProperties(root, rootProps);\n const proto = SchemaUtils.getInherited(klass);\n if (proto) {\n const inheritedClassName = ClassUtils.getClassName(proto);\n root.allOf = [{$ref: '#/definitions/' + inheritedClassName}];\n if (this.data && !this.data.definitions[inheritedClassName]) {\n const inheritedClass = this.getOrCreateRoot(inheritedClassName, proto);\n const props = this.describePropertiesForFunction(proto);\n this.appendProperties(inheritedClass, props);\n }\n }\n return root;\n }\n\n appendProperties(data: any, properties: { [k: string]: IJsonSchema7Definition }) {\n data.properties = {};\n for (const k of keys(properties)) {\n const p = properties[k];\n if (p[K_PATTERN_PROPERTY]) {\n if (!data.patternProperties) {\n data.patternProperties = {};\n }\n data.patternProperties[k] = p;\n } else {\n data.properties[k] = p;\n }\n delete p[K_PATTERN_PROPERTY];\n }\n }\n\n\n describePropertiesForFunction(klass: Function) {\n const properties: { [k: string]: IJsonSchema7Definition } = {};\n const instance = Reflect.construct(klass, []);\n const _properties = Reflect.ownKeys(instance);\n for (const p of _properties) {\n if (isString(p)) {\n if (!get(this.options, C_ONLY_DECORATED, false) && this.allowed(p, klass)) {\n const result = this.describePropertyForFunction(klass, p, instance);\n properties[p] = result;\n }\n }\n }\n return properties;\n }\n\n\n describePropertiesForRef(klass: IClassRef) {\n const properties: { [k: string]: IJsonSchema7Definition } = {};\n for (const prop of klass.getPropertyRefs()) {\n if (this.allowed(prop)) {\n const result = this.describePropertyForRef(klass, prop);\n if (result) {\n properties[prop.name] = result;\n }\n }\n }\n\n const instance = klass.create<object>(false);\n // TODO own key\n const _properties = Reflect.ownKeys(instance);\n for (const p of _properties) {\n if (isString(p) && !has(properties, p)) {\n if (!get(this.options, C_ONLY_DECORATED, false)) {\n const result = this.describePropertyForFunction(klass, p, instance);\n if (result) {\n properties[p] = result;\n }\n }\n } else if (isString(p) && has(properties, p)) {\n const value = instance[p];\n if (!isNull(value) || !isUndefined(value)) {\n // add default value if exists\n (properties[p] as any).default = SchemaUtils.normValue(value);\n }\n }\n }\n return properties;\n }\n\n\n isAppendTargetSet() {\n return get(this.options, 'appendTarget', false);\n }\n\n\n describePropertyForFunction(klass: Function | IClassRef, propertyName: string, instance?: any): IJsonSchema7Definition {\n const clazz = isClassRef(klass) ? klass.getClass() : klass;\n const propMeta: IJsonSchema7Definition = {};\n\n // check if property is object\n let value = instance[propertyName];\n let typeHint: any = typeof value;\n const reflectMetadataType = getReflectedType(clazz, propertyName);\n if (this.options.typeHint && isFunction(this.options.typeHint)) {\n typeHint = this.options.typeHint(klass, propertyName, instance, value);\n } else {\n if (typeHint === T_OBJECT) {\n if (reflectMetadataType && reflectMetadataType !== T_OBJECT) {\n //\n typeHint = reflectMetadataType;\n } else {\n if (value === null || value === undefined) {\n typeHint = this.getDefaultTypeHint();\n } else if (value === false || value === true) {\n typeHint = T_BOOLEAN;\n } else {\n typeHint = Reflect.getPrototypeOf(value)?.constructor;\n if (typeHint && typeHint.name) {\n if (typeHint.name === Object.name) {\n typeHint = T_OBJECT;\n } else if (typeHint.name === Array.name) {\n typeHint = T_ARRAY;\n }\n } else {\n typeHint = this.getDefaultTypeHint();\n }\n }\n }\n }\n }\n\n let target = null;\n if (typeHint) {\n if (isString(typeHint)) {\n propMeta.type = typeHint as IJsonSchema7TypeName;\n if (propMeta.type === T_ARRAY) {\n setDefaultArray(propMeta);\n }\n } else if (isFunction(typeHint)) {\n if (typeHint === Date) {\n // propMeta.type = 'date' as any;\n propMeta.type = T_STRING;\n propMeta.format = 'date-time';\n } else {\n const name = ClassUtils.getClassName(typeHint);\n if (name === '' || name === Function.name) {\n // Function passing the parameter type\n // propMeta.$target = typeHint();\n target = typeHint();\n } else {\n // propMeta.$target = typeHint as Function;\n target = typeHint as Function;\n }\n\n // maybe follow the object here\n if (target.name === Array.name) {\n setDefaultArray(propMeta);\n } else {\n propMeta.type = T_OBJECT;\n }\n }\n }\n }\n\n\n if (!propMeta.type || (isString(propMeta.type) && isEmpty(propMeta.type))) {\n if (reflectMetadataType) {\n const className = ClassUtils.getClassName(reflectMetadataType);\n if (JSON_SCHEMA_7_TYPES.includes(className.toLowerCase() as any)) {\n propMeta.type = className.toLowerCase() as IJsonSchema7TypeName;\n } else if (className === Array.name) {\n setDefaultArray(propMeta);\n } else {\n propMeta.type = T_OBJECT;\n target = reflectMetadataType;\n }\n } else {\n // not reflection data\n propMeta.type = this.getDefaultTypeHint();\n }\n }\n\n if (target) {\n if (this.isAppendTargetSet()) {\n propMeta.$target = target;\n }\n\n const className = ClassUtils.getClassName(target);\n let ref = '#/definitions/' + className;\n if (propMeta.type === T_ARRAY) {\n propMeta.items = {\n $ref: ref\n };\n } else {\n propMeta['$ref'] = ref;\n delete propMeta['type'];\n }\n if (this.data && !this.data.definitions[className]) {\n this.describeClass(target);\n }\n }\n\n if (!(isUndefined(value) || isNull(value))) {\n propMeta.default = SchemaUtils.normValue(value);\n }\n\n this.propertyPostproces(propMeta);\n const data = MetadataRegistry.$().find(METATYPE_PROPERTY, (x: any) => x.target === clazz && x.propertyName === propertyName);\n this.appendAdditionalOptions(propMeta, data);\n return propMeta;\n }\n\n\n appendAdditionalOptions(propMeta: any, data: IEntityOptions | IPropertyOptions) {\n if (data && keys(data).length > 0) {\n const metaType = data.metaType;\n if (metaType === METATYPE_PROPERTY) {\n if (isClassRef(data.type) || isEntityRef(data.type)) {\n // if reference ignore adding\n if (get(this.options, 'deleteReferenceKeys', true)) {\n return;\n }\n }\n }\n\n const _keys = keys(data);\n for (const k of _keys) {\n if (this.options.keysToSkip.includes(k)) {\n continue;\n }\n if (!propMeta[k] || get(this.options, 'allowKeyOverride', false)) {\n propMeta[k] = data[k];\n }\n }\n }\n }\n\n\n /**\n * General handle to check allow options method\n *\n * @param entry\n */\n allowed(entry: IPropertyRef | string, klass?: any) {\n if (this.options && this.options.allowedProperty && isFunction(this.options.allowedProperty)) {\n return this.options.allowedProperty(entry, klass);\n }\n return true;\n }\n\n\n describePropertyForRef(klass: IClassRef, property: IPropertyRef): IJsonSchema7Definition {\n const propMeta: IJsonSchema7Definition = {};\n if (property.isCollection()) {\n setDefaultArray(propMeta);\n if (property.isReference()) {\n this.describeTargetRef(property, propMeta, 'collection');\n } else {\n const normedType = this.getNormedType(property);\n propMeta.items = {\n type: normedType as any\n };\n this.propertyPostproces(propMeta.items);\n }\n } else {\n propMeta.type = T_OBJECT;\n if (property.isReference()) {\n this.describeTargetRef(property, propMeta, 'single');\n } else {\n const normedType = this.getNormedType(property);\n propMeta.type = normedType as any;\n this.propertyPostproces(propMeta);\n }\n }\n\n const data = property.getOptions();\n this.appendAdditionalOptions(propMeta, data);\n // pass data pattern property for later correct selection\n if (data[K_PATTERN_PROPERTY]) {\n (propMeta as any)[K_PATTERN_PROPERTY] = true;\n }\n if (this.options.postProcess) {\n this.options.postProcess(property, propMeta, this);\n }\n return propMeta;\n }\n\n\n describeTargetRef(property: IPropertyRef, propMeta: any, mode: 'collection' | 'single') {\n let targetRef: any = property.getTargetRef();\n if (get(this.options, 'deleteReferenceKeys', true)) {\n keys(propMeta).map(k => delete propMeta[k]);\n } else {\n this.options.keysToSkip.map(x => delete propMeta[x]);\n }\n\n if (targetRef.hasEntityRef()) {\n targetRef = targetRef.getEntityRef();\n if (mode === 'collection') {\n propMeta.type = T_ARRAY;\n propMeta.items = {$ref: '#/definitions/' + targetRef.name};\n } else {\n propMeta.$ref = '#/definitions/' + targetRef.name;\n }\n if (this.data && !this.data.definitions[targetRef.name]) {\n this.describeEntityRef(targetRef);\n }\n } else {\n if (mode === 'collection') {\n propMeta.type = T_ARRAY;\n propMeta.items = {$ref: '#/definitions/' + targetRef.name};\n } else {\n propMeta.$ref = '#/definitions/' + targetRef.name;\n }\n if (this.data && !this.data.definitions[targetRef.name]) {\n this.describeClassRef(targetRef);\n }\n }\n }\n\n propertyPostproces(opt: IJsonSchema7) {\n if ((opt.type as any) === 'date') {\n opt.type = T_STRING;\n opt.format = 'date-time';\n }\n }\n\n\n getNormedType(property: IPropertyRef) {\n let retType = null;\n const type = property.getType();\n if (this.options.typeConversion) {\n retType = this.options.typeConversion(type, property);\n }\n\n if (!retType) {\n retType = isFunction(type) ? type.name.toLowerCase() : type;\n }\n\n return retType;\n }\n\n\n getDefaultTypeHint() {\n return this.options && this.options.defaultTypeHint ? this.options.defaultTypeHint as any : T_STRING;\n }\n\n}\n"],"sourceRoot":"../.."}
|