@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.
Files changed (31) hide show
  1. package/decorators/Namespace.js +5 -1
  2. package/decorators/Namespace.js.map +1 -1
  3. package/lib/ClassRef.d.ts +4 -1
  4. package/lib/ClassRef.js +18 -19
  5. package/lib/ClassRef.js.map +1 -1
  6. package/lib/Constants.d.ts +1 -1
  7. package/lib/Constants.js.map +1 -1
  8. package/lib/json-schema/Constants.d.ts +1 -0
  9. package/lib/json-schema/Constants.js +2 -1
  10. package/lib/json-schema/Constants.js.map +1 -1
  11. package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +12 -0
  12. package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -1
  13. package/lib/json-schema/IJsonSchemaUnserializeOptions.d.ts +4 -0
  14. package/lib/json-schema/IJsonSchemaUnserializeOptions.js.map +1 -1
  15. package/lib/json-schema/JsonSchema7Serializer.d.ts +6 -0
  16. package/lib/json-schema/JsonSchema7Serializer.js +37 -12
  17. package/lib/json-schema/JsonSchema7Serializer.js.map +1 -1
  18. package/lib/json-schema/JsonSchema7Unserializer.d.ts +1 -1
  19. package/lib/json-schema/JsonSchema7Unserializer.js +6 -5
  20. package/lib/json-schema/JsonSchema7Unserializer.js.map +1 -1
  21. package/lib/registry/AbstractRegistry.d.ts +6 -8
  22. package/lib/registry/AbstractRegistry.js +11 -21
  23. package/lib/registry/AbstractRegistry.js.map +1 -1
  24. package/lib/registry/DefaultNamespacedRegistry.d.ts +1 -1
  25. package/lib/registry/DefaultNamespacedRegistry.js +20 -15
  26. package/lib/registry/DefaultNamespacedRegistry.js.map +1 -1
  27. package/lib/registry/DefaultPropertyRef.js +1 -1
  28. package/lib/registry/DefaultPropertyRef.js.map +1 -1
  29. package/lib/registry/MetadataRegistry.js +2 -1
  30. package/lib/registry/MetadataRegistry.js.map +1 -1
  31. package/package.json +1 -1
@@ -7,7 +7,11 @@ function Namespace(ns) {
7
7
  return function (object) {
8
8
  const options = {
9
9
  target: object,
10
- targetTypes: [Constants_1.METATYPE_ENTITY, Constants_1.METATYPE_CLASS_REF, Constants_1.METATYPE_EMBEDDABLE],
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,CAAC,2BAAe,EAAE,8BAAkB,EAAE,+BAAmB,CAAC;YACvE,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;AAXD,8BAWC","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: [METATYPE_ENTITY, METATYPE_CLASS_REF, METATYPE_EMBEDDABLE],\n attributes: {\n namespace: ns\n }\n };\n MetadataRegistry.$().add(METATYPE_NAMESPACE, options, false);\n };\n}\n\n"],"sourceRoot":".."}
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, resolve?: boolean): ClassRef;
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
- let name = ClassRef.getClassName(klass);
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
- let classRef = null;
135
- if (namespace === Constants_1.GLOBAL_NAMESPACE) {
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
- //fn = klass();
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, resolve = false) {
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) {
@@ -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":".."}
@@ -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';
@@ -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;AAU/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\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
+ {"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,2 +1,3 @@
1
1
  export declare const JSON_SCHEMA_SERIALIZER = "json-schema";
2
2
  export declare const DRAFT_07 = "draft-07";
3
+ export declare const C_ONLY_DECORATED = "onlyDecorated";
@@ -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":"../.."}
@@ -38,4 +38,8 @@ export interface IJsonSchemaUnserializeOptions extends IParseOptions, IUnseriali
38
38
  * Current working directory
39
39
  */
40
40
  cwd?: string;
41
+ /**
42
+ * Ignore namespaces marked by $namespace in json schema data
43
+ */
44
+ skipNamespace?: boolean;
41
45
  }
@@ -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
- onlyDecorated: false,
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, 'onlyDecorated', false)) {
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
- const result = this.describePropertyForRef(klass, prop);
216
- properties[prop.name] = result;
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, 'onlyDecorated', false)) {
229
+ if (!(0, lodash_1.get)(this.options, Constants_2.C_ONLY_DECORATED, false)) {
224
230
  const result = this.describePropertyForFunction(klass, p, instance);
225
- properties[p] = result;
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.name === Object.name) {
267
- typeHint = Constants_1.T_OBJECT;
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 if (typeHint.name === Array.name) {
270
- typeHint = Constants_1.T_ARRAY;
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":"../.."}