@allgemein/schema-api 1.5.21 → 1.5.24

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.
@@ -18,7 +18,7 @@ class JsonSchema7Serializer {
18
18
  (0, lodash_1.defaults)(this.options, {
19
19
  keysToSkip: Constants_1.DEFAULT_KEY_TO_SKIP,
20
20
  ignoreUnknownType: false,
21
- defaultTypeHint: 'string',
21
+ defaultTypeHint: Constants_1.T_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')) {
@@ -199,8 +199,14 @@ class JsonSchema7Serializer {
199
199
  }
200
200
  describePropertiesForFunction(klass) {
201
201
  const properties = {};
202
- const instance = Reflect.construct(klass, []);
203
- const _properties = Reflect.ownKeys(instance);
202
+ let _properties = [];
203
+ let instance = null;
204
+ try {
205
+ instance = Reflect.construct(klass, []);
206
+ _properties = Reflect.ownKeys(instance);
207
+ }
208
+ catch (e) {
209
+ }
204
210
  for (const p of _properties) {
205
211
  if ((0, lodash_1.isString)(p)) {
206
212
  if (!(0, lodash_1.get)(this.options, Constants_2.C_ONLY_DECORATED, false) && this.allowed(p, klass)) {
@@ -251,7 +257,7 @@ class JsonSchema7Serializer {
251
257
  const clazz = (0, IClassRef_1.isClassRef)(klass) ? klass.getClass() : klass;
252
258
  const propMeta = {};
253
259
  // check if property is object
254
- let value = instance[propertyName];
260
+ let value = instance ? instance[propertyName] : undefined;
255
261
  let typeHint = typeof value;
256
262
  const reflectMetadataType = (0, functions_1.getReflectedType)(clazz, propertyName);
257
263
  if (this.options.typeHint && (0, lodash_1.isFunction)(this.options.typeHint)) {
@@ -260,7 +266,6 @@ class JsonSchema7Serializer {
260
266
  else {
261
267
  if (typeHint === Constants_1.T_OBJECT) {
262
268
  if (reflectMetadataType && reflectMetadataType !== Constants_1.T_OBJECT) {
263
- //
264
269
  typeHint = reflectMetadataType;
265
270
  }
266
271
  else {
@@ -1 +1 @@
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":"../.."}
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: T_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 let _properties: (string | symbol)[] = [];\n let instance = null;\n try {\n instance = Reflect.construct(klass, []);\n _properties = Reflect.ownKeys(instance);\n } catch (e) {\n }\n\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 ? instance[propertyName] : undefined;\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 && 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":"../.."}
@@ -133,6 +133,9 @@ class JsonSchema7Unserializer {
133
133
  ret.push(yield this.parse(anyEntry, options));
134
134
  }
135
135
  }
136
+ else if (data.definitions && (0, lodash_1.keys)(data.definitions).length === 0) {
137
+ // doing nothing no entries found
138
+ }
136
139
  else {
137
140
  throw new Error('no valid schema element for further parse, key with name type or $ref must be present.');
138
141
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/json-schema/JsonSchema7Unserializer.ts"],"names":[],"mappings":"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","file":"JsonSchema7Unserializer.js","sourcesContent":["import {\n assign,\n camelCase,\n clone,\n defaults,\n get,\n has,\n isArray,\n isEmpty,\n isNull,\n isObjectLike,\n isString,\n isUndefined,\n keys,\n upperFirst\n} from 'lodash';\nimport {IJsonSchema7, IJsonSchema7Definition} from './JsonSchema7';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IJsonSchemaUnserializeOptions} from './IJsonSchemaUnserializeOptions';\nimport {DRAFT_07} from './Constants';\nimport {IJsonSchemaUnserializer} from './IJsonSchemaUnserializer';\nimport {JsonSchema} from './JsonSchema';\nimport {RegistryFactory} from '../registry/RegistryFactory';\nimport {\n DEFAULT_NAMESPACE,\n K_PATTERN_PROPERTY,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_ENTITY, METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n T_ARRAY,\n T_OBJECT,\n T_STRING\n} from '../Constants';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {ClassRef} from '../ClassRef';\nimport {NotSupportedError, NotYetImplementedError} from '@allgemein/base';\nimport {MetadataRegistry} from '../registry/MetadataRegistry';\nimport {IParseOptions, PARSE_OPTIONS_KEYS} from './IParseOptions';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {SchemaUtils} from '../SchemaUtils';\nimport {IPropertyRef} from '../../api/IPropertyRef';\n\nconst skipKeys = ['$id', 'id', 'title', 'type', 'properties', 'allOf', 'anyOf', '$schema', 'patternProperties'];\n\nexport class JsonSchema7Unserializer implements IJsonSchemaUnserializer {\n\n version: string = DRAFT_07;\n\n options: IJsonSchemaUnserializeOptions;\n\n data: IJsonSchema7;\n\n classRefs: IClassRef[] = [];\n\n fetched: { [k: string]: IJsonSchema7 } = {};\n\n reference: { [k: string]: any } = {};\n\n constructor(opts: IJsonSchemaUnserializeOptions) {\n this.options = opts;\n }\n\n uri(): string {\n return `http://json-schema.org/${DRAFT_07}/schema`;\n }\n\n\n async unserialize(data: any): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]> {\n this.data = data;\n const isRoot = get(this.options, 'rootAsEntity', true);\n const opts: any = {isRoot: isRoot};\n PARSE_OPTIONS_KEYS.forEach(x => {\n if (has(this.options, x)) {\n opts[x] = this.options[x];\n }\n });\n\n const ret = this.options.return ? this.options.return : 'default';\n return this.parse(data, opts).then(refs => {\n switch (ret) {\n case 'class-refs':\n return this.classRefs;\n case 'entity-refs':\n return this.classRefs.filter(x => x.hasEntityRef()).map(x => x.getEntityRef());\n default:\n return refs;\n }\n });\n }\n\n /**\n * Return namespace if set in passed options or if used in json-schema object.\n * If no match return default namespace\n */\n getNamespace() {\n return get(this.options, 'namespace', get(this.data, 'namespace', DEFAULT_NAMESPACE));\n }\n\n /**\n * Get registry containing elements\n */\n getRegistry(ns: string = null) {\n return RegistryFactory.get(ns ? ns : this.getNamespace());\n }\n\n\n /**\n * If collectors are defined use them before default\n *\n *\n * @param type\n * @param key\n * @param data\n * @param options\n * @private\n */\n private collectOptions(key: string, data: IJsonSchema7, options: IParseOptions = {}) {\n const type = get(options, 'metaType', METATYPE_ENTITY);\n let ret: any = null;\n if (!isUndefined(data[key]) || !isNull(data[key])) {\n ret = {};\n ret[key] = data[key];\n }\n\n if (has(this.options, 'collector') && this.options.collector.length > 0) {\n const methods = this.options.collector.filter(x => x.type === type && x.key === key);\n if (methods) {\n ret = assign(ret, ...methods.map(e => e.fn.apply(null, [key, data, options])));\n }\n }\n return ret;\n }\n\n\n getClassRef(className: string | Function, namespace?: string) {\n if (!namespace) {\n namespace = this.getNamespace();\n }\n return ClassRef.get(className, namespace);\n }\n\n\n async parse(data: IJsonSchema7, options: IParseOptions = null): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]> {\n let ret: IClassRef | IEntityRef | (IClassRef | IEntityRef)[] = null;\n if (data.type) {\n\n if (data.type === T_OBJECT) {\n ret = await this.parseTypeObject(data, options);\n if (options.$ref) {\n // finish reference if waiting\n this.reference[options.$ref] = ret;\n delete options.$ref;\n }\n\n if (this.hasProperties(data)) {\n await this.parseProperties(ret, data.properties, options);\n }\n if (this.hasPatternProperties(data)) {\n options.isPattern = true;\n await this.parseProperties(ret, data.patternProperties, options);\n }\n } else {\n throw new Error('type is not supported at this place');\n }\n\n } else if (data.$ref) {\n return this.parseRef(data, options);\n } else if (data.anyOf && options.isRoot) {\n // loading multi schema\n ret = [];\n for (const anyEntry of data.anyOf) {\n ret.push(await this.parse(anyEntry as any, options) as (IClassRef | IEntityRef));\n }\n } else {\n throw new Error('no valid schema element for further parse, key with name type or $ref must be present.');\n }\n return ret;\n }\n\n async parseRef(data: any, options: IParseOptions) {\n // refers\n let ret = null;\n if (has(this.reference, data.$ref)) {\n ret = this.reference[data.$ref];\n } else {\n const res = await this.followRef(data.$ref, this.data);\n const opts = clone(options);\n opts.$ref = data.$ref;\n if (!opts.className) {\n opts.className = this.getClassNameFromRef(data.$ref);\n }\n ret = await this.parse(res, opts);\n }\n return ret;\n }\n\n\n getDefinitionsKey(data: object) {\n for (const k of keys(data)) {\n if (k !== 'properties' && isObjectLike(data[k])) {\n const exists = keys(data[k]).find(x => has(data[k][x], 'type'));\n if (exists) {\n return k;\n }\n }\n }\n return 'definition';\n }\n\n\n async followRef($ref: string, data: IJsonSchema7): Promise<any> {\n let [addr, anchor] = $ref.split('#');\n\n if (!anchor) {\n anchor = '';\n }\n\n if (isEmpty(addr)) {\n // local\n if (isEmpty(anchor)) {\n if (data.$ref) {\n return this.followRef(data.$ref, data);\n } else {\n return data;\n }\n } else if (/^\\//.test(anchor)) {\n // starts with path\n const dottedPath = anchor.substr(1).replace(/\\//, '.');\n const entry = get(data, dottedPath, null);\n if (entry) {\n return entry;\n }\n } else {\n // refs to local id\n const refHashed = '#' + anchor;\n if (data.$id === refHashed) {\n return data;\n } else {\n const defKey = this.getDefinitionsKey(data);\n if (data[defKey]) {\n for (const k of keys(data[defKey])) {\n const x = data[defKey][k] as IJsonSchema7;\n if (x && x.$id && x.$id === refHashed) {\n return x;\n }\n }\n }\n }\n }\n } else {\n // remote fetch url\n if (!this.fetched[addr]) {\n this.fetched[addr] = await JsonSchema.request(addr, {cwd: this.options.cwd});\n }\n return this.followRef('#' + anchor, this.fetched[addr]);\n }\n // TODO create exception\n throw new Error($ref + ' not found');\n }\n\n\n async parseProperties(classRef: IClassRef | IEntityRef, properties: { [propertyName: string]: IJsonSchema7Definition }, options: IParseOptions = null) {\n const _classRef = isEntityRef(classRef) ? classRef.getClassRef() : classRef;\n const propertyNames = keys(properties);\n for (const propertyName of propertyNames) {\n await this.parseProperty(_classRef, propertyName, properties[propertyName], options);\n }\n }\n\n\n async parseProperty(classRef: IClassRef | IEntityRef, propertyName: string, data: IJsonSchema7Definition, options: IParseOptions = null) {\n const _classRef = isEntityRef(classRef) ? classRef.getClassRef() : classRef;\n\n const propRefExits = _classRef.getRegistry()\n .find(METATYPE_PROPERTY,\n (x: IPropertyRef) => x.getClassRef() === _classRef && x.name === propertyName) as IPropertyRef;\n\n const propOptions: IPropertyOptions = {\n metaType: METATYPE_PROPERTY,\n propertyName: propertyName,\n target: _classRef.getClass(true),\n // default type is object\n type: T_OBJECT,\n };\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n\n if (isObjectLike(data)) {\n const parseOptions: IParseOptions = {\n isProperty: true,\n sourceRef: _classRef,\n propertyName: propertyName,\n isRoot: false,\n metaType: 'property',\n // isPattern: options.isPattern ? true : false\n };\n const dataPointer = data as IJsonSchema7;\n let collectOptions = {};\n collectOptions = this.collectAndProcess(dataPointer, collectOptions, ['type', '$ref', '$schema', '$id'], parseOptions);\n assign(propOptions, collectOptions);\n if (dataPointer.$ref) {\n const ref = await this.parse(dataPointer, parseOptions);\n propOptions.type = ref;\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n } else if (dataPointer.type) {\n await this.onTypes(dataPointer, propOptions, parseOptions);\n }\n } else {\n // boolean\n throw new NotSupportedError('passed boolean value as definition not supported');\n }\n\n if (!propRefExits || get(this.options, 'forcePropertyRefCreation', false)) {\n // remove properties key if exists\n delete propOptions.properties;\n _classRef.getRegistry().create(METATYPE_PROPERTY, propOptions);\n } else if (propRefExits) {\n propRefExits.setOptions(propOptions);\n }\n\n }\n\n\n hasProperties(datapointer: any) {\n return has(datapointer, 'properties');\n }\n\n hasPatternProperties(datapointer: any) {\n return has(datapointer, 'patternProperties');\n }\n\n async onTypes(dataPointer: IJsonSchema7, propOptions: IPropertyOptions, options: IParseOptions) {\n let type = dataPointer.type as string;\n if (isString(type)) {\n type = type.toLowerCase();\n }\n switch (type) {\n case T_STRING:\n const res = this.onTypeString(dataPointer);\n assign(propOptions, res);\n break;\n case 'boolean':\n propOptions.type = 'boolean';\n break;\n case 'integer':\n propOptions.type = 'number';\n break;\n case 'number':\n propOptions.type = 'number';\n break;\n case T_OBJECT:\n propOptions.type = T_OBJECT;\n if (this.hasProperties(dataPointer) || this.hasPatternProperties(dataPointer)) {\n propOptions.type = await this.parse(dataPointer, options);\n }\n break;\n case T_ARRAY:\n // check items\n if (dataPointer.minItems || dataPointer.maxItems) {\n propOptions.cardinality = {\n min: get(dataPointer, 'minItems', 0),\n max: get(dataPointer, 'maxItems', 0),\n };\n } else {\n propOptions.cardinality = 0;\n }\n\n if (dataPointer.items) {\n\n if (isArray(dataPointer.items)) {\n throw new NotSupportedError('tuple values for array is not supported');\n } else if (isObjectLike(dataPointer.items)) {\n options.asArray = true;\n const items = dataPointer.items as IJsonSchema7;\n if (items.$ref) {\n propOptions.type = await this.parse(items as IJsonSchema7, options);\n } else if (items.type === T_OBJECT) {\n propOptions.type = items.type;\n if (this.hasProperties(items) || this.hasPatternProperties(items)) {\n propOptions.type = await this.parse(items as IJsonSchema7, options);\n }\n } else {\n propOptions.type = items.type;\n }\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n }\n }\n break;\n case 'null':\n throw new NotSupportedError('null value is not supported for property');\n }\n }\n\n\n onTypeString(dataPointer: any) {\n const propOptions: any = {};\n propOptions.type = T_STRING;\n // or date check format\n if (dataPointer.format) {\n propOptions.format = dataPointer.format;\n switch (dataPointer.format) {\n case 'date-time':\n // set date type\n propOptions.type = 'date';\n break;\n case 'date':\n // set date type\n propOptions.type = 'date';\n break;\n }\n }\n return propOptions;\n }\n\n\n async parseInherits(classRef: IClassRef, data: IJsonSchema7, key: 'allOf' | 'anyOf') {\n if (has(data, key)) {\n const values = data[key];\n if (isArray(values)) {\n for (const inheritEntry of values) {\n const extend = await this.parse(inheritEntry as IJsonSchema7, {isRoot: false}) as IClassRef;\n classRef.addExtend(extend);\n }\n } else {\n throw new NotSupportedError('only array is allowed for ' + key);\n }\n }\n }\n\n\n async parseTypeObject(data: IJsonSchema7, options: IParseOptions = null) {\n let ret: IClassRef | IEntityRef = null;\n\n const id = get(data, '$id', get(data, 'id', null));\n let metaType: METADATA_TYPE = options.isRoot || !isEmpty(id) ? METATYPE_ENTITY : METATYPE_CLASS_REF;\n\n const title = get(data, 'title', null);\n\n // get namespace or override\n const namespace = !get(this.options, 'skipNamespace', false) ?\n get(data, '$' + METATYPE_NAMESPACE, this.getNamespace()) : this.getNamespace();\n\n // check if class ref exists else create one or recreate if parse options are set\n let classRef: IClassRef = null;\n let className = null;\n if (options) {\n if (options.className) {\n className = options.className;\n }\n if (options.ref) {\n classRef = options.ref;\n className = options.ref.name;\n }\n }\n\n // title data override passed className\n if (title) {\n if (!className || !get(this.options, 'ignoreDeclared', false)) {\n className = upperFirst(camelCase(title));\n }\n }\n\n let entityName = metaType === METATYPE_ENTITY && id ? id.replace(/^#/, '') : className;\n if (!className && options?.isProperty && options.propertyName) {\n if (get(this.options, 'prependClass', false)) {\n className = [options.sourceRef.name, options.propertyName].map(x => upperFirst(camelCase(x))).join('');\n } else {\n className = upperFirst(camelCase(options.propertyName));\n }\n // pass property name as entity name if the object is declared as a property\n entityName = className;\n }\n\n if (className && !classRef) {\n const fn = get(this.options, 'forceClassRefCreation', false) ? SchemaUtils.clazz(className) : className;\n classRef = this.getClassRef(fn, namespace);\n }\n\n if (!classRef) {\n metaType = METATYPE_CLASS_REF;\n classRef = this.getClassRef(SchemaUtils.clazzAnonymous(), namespace);\n }\n\n // TODO check extentions!\n for (const inheritsKey of ['allOf', 'anyOf']) {\n if (has(data, inheritsKey)) {\n await this.parseInherits(classRef, data, inheritsKey as any);\n }\n }\n\n if (classRef) {\n // a named class ref exists\n if (!this.classRefs.find(x => x === classRef)) {\n this.classRefs.push(classRef);\n }\n\n const clazz = classRef.getClass(true);\n const refOptions: IEntityOptions = {\n name: entityName,\n namespace: this.getNamespace(),\n target: clazz\n };\n\n const collectorOptions = clone(options);\n collectorOptions.metaType = metaType;\n collectorOptions.ref = classRef;\n this.collectAndProcess(data, refOptions, skipKeys, collectorOptions);\n\n metaType = collectorOptions.metaType;\n\n let entityOptions = MetadataRegistry.$().find(metaType, (x: IAbstractOptions) => x.target === clazz);\n if (entityOptions) {\n // merge existing\n assign(entityOptions, refOptions);\n } else {\n entityOptions = refOptions;\n refOptions.metaType = METATYPE_CLASS_REF;\n const existingOptions = classRef.getOptions();\n\n classRef.setOptions(defaults(refOptions, existingOptions));\n }\n\n if (metaType === METATYPE_ENTITY) {\n ret = this.getRegistry(namespace).find(metaType, (x: IEntityRef) => x.getClassRef() === classRef);\n if (!ret || get(this.options, 'forceEntityRefCreation', false)) {\n ret = this.getRegistry(namespace).create(metaType, entityOptions);\n }\n } else {\n ret = classRef;\n }\n\n } else {\n throw new NotYetImplementedError();\n }\n return ret;\n }\n\n\n collectAndProcess(data: IJsonSchema7,\n collectingObject: any,\n skipKeys: string[],\n collectorOptions: IParseOptions) {\n const type = get(collectorOptions, 'metaType', METATYPE_ENTITY);\n const _keys = keys(data);\n for (const key of _keys) {\n const entry = this.collectOptions(key, data, collectorOptions);\n if (skipKeys.includes(key)) {\n continue;\n }\n if (entry && isObjectLike(entry)) {\n collectingObject = assign(collectingObject, entry);\n }\n }\n if (has(this.options, 'collector') && this.options.collector.length > 0) {\n const methods = this.options.collector.filter(x => x.type === type && isUndefined(x.key));\n if (methods.length > 0) {\n collectingObject = assign(collectingObject, ...methods.map(e => e.fn.apply(null, [null, data, collectorOptions])));\n }\n }\n return collectingObject;\n }\n\n getClassNameFromRef(data: string) {\n return data.split(/#|\\//).pop();\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../../src/lib/json-schema/JsonSchema7Unserializer.ts"],"names":[],"mappings":"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","file":"JsonSchema7Unserializer.js","sourcesContent":["import {\n assign,\n camelCase,\n clone,\n defaults,\n get,\n has,\n isArray,\n isEmpty,\n isNull,\n isObjectLike,\n isString,\n isUndefined,\n keys,\n upperFirst\n} from 'lodash';\nimport {IJsonSchema7, IJsonSchema7Definition} from './JsonSchema7';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IJsonSchemaUnserializeOptions} from './IJsonSchemaUnserializeOptions';\nimport {DRAFT_07} from './Constants';\nimport {IJsonSchemaUnserializer} from './IJsonSchemaUnserializer';\nimport {JsonSchema} from './JsonSchema';\nimport {RegistryFactory} from '../registry/RegistryFactory';\nimport {\n DEFAULT_NAMESPACE,\n K_PATTERN_PROPERTY,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_ENTITY, METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n T_ARRAY,\n T_OBJECT,\n T_STRING\n} from '../Constants';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {ClassRef} from '../ClassRef';\nimport {NotSupportedError, NotYetImplementedError} from '@allgemein/base';\nimport {MetadataRegistry} from '../registry/MetadataRegistry';\nimport {IParseOptions, PARSE_OPTIONS_KEYS} from './IParseOptions';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {SchemaUtils} from '../SchemaUtils';\nimport {IPropertyRef} from '../../api/IPropertyRef';\n\nconst skipKeys = ['$id', 'id', 'title', 'type', 'properties', 'allOf', 'anyOf', '$schema', 'patternProperties'];\n\nexport class JsonSchema7Unserializer implements IJsonSchemaUnserializer {\n\n version: string = DRAFT_07;\n\n options: IJsonSchemaUnserializeOptions;\n\n data: IJsonSchema7;\n\n classRefs: IClassRef[] = [];\n\n fetched: { [k: string]: IJsonSchema7 } = {};\n\n reference: { [k: string]: any } = {};\n\n constructor(opts: IJsonSchemaUnserializeOptions) {\n this.options = opts;\n }\n\n uri(): string {\n return `http://json-schema.org/${DRAFT_07}/schema`;\n }\n\n\n async unserialize(data: any): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]> {\n this.data = data;\n const isRoot = get(this.options, 'rootAsEntity', true);\n const opts: any = {isRoot: isRoot};\n PARSE_OPTIONS_KEYS.forEach(x => {\n if (has(this.options, x)) {\n opts[x] = this.options[x];\n }\n });\n\n const ret = this.options.return ? this.options.return : 'default';\n return this.parse(data, opts).then(refs => {\n switch (ret) {\n case 'class-refs':\n return this.classRefs;\n case 'entity-refs':\n return this.classRefs.filter(x => x.hasEntityRef()).map(x => x.getEntityRef());\n default:\n return refs;\n }\n });\n }\n\n /**\n * Return namespace if set in passed options or if used in json-schema object.\n * If no match return default namespace\n */\n getNamespace() {\n return get(this.options, 'namespace', get(this.data, 'namespace', DEFAULT_NAMESPACE));\n }\n\n /**\n * Get registry containing elements\n */\n getRegistry(ns: string = null) {\n return RegistryFactory.get(ns ? ns : this.getNamespace());\n }\n\n\n /**\n * If collectors are defined use them before default\n *\n *\n * @param type\n * @param key\n * @param data\n * @param options\n * @private\n */\n private collectOptions(key: string, data: IJsonSchema7, options: IParseOptions = {}) {\n const type = get(options, 'metaType', METATYPE_ENTITY);\n let ret: any = null;\n if (!isUndefined(data[key]) || !isNull(data[key])) {\n ret = {};\n ret[key] = data[key];\n }\n\n if (has(this.options, 'collector') && this.options.collector.length > 0) {\n const methods = this.options.collector.filter(x => x.type === type && x.key === key);\n if (methods) {\n ret = assign(ret, ...methods.map(e => e.fn.apply(null, [key, data, options])));\n }\n }\n return ret;\n }\n\n\n getClassRef(className: string | Function, namespace?: string) {\n if (!namespace) {\n namespace = this.getNamespace();\n }\n return ClassRef.get(className, namespace);\n }\n\n\n async parse(data: IJsonSchema7, options: IParseOptions = null): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]> {\n let ret: IClassRef | IEntityRef | (IClassRef | IEntityRef)[] = null;\n if (data.type) {\n\n if (data.type === T_OBJECT) {\n ret = await this.parseTypeObject(data, options);\n if (options.$ref) {\n // finish reference if waiting\n this.reference[options.$ref] = ret;\n delete options.$ref;\n }\n\n if (this.hasProperties(data)) {\n await this.parseProperties(ret, data.properties, options);\n }\n if (this.hasPatternProperties(data)) {\n options.isPattern = true;\n await this.parseProperties(ret, data.patternProperties, options);\n }\n } else {\n throw new Error('type is not supported at this place');\n }\n\n } else if (data.$ref) {\n return this.parseRef(data, options);\n } else if (data.anyOf && options.isRoot) {\n // loading multi schema\n ret = [];\n for (const anyEntry of data.anyOf) {\n ret.push(await this.parse(anyEntry as any, options) as (IClassRef | IEntityRef));\n }\n } else if (data.definitions && keys(data.definitions).length === 0) {\n // doing nothing no entries found\n } else {\n throw new Error('no valid schema element for further parse, key with name type or $ref must be present.');\n }\n return ret;\n }\n\n async parseRef(data: any, options: IParseOptions) {\n // refers\n let ret = null;\n if (has(this.reference, data.$ref)) {\n ret = this.reference[data.$ref];\n } else {\n const res = await this.followRef(data.$ref, this.data);\n const opts = clone(options);\n opts.$ref = data.$ref;\n if (!opts.className) {\n opts.className = this.getClassNameFromRef(data.$ref);\n }\n ret = await this.parse(res, opts);\n }\n return ret;\n }\n\n\n getDefinitionsKey(data: object) {\n for (const k of keys(data)) {\n if (k !== 'properties' && isObjectLike(data[k])) {\n const exists = keys(data[k]).find(x => has(data[k][x], 'type'));\n if (exists) {\n return k;\n }\n }\n }\n return 'definition';\n }\n\n\n async followRef($ref: string, data: IJsonSchema7): Promise<any> {\n let [addr, anchor] = $ref.split('#');\n\n if (!anchor) {\n anchor = '';\n }\n\n if (isEmpty(addr)) {\n // local\n if (isEmpty(anchor)) {\n if (data.$ref) {\n return this.followRef(data.$ref, data);\n } else {\n return data;\n }\n } else if (/^\\//.test(anchor)) {\n // starts with path\n const dottedPath = anchor.substr(1).replace(/\\//, '.');\n const entry = get(data, dottedPath, null);\n if (entry) {\n return entry;\n }\n } else {\n // refs to local id\n const refHashed = '#' + anchor;\n if (data.$id === refHashed) {\n return data;\n } else {\n const defKey = this.getDefinitionsKey(data);\n if (data[defKey]) {\n for (const k of keys(data[defKey])) {\n const x = data[defKey][k] as IJsonSchema7;\n if (x && x.$id && x.$id === refHashed) {\n return x;\n }\n }\n }\n }\n }\n } else {\n // remote fetch url\n if (!this.fetched[addr]) {\n this.fetched[addr] = await JsonSchema.request(addr, {cwd: this.options.cwd});\n }\n return this.followRef('#' + anchor, this.fetched[addr]);\n }\n // TODO create exception\n throw new Error($ref + ' not found');\n }\n\n\n async parseProperties(classRef: IClassRef | IEntityRef, properties: { [propertyName: string]: IJsonSchema7Definition }, options: IParseOptions = null) {\n const _classRef = isEntityRef(classRef) ? classRef.getClassRef() : classRef;\n const propertyNames = keys(properties);\n for (const propertyName of propertyNames) {\n await this.parseProperty(_classRef, propertyName, properties[propertyName], options);\n }\n }\n\n\n async parseProperty(classRef: IClassRef | IEntityRef, propertyName: string, data: IJsonSchema7Definition, options: IParseOptions = null) {\n const _classRef = isEntityRef(classRef) ? classRef.getClassRef() : classRef;\n\n const propRefExits = _classRef.getRegistry()\n .find(METATYPE_PROPERTY,\n (x: IPropertyRef) => x.getClassRef() === _classRef && x.name === propertyName) as IPropertyRef;\n\n const propOptions: IPropertyOptions = {\n metaType: METATYPE_PROPERTY,\n propertyName: propertyName,\n target: _classRef.getClass(true),\n // default type is object\n type: T_OBJECT,\n };\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n\n if (isObjectLike(data)) {\n const parseOptions: IParseOptions = {\n isProperty: true,\n sourceRef: _classRef,\n propertyName: propertyName,\n isRoot: false,\n metaType: 'property',\n // isPattern: options.isPattern ? true : false\n };\n const dataPointer = data as IJsonSchema7;\n let collectOptions = {};\n collectOptions = this.collectAndProcess(dataPointer, collectOptions, ['type', '$ref', '$schema', '$id'], parseOptions);\n assign(propOptions, collectOptions);\n if (dataPointer.$ref) {\n const ref = await this.parse(dataPointer, parseOptions);\n propOptions.type = ref;\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n } else if (dataPointer.type) {\n await this.onTypes(dataPointer, propOptions, parseOptions);\n }\n } else {\n // boolean\n throw new NotSupportedError('passed boolean value as definition not supported');\n }\n\n if (!propRefExits || get(this.options, 'forcePropertyRefCreation', false)) {\n // remove properties key if exists\n delete propOptions.properties;\n _classRef.getRegistry().create(METATYPE_PROPERTY, propOptions);\n } else if (propRefExits) {\n propRefExits.setOptions(propOptions);\n }\n\n }\n\n\n hasProperties(datapointer: any) {\n return has(datapointer, 'properties');\n }\n\n hasPatternProperties(datapointer: any) {\n return has(datapointer, 'patternProperties');\n }\n\n async onTypes(dataPointer: IJsonSchema7, propOptions: IPropertyOptions, options: IParseOptions) {\n let type = dataPointer.type as string;\n if (isString(type)) {\n type = type.toLowerCase();\n }\n switch (type) {\n case T_STRING:\n const res = this.onTypeString(dataPointer);\n assign(propOptions, res);\n break;\n case 'boolean':\n propOptions.type = 'boolean';\n break;\n case 'integer':\n propOptions.type = 'number';\n break;\n case 'number':\n propOptions.type = 'number';\n break;\n case T_OBJECT:\n propOptions.type = T_OBJECT;\n if (this.hasProperties(dataPointer) || this.hasPatternProperties(dataPointer)) {\n propOptions.type = await this.parse(dataPointer, options);\n }\n break;\n case T_ARRAY:\n // check items\n if (dataPointer.minItems || dataPointer.maxItems) {\n propOptions.cardinality = {\n min: get(dataPointer, 'minItems', 0),\n max: get(dataPointer, 'maxItems', 0),\n };\n } else {\n propOptions.cardinality = 0;\n }\n\n if (dataPointer.items) {\n\n if (isArray(dataPointer.items)) {\n throw new NotSupportedError('tuple values for array is not supported');\n } else if (isObjectLike(dataPointer.items)) {\n options.asArray = true;\n const items = dataPointer.items as IJsonSchema7;\n if (items.$ref) {\n propOptions.type = await this.parse(items as IJsonSchema7, options);\n } else if (items.type === T_OBJECT) {\n propOptions.type = items.type;\n if (this.hasProperties(items) || this.hasPatternProperties(items)) {\n propOptions.type = await this.parse(items as IJsonSchema7, options);\n }\n } else {\n propOptions.type = items.type;\n }\n if (options.isPattern) {\n propOptions[K_PATTERN_PROPERTY] = true;\n }\n }\n }\n break;\n case 'null':\n throw new NotSupportedError('null value is not supported for property');\n }\n }\n\n\n onTypeString(dataPointer: any) {\n const propOptions: any = {};\n propOptions.type = T_STRING;\n // or date check format\n if (dataPointer.format) {\n propOptions.format = dataPointer.format;\n switch (dataPointer.format) {\n case 'date-time':\n // set date type\n propOptions.type = 'date';\n break;\n case 'date':\n // set date type\n propOptions.type = 'date';\n break;\n }\n }\n return propOptions;\n }\n\n\n async parseInherits(classRef: IClassRef, data: IJsonSchema7, key: 'allOf' | 'anyOf') {\n if (has(data, key)) {\n const values = data[key];\n if (isArray(values)) {\n for (const inheritEntry of values) {\n const extend = await this.parse(inheritEntry as IJsonSchema7, {isRoot: false}) as IClassRef;\n classRef.addExtend(extend);\n }\n } else {\n throw new NotSupportedError('only array is allowed for ' + key);\n }\n }\n }\n\n\n async parseTypeObject(data: IJsonSchema7, options: IParseOptions = null) {\n let ret: IClassRef | IEntityRef = null;\n\n const id = get(data, '$id', get(data, 'id', null));\n let metaType: METADATA_TYPE = options.isRoot || !isEmpty(id) ? METATYPE_ENTITY : METATYPE_CLASS_REF;\n\n const title = get(data, 'title', null);\n\n // get namespace or override\n const namespace = !get(this.options, 'skipNamespace', false) ?\n get(data, '$' + METATYPE_NAMESPACE, this.getNamespace()) : this.getNamespace();\n\n // check if class ref exists else create one or recreate if parse options are set\n let classRef: IClassRef = null;\n let className = null;\n if (options) {\n if (options.className) {\n className = options.className;\n }\n if (options.ref) {\n classRef = options.ref;\n className = options.ref.name;\n }\n }\n\n // title data override passed className\n if (title) {\n if (!className || !get(this.options, 'ignoreDeclared', false)) {\n className = upperFirst(camelCase(title));\n }\n }\n\n let entityName = metaType === METATYPE_ENTITY && id ? id.replace(/^#/, '') : className;\n if (!className && options?.isProperty && options.propertyName) {\n if (get(this.options, 'prependClass', false)) {\n className = [options.sourceRef.name, options.propertyName].map(x => upperFirst(camelCase(x))).join('');\n } else {\n className = upperFirst(camelCase(options.propertyName));\n }\n // pass property name as entity name if the object is declared as a property\n entityName = className;\n }\n\n if (className && !classRef) {\n const fn = get(this.options, 'forceClassRefCreation', false) ? SchemaUtils.clazz(className) : className;\n classRef = this.getClassRef(fn, namespace);\n }\n\n if (!classRef) {\n metaType = METATYPE_CLASS_REF;\n classRef = this.getClassRef(SchemaUtils.clazzAnonymous(), namespace);\n }\n\n // TODO check extentions!\n for (const inheritsKey of ['allOf', 'anyOf']) {\n if (has(data, inheritsKey)) {\n await this.parseInherits(classRef, data, inheritsKey as any);\n }\n }\n\n if (classRef) {\n // a named class ref exists\n if (!this.classRefs.find(x => x === classRef)) {\n this.classRefs.push(classRef);\n }\n\n const clazz = classRef.getClass(true);\n const refOptions: IEntityOptions = {\n name: entityName,\n namespace: this.getNamespace(),\n target: clazz\n };\n\n const collectorOptions = clone(options);\n collectorOptions.metaType = metaType;\n collectorOptions.ref = classRef;\n this.collectAndProcess(data, refOptions, skipKeys, collectorOptions);\n\n metaType = collectorOptions.metaType;\n\n let entityOptions = MetadataRegistry.$().find(metaType, (x: IAbstractOptions) => x.target === clazz);\n if (entityOptions) {\n // merge existing\n assign(entityOptions, refOptions);\n } else {\n entityOptions = refOptions;\n refOptions.metaType = METATYPE_CLASS_REF;\n const existingOptions = classRef.getOptions();\n\n classRef.setOptions(defaults(refOptions, existingOptions));\n }\n\n if (metaType === METATYPE_ENTITY) {\n ret = this.getRegistry(namespace).find(metaType, (x: IEntityRef) => x.getClassRef() === classRef);\n if (!ret || get(this.options, 'forceEntityRefCreation', false)) {\n ret = this.getRegistry(namespace).create(metaType, entityOptions);\n }\n } else {\n ret = classRef;\n }\n\n } else {\n throw new NotYetImplementedError();\n }\n return ret;\n }\n\n\n collectAndProcess(data: IJsonSchema7,\n collectingObject: any,\n skipKeys: string[],\n collectorOptions: IParseOptions) {\n const type = get(collectorOptions, 'metaType', METATYPE_ENTITY);\n const _keys = keys(data);\n for (const key of _keys) {\n const entry = this.collectOptions(key, data, collectorOptions);\n if (skipKeys.includes(key)) {\n continue;\n }\n if (entry && isObjectLike(entry)) {\n collectingObject = assign(collectingObject, entry);\n }\n }\n if (has(this.options, 'collector') && this.options.collector.length > 0) {\n const methods = this.options.collector.filter(x => x.type === type && isUndefined(x.key));\n if (methods.length > 0) {\n collectingObject = assign(collectingObject, ...methods.map(e => e.fn.apply(null, [null, data, collectorOptions])));\n }\n }\n return collectingObject;\n }\n\n getClassNameFromRef(data: string) {\n return data.split(/#|\\//).pop();\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -12,9 +12,10 @@ import { IRegistryOptions } from './IRegistryOptions';
12
12
  */
13
13
  export declare abstract class AbstractRegistry implements ILookupRegistry {
14
14
  protected readonly namespace: string;
15
- readonly lock: Semaphore;
15
+ private _lock;
16
16
  readonly options: IRegistryOptions;
17
17
  constructor(namespace: string, options?: IRegistryOptions);
18
+ get lock(): Semaphore;
18
19
  ready(timeout?: number): Promise<boolean>;
19
20
  getOptions(): IRegistryOptions;
20
21
  /**
@@ -91,5 +92,8 @@ export declare abstract class AbstractRegistry implements ILookupRegistry {
91
92
  * reset current registry
92
93
  */
93
94
  reset(): void;
95
+ /**
96
+ * Remove namespace from LookupRegistry and also remove semaphore lock if exists
97
+ */
94
98
  clear(): void;
95
99
  }
@@ -12,7 +12,12 @@ class AbstractRegistry {
12
12
  constructor(namespace, options) {
13
13
  this.namespace = namespace;
14
14
  this.options = options || {};
15
- this.lock = base_1.LockFactory.$().semaphore(1);
15
+ }
16
+ get lock() {
17
+ if (!this._lock) {
18
+ this._lock = base_1.LockFactory.$().semaphore(1);
19
+ }
20
+ return this._lock;
16
21
  }
17
22
  ready(timeout) {
18
23
  return this.lock.await(timeout).then(x => true).catch(x => false);
@@ -124,7 +129,13 @@ class AbstractRegistry {
124
129
  reset() {
125
130
  this.clear();
126
131
  }
132
+ /**
133
+ * Remove namespace from LookupRegistry and also remove semaphore lock if exists
134
+ */
127
135
  clear() {
136
+ if (this._lock) {
137
+ base_1.LockFactory.$().remove(this._lock);
138
+ }
128
139
  LookupRegistry_1.LookupRegistry.reset(this.namespace);
129
140
  }
130
141
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/registry/AbstractRegistry.ts"],"names":[],"mappings":"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","file":"AbstractRegistry.js","sourcesContent":["import {snakeCase} from 'lodash';\nimport {EventEmitter} from 'events';\nimport {METADATA_TYPE, METATYPE_ENTITY, METATYPE_PROPERTY} from './../Constants';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {IEntityRef} from '../../api/IEntityRef';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {LookupRegistry} from '../LookupRegistry';\nimport {LockFactory, NotSupportedError, Semaphore} from '@allgemein/base';\nimport {ISchemaRef} from '../../api/ISchemaRef';\nimport {IRegistryOptions} from './IRegistryOptions';\n\n\n/**\n * Registry for metadata of classes and there properties\n */\nexport abstract class AbstractRegistry implements ILookupRegistry {\n\n protected readonly namespace: string;\n\n readonly lock: Semaphore;\n\n readonly options: IRegistryOptions;\n\n\n constructor(namespace: string, options?: IRegistryOptions) {\n this.namespace = namespace;\n this.options = options || {};\n this.lock = LockFactory.$().semaphore(1);\n }\n\n\n\n ready(timeout?: number): Promise<boolean> {\n return this.lock.await(timeout).then(x => true).catch(x => false);\n }\n\n\n getOptions(): IRegistryOptions {\n return this.options;\n }\n\n\n /**\n * Return all registered schema references\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefs<T extends ISchemaRef>(filter?: (x: ISchemaRef) => boolean): (T | ISchemaRef)[] {\n throw new NotSupportedError('');\n }\n\n /**\n * Return schema references for an given entity or class reference\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefsFor<T extends ISchemaRef>(ref: string): T | ISchemaRef;\n getSchemaRefsFor<T extends ISchemaRef>(ref: string | IEntityRef | IClassRef): T | ISchemaRef | (T | ISchemaRef)[] {\n throw new NotSupportedError('');\n }\n\n /**\n * TODO\n *\n * @param filter\n */\n getEntityRefs<T extends IEntityRef>(filter?: (x: IEntityRef) => boolean): (T | IEntityRef)[] {\n return this.filter(METATYPE_ENTITY, filter);\n }\n\n /**\n * Can get get entity ref for function.\n *\n * @param fn\n */\n getEntityRefFor<T extends IEntityRef>(fn: string | object | Function, skipNsCheck: boolean = true): (T | IEntityRef) {\n throw new NotSupportedError('');\n }\n\n\n /**\n * Returns the used instance of lookup registry handler\n */\n getLookupRegistry(namespace: string = null): LookupRegistry {\n return LookupRegistry.$(namespace ? namespace : this.namespace);\n }\n\n /**\n * Method for returning class ref\n *\n * @param object\n * @param type\n */\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n throw new NotSupportedError('');\n }\n\n /**\n * Returns property by name for a given class or entity ref\n *\n * @param filter\n */\n getPropertyRef<T extends IPropertyRef>(ref: IClassRef | IEntityRef, name: string): (T | IPropertyRef) {\n return this.getPropertyRefs<T>(ref).find(x => snakeCase(x.name) === snakeCase(name));\n }\n\n\n /**\n * Returns all properties for given class or entity ref\n *\n * @param ref\n */\n getPropertyRefs<T extends IPropertyRef>(ref: IClassRef | IEntityRef): (T | IPropertyRef)[] {\n throw new NotSupportedError('');\n }\n\n\n getPropertyRefsFor<T extends IPropertyRef>(fn: string | object | Function): (T | IPropertyRef)[] {\n throw new NotSupportedError('');\n }\n\n\n list<X>(type: METADATA_TYPE, filter?: (x: any) => boolean): X[] {\n return this.filter(type, filter);\n }\n\n\n listEntities(filter?: (x: IEntityRef) => boolean): IEntityRef[] {\n return this.getEntityRefs(filter);\n }\n\n\n listProperties(filter?: (x: IPropertyRef) => boolean): IPropertyRef[] {\n return this.filter(METATYPE_PROPERTY, filter);\n }\n\n\n create<T>(context: string, options: any): T {\n throw new NotSupportedError('');\n }\n\n /**\n * TODO\n */\n add<T>(context: string, entry: T, ns?: string): T {\n return this.getLookupRegistry(ns).add(context, entry);\n }\n\n\n /**\n * TODO\n */\n filter<T>(context: string, search: any, ns?: string): T[] {\n return this.getLookupRegistry(ns).filter(context, search);\n }\n\n /**\n * TODO\n */\n find<T>(context: string, search: any, ns?: string): T {\n return this.getLookupRegistry(ns).find(context, search);\n }\n\n /**\n * TODO\n */\n remove<T>(context: string, search: any, ns?: string): T[] {\n return this.getLookupRegistry(ns).remove(context, search);\n }\n\n /**\n * reset current registry\n */\n reset() {\n this.clear();\n }\n\n clear() {\n LookupRegistry.reset(this.namespace);\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../../src/lib/registry/AbstractRegistry.ts"],"names":[],"mappings":"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","file":"AbstractRegistry.js","sourcesContent":["import {snakeCase} from 'lodash';\nimport {METADATA_TYPE, METATYPE_ENTITY, METATYPE_PROPERTY} from './../Constants';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {IEntityRef} from '../../api/IEntityRef';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {LookupRegistry} from '../LookupRegistry';\nimport {LockFactory, NotSupportedError, Semaphore} from '@allgemein/base';\nimport {ISchemaRef} from '../../api/ISchemaRef';\nimport {IRegistryOptions} from './IRegistryOptions';\n\n\n/**\n * Registry for metadata of classes and there properties\n */\nexport abstract class AbstractRegistry implements ILookupRegistry {\n\n protected readonly namespace: string;\n\n private _lock: Semaphore;\n\n readonly options: IRegistryOptions;\n\n\n constructor(namespace: string, options?: IRegistryOptions) {\n this.namespace = namespace;\n this.options = options || {};\n }\n\n\n get lock() {\n if (!this._lock) {\n this._lock = LockFactory.$().semaphore(1);\n }\n return this._lock;\n }\n\n\n ready(timeout?: number): Promise<boolean> {\n return this.lock.await(timeout).then(x => true).catch(x => false);\n }\n\n\n getOptions(): IRegistryOptions {\n return this.options;\n }\n\n\n /**\n * Return all registered schema references\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefs<T extends ISchemaRef>(filter?: (x: ISchemaRef) => boolean): (T | ISchemaRef)[] {\n throw new NotSupportedError('');\n }\n\n /**\n * Return schema references for an given entity or class reference\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefsFor<T extends ISchemaRef>(ref: string): T | ISchemaRef;\n getSchemaRefsFor<T extends ISchemaRef>(ref: string | IEntityRef | IClassRef): T | ISchemaRef | (T | ISchemaRef)[] {\n throw new NotSupportedError('');\n }\n\n /**\n * TODO\n *\n * @param filter\n */\n getEntityRefs<T extends IEntityRef>(filter?: (x: IEntityRef) => boolean): (T | IEntityRef)[] {\n return this.filter(METATYPE_ENTITY, filter);\n }\n\n /**\n * Can get get entity ref for function.\n *\n * @param fn\n */\n getEntityRefFor<T extends IEntityRef>(fn: string | object | Function, skipNsCheck: boolean = true): (T | IEntityRef) {\n throw new NotSupportedError('');\n }\n\n\n /**\n * Returns the used instance of lookup registry handler\n */\n getLookupRegistry(namespace: string = null): LookupRegistry {\n return LookupRegistry.$(namespace ? namespace : this.namespace);\n }\n\n /**\n * Method for returning class ref\n *\n * @param object\n * @param type\n */\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n throw new NotSupportedError('');\n }\n\n /**\n * Returns property by name for a given class or entity ref\n *\n * @param filter\n */\n getPropertyRef<T extends IPropertyRef>(ref: IClassRef | IEntityRef, name: string): (T | IPropertyRef) {\n return this.getPropertyRefs<T>(ref).find(x => snakeCase(x.name) === snakeCase(name));\n }\n\n\n /**\n * Returns all properties for given class or entity ref\n *\n * @param ref\n */\n getPropertyRefs<T extends IPropertyRef>(ref: IClassRef | IEntityRef): (T | IPropertyRef)[] {\n throw new NotSupportedError('');\n }\n\n\n getPropertyRefsFor<T extends IPropertyRef>(fn: string | object | Function): (T | IPropertyRef)[] {\n throw new NotSupportedError('');\n }\n\n\n list<X>(type: METADATA_TYPE, filter?: (x: any) => boolean): X[] {\n return this.filter(type, filter);\n }\n\n\n listEntities(filter?: (x: IEntityRef) => boolean): IEntityRef[] {\n return this.getEntityRefs(filter);\n }\n\n\n listProperties(filter?: (x: IPropertyRef) => boolean): IPropertyRef[] {\n return this.filter(METATYPE_PROPERTY, filter);\n }\n\n\n create<T>(context: string, options: any): T {\n throw new NotSupportedError('');\n }\n\n /**\n * TODO\n */\n add<T>(context: string, entry: T, ns?: string): T {\n return this.getLookupRegistry(ns).add(context, entry);\n }\n\n\n /**\n * TODO\n */\n filter<T>(context: string, search: any, ns?: string): T[] {\n return this.getLookupRegistry(ns).filter(context, search);\n }\n\n /**\n * TODO\n */\n find<T>(context: string, search: any, ns?: string): T {\n return this.getLookupRegistry(ns).find(context, search);\n }\n\n /**\n * TODO\n */\n remove<T>(context: string, search: any, ns?: string): T[] {\n return this.getLookupRegistry(ns).remove(context, search);\n }\n\n /**\n * reset current registry\n */\n reset() {\n this.clear();\n }\n\n /**\n * Remove namespace from LookupRegistry and also remove semaphore lock if exists\n */\n clear() {\n if (this._lock) {\n LockFactory.$().remove(this._lock);\n }\n LookupRegistry.reset(this.namespace);\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -62,7 +62,7 @@ class DefaultNamespacedRegistry extends AbstractRegistry_1.AbstractRegistry {
62
62
  }
63
63
  else {
64
64
  return new Promise((resolve, reject) => {
65
- const t = setTimeout(args => {
65
+ const t = setTimeout(() => {
66
66
  reject();
67
67
  }, timeout ? timeout : 10000);
68
68
  MetadataRegistry_1.MetadataRegistry.$().once(Constants_1.C_EVENT_DRAIN_FINISHED + this.namespace, () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/registry/DefaultNamespacedRegistry.ts"],"names":[],"mappings":"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","file":"DefaultNamespacedRegistry.js","sourcesContent":["/**\n * Handler for metadata\n */\nimport {\n assign,\n clone,\n cloneDeep,\n defaults,\n get,\n isArray,\n isEmpty,\n isFunction,\n isObjectLike,\n isString,\n keys,\n merge,\n remove,\n snakeCase,\n uniq\n} from 'lodash';\n\nimport {\n C_EVENT_ADD, C_EVENT_DRAIN_FINISHED,\n C_EVENT_REMOVE,\n C_EVENT_UPDATE,\n DEFAULT_NAMESPACE,\n K_TRIGGERED,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_EMBEDDABLE,\n METATYPE_ENTITY,\n METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n METATYPE_SCHEMA\n} from './../Constants';\nimport {IPropertyOptions} from './../options/IPropertyOptions';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {MetadataRegistry} from './MetadataRegistry';\nimport {DefaultPropertyRef} from './DefaultPropertyRef';\nimport {ClassRef} from '../ClassRef';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {DefaultEntityRef} from './DefaultEntityRef';\nimport {hasClassPropertiesInDefinition, IJsonSchema7} from '../json-schema/JsonSchema7';\nimport {ISchemaOptions} from '../options/ISchemaOptions';\nimport {IObjectOptions} from '../options/IObjectOptions';\nimport {C_DEFAULT, ClassUtils, NotSupportedError} from '@allgemein/base';\nimport {JsonSchema} from '../json-schema/JsonSchema';\nimport {ISchemaRef} from '../../api/ISchemaRef';\nimport {SchemaRef} from '../SchemaRef';\nimport {AbstractRegistry} from './AbstractRegistry';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {IRegistryOptions} from './IRegistryOptions';\n\n\n/**\n * Registry which handles by default class, schema, embeddalbes and properties, which are not handled by a specialized registry.\n *\n * This is a space for entities and their relations, which are grouped by a give \"namespace\" context.\n *\n * How entities are passed to the registry:\n *\n * 1. by annotations at startup (event from metadata registry)\n * - properties are appended first by annotation then entities follow\n * 2. by call for getEntityRefFor\n * 3. append during runtime by event fired through metadata registry\n * 4. append through reload method\n *\n */\nexport class DefaultNamespacedRegistry extends AbstractRegistry {\n\n private drained = false;\n\n constructor(namespace: string, options?: IRegistryOptions) {\n super(namespace, defaults(options || {}, <IRegistryOptions>{detectUnannotatedProperties: true}));\n }\n\n /**\n * Initialize events for metadata changes on runtime\n */\n prepare() {\n // apply listener\n this.drainAlreadyAdded();\n MetadataRegistry.$().on(C_EVENT_ADD, this.onMetadataAdd.bind(this));\n MetadataRegistry.$().on(C_EVENT_REMOVE, this.onMetadataRemove.bind(this));\n MetadataRegistry.$().on(C_EVENT_UPDATE, this.onMetadataUpdate.bind(this));\n }\n\n\n ready(timeout?: number) {\n return super.ready(timeout).then(() => {\n if (this.drained) {\n return Promise.resolve(this.drained);\n } else {\n return new Promise<boolean>((resolve, reject) => {\n const t = setTimeout(args => {\n reject();\n }, timeout ? timeout : 10000);\n MetadataRegistry.$().once(C_EVENT_DRAIN_FINISHED + this.namespace, () => {\n resolve(true);\n });\n });\n }\n });\n }\n\n /**\n * Apply already added entries to the metadata registry can be added to this registry\n */\n drainAlreadyAdded() {\n this.drained = false;\n const alreadyFired = MetadataRegistry.$().getMetadata().filter(x => {\n const v = Object.getOwnPropertyDescriptor(x, K_TRIGGERED);\n return v && v.value;\n }) as IAbstractOptions[];\n for (const event of alreadyFired) {\n try {\n this.onAdd(event.metaType as METADATA_TYPE, event);\n } catch (e) {\n }\n }\n this.drained = true;\n MetadataRegistry.$().emit([C_EVENT_DRAIN_FINISHED, this.namespace].join('_'), true);\n }\n\n\n async onMetadataAdd(\n context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n await this.lock.acquire();\n this.onAdd(context, options);\n this.lock.release();\n }\n\n async onMetadataUpdate(\n context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n if (!this.validNamespace(options)) {\n return;\n }\n await this.lock.acquire();\n this.onUpdate(context, options);\n this.lock.release();\n }\n\n async onMetadataRemove(\n context: METADATA_TYPE,\n options: (IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions)[]) {\n if (!this.validNamespace(options)) {\n return;\n }\n await this.lock.acquire();\n this.onRemove(context, options);\n this.lock.release();\n }\n\n /**\n * Check if object has the correct namespace for this registry handle\n *\n * @param options\n */\n validNamespace(options: IAbstractOptions): boolean {\n if (options.namespace) {\n if (options.namespace !== this.namespace) {\n // skip not my namespace\n return false;\n }\n } else {\n // if namespace not present skipping\n if (options.metaType !== METATYPE_PROPERTY) {\n // only properties should be pass and check if entity already exists\n const namespace = MetadataRegistry.$().find(METATYPE_NAMESPACE, (x: IAbstractOptions) => x.target === options.target);\n if (namespace && namespace.attributes.namespace === this.namespace) {\n options.namespace = namespace.attributes.namespace;\n } else if (this.namespace !== DEFAULT_NAMESPACE) {\n // passing to default namespace if nothing\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * react on dynamically added context\n *\n * @param context\n * @param entries\n */\n onAdd(context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n\n if (!this.validNamespace(options)) {\n return;\n }\n\n if (context === METATYPE_PROPERTY) {\n const sourceEntry = this.find(METATYPE_CLASS_REF, (ref: IClassRef) => ref.getClass() === options.target);\n if (sourceEntry) {\n const find = this.find(context, (c: IPropertyRef) =>\n c.getClassRef().getClass() === options.target &&\n c.name === options.propertyName\n );\n if (!find) {\n // update\n this.create(context, options);\n }\n }\n } else if (context === METATYPE_ENTITY) {\n const find = this.find(context, (c: IEntityRef) => c.getClassRef().getClass() === options.target);\n if (!find) {\n const entityRef = this.create(context, options) as IEntityRef;\n const properties = this.find(METATYPE_PROPERTY, (c: IPropertyRef) =>\n c.getClassRef().getClass() === options.target\n );\n if (isEmpty(properties)) {\n // create properties only when non exists\n this.createPropertiesForRef(entityRef.getClassRef());\n }\n }\n } else if (context === METATYPE_EMBEDDABLE) {\n const find = this.find(METATYPE_CLASS_REF, (c: IClassRef) => c.getClass() === options.target) as IClassRef;\n if (!find) {\n this.create(context, options);\n } else {\n const refOptions = find.getOptions();\n defaults(refOptions, options);\n }\n } else if (context === METATYPE_SCHEMA) {\n let find: ISchemaRef = this.getOrCreateSchemaRefByName(options as ISchemaOptions);\n if (options.target) {\n let entityRef: IEntityRef = this.find(METATYPE_ENTITY, (c: IEntityRef) => c.getClass() === options.target);\n\n if (find && entityRef) {\n this.addSchemaToEntityRef(find, entityRef);\n }\n }\n }\n }\n\n getOrCreateSchemaRefByName(options: ISchemaOptions) {\n let find: ISchemaRef = this.find(METATYPE_SCHEMA, (c: ISchemaRef) => c.name === (<ISchemaOptions>options).name);\n if (!find) {\n find = this.createSchemaForOptions(options);\n }\n return find;\n }\n\n\n addSchemaToEntityRef(schemaRef: string | ISchemaRef, entityRef: IEntityRef, options: { override?: boolean, onlyDefault?: boolean } = {}) {\n if (isString(schemaRef)) {\n schemaRef = this.getOrCreateSchemaRefByName({\n metaType: METATYPE_SCHEMA,\n name: schemaRef,\n namespace: this.namespace,\n target: entityRef.getClass()\n });\n }\n const name = schemaRef.name;\n let entry = entityRef.getOptions(METATYPE_SCHEMA, []);\n if (!entry.includes(name)) {\n if (entry) {\n if (isArray(entry)) {\n entry.push(name);\n } else {\n entry = [entry, name];\n }\n } else {\n entry = [name];\n }\n\n if (get(options, 'override', false)) {\n if (get(options, 'onlyDefault', false)) {\n remove(entry, x => x === C_DEFAULT);\n } else {\n entry = [name];\n }\n }\n entityRef.setOption(METATYPE_SCHEMA, uniq(entry));\n }\n }\n\n\n /**\n * react on dynamically removed context\n *\n * @param context\n * @param entries\n */\n onRemove(context: METADATA_TYPE, entries: (IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions)[]) {\n\n if (context === METATYPE_ENTITY || context === METATYPE_CLASS_REF) {\n const targets = entries.map(x => x.target);\n this.getLookupRegistry().remove(METATYPE_CLASS_REF, (x: any) => targets.includes(x.target));\n this.getLookupRegistry().remove(METATYPE_ENTITY, (x: any) => targets.includes(x.target));\n this.getLookupRegistry().remove(METATYPE_PROPERTY, (x: any) => targets.includes(x.target));\n } else if (context === METATYPE_PROPERTY) {\n const targets = entries.map(x => [x.target, x.propertyName]);\n this.getLookupRegistry().remove(context, (x: any) => targets.includes([x.target, x.name]));\n } else if (context === METATYPE_SCHEMA) {\n // TODO remove schema ref\n // TODO remove schema options entries\n }\n }\n\n\n /**\n * react on dynamically update context\n *\n * @param context\n * @param entries\n */\n onUpdate(context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n }\n\n\n /**\n * Return all registered schema references\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefs(filter?: (x: ISchemaRef) => boolean): SchemaRef[] {\n return this.filter(METATYPE_SCHEMA, filter);\n }\n\n /**\n * Return schema references for an given entity or class reference\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefsFor(ref: string): SchemaRef;\n getSchemaRefsFor(ref: string | IEntityRef | IClassRef): SchemaRef | SchemaRef[] {\n let lookup: SchemaRef[] = [];\n if (isEntityRef(ref) || isClassRef(ref)) {\n const schemas = ref.getOptions(METATYPE_SCHEMA, []);\n for (const schema of schemas) {\n let schemaRef: SchemaRef = this.find(METATYPE_SCHEMA, (x: ISchemaRef) => x.name === schema);\n if (!schemaRef) {\n schemaRef = this.create(METATYPE_SCHEMA, {name: schema, target: ref.getClass()});\n }\n lookup.push(schemaRef);\n }\n lookup = this.getSchemaRefs((x: ISchemaRef) => schemas.includes(x.name));\n } else if (isString(ref)) {\n let schemaRef = this.find(METATYPE_SCHEMA, (x: ISchemaRef) => x.name === ref);\n if (!schemaRef) {\n schemaRef = this.create(METATYPE_SCHEMA, {name: ref});\n }\n return schemaRef as SchemaRef;\n } else {\n throw new NotSupportedError('passed value is not supported');\n }\n return lookup ? uniq(lookup) : null;\n }\n\n /**\n * TODO\n *\n * @param filter\n */\n getEntities(filter?: (x: IEntityRef) => boolean): IEntityRef[] {\n return this.getLookupRegistry().filter(METATYPE_ENTITY, filter);\n }\n\n /**\n * Can get get entity ref for function.\n *\n * @param fn\n */\n getEntityRefFor(fn: string | object | Function, skipNsCheck: boolean = true): DefaultEntityRef {\n let lookup = <string | Function>fn;\n if (!isFunction(fn) && !isString(fn) && isObjectLike(fn)) {\n lookup = ClassUtils.getFunction(fn as any);\n }\n let lookupFn = (x: IEntityRef) => x.getClassRef().getClass() === lookup;\n if (isString(fn)) {\n lookupFn = (x: IEntityRef) => x.getClassRef().name === lookup || x.name === lookup;\n }\n const entityRefExists = this.find<DefaultEntityRef>(METATYPE_ENTITY, lookupFn);\n if (entityRefExists) {\n return entityRefExists;\n }\n return this.create(METATYPE_ENTITY, {\n target: lookup,\n namespace: this.namespace,\n skipNsCheck: skipNsCheck\n });\n }\n\n\n /**\n * Returns property by name for a given class or entity ref\n *\n * @param filter\n */\n getPropertyRef(ref: IClassRef | IEntityRef, name: string): DefaultPropertyRef {\n return this.getPropertyRefs(ref).find(x => snakeCase(x.name) === snakeCase(name));\n }\n\n\n /**\n * Returns all properties for given class or entity ref\n *\n * @param ref\n */\n getPropertyRefs(ref: IClassRef | IEntityRef): DefaultPropertyRef[] {\n const clsRef: IClassRef = isEntityRef(ref) ? ref.getClassRef() : ref;\n // Return existing\n const clsRefExists = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x === clsRef);\n let properties: DefaultPropertyRef[] = [];\n if (clsRefExists) {\n properties = this.filter(METATYPE_PROPERTY, (x: IPropertyRef) => x.getClassRef() === clsRefExists);\n } else {\n properties = this.createPropertiesForRef(clsRef);\n }\n return properties;\n }\n\n /**\n * Create properties for class or entity ref.\n */\n createPropertiesForRef(clsRef: IClassRef): DefaultPropertyRef[] {\n const cls = clsRef.getClass(true);\n const propOptions: IPropertyOptions[] = [];\n const metaPropOptions = MetadataRegistry.$().getByContextAndTarget(METATYPE_PROPERTY, cls) as IPropertyOptions[];\n\n if (this.getOptions().detectUnannotatedProperties) {\n const jsonSchema = JsonSchema.serialize(cls, {appendTarget: true}) as any;\n if (hasClassPropertiesInDefinition(clsRef.name, jsonSchema)) {\n const properties = (jsonSchema.definitions[clsRef.name] as IJsonSchema7).properties;\n for (const k of keys(properties)) {\n const property: IJsonSchema7 = properties[k] as IJsonSchema7;\n const opts: IPropertyOptions = {\n metaType: METATYPE_PROPERTY,\n namespace: clsRef.getNamespace(),\n type: property.$target ? property.$target : property.type,\n propertyName: k,\n target: cls\n };\n\n if (property.default) {\n opts.default = property.default;\n }\n\n const propMetadata = remove(metaPropOptions, x => x.propertyName === k);\n if (!isEmpty(propMetadata)) {\n for (const p of propMetadata) {\n // clean namespace\n const copy = clone(p);\n delete copy.namespace;\n assign(opts, copy);\n }\n }\n propOptions.push(opts);\n }\n }\n }\n\n const propertyOptions = propOptions.concat(metaPropOptions)\n // .filter(x => !clsRef.getRegistry().find(METATYPE_PROPERTY,\n // (z: IPropertyRef) => z.name === x.propertyName && z.getClassRef().getClass() === x.target)\n // )\n // .filter(x => !this.processing.find((z: IPropertyOptions) => z.propertyName === x.propertyName && z.target === x.target))\n .map(p => {\n // change namespace of properties namespace\n const copy = clone(p);\n copy.namespace = clsRef.getNamespace();\n copy.skipNsCheck = true;\n return copy;\n });\n\n\n return propertyOptions.map(opts => clsRef.getRegistry().create(METATYPE_PROPERTY, opts));\n }\n\n\n /**\n * Create default property reference\n *\n * @param options\n */\n createPropertyForOptions(options: IPropertyOptions): DefaultPropertyRef {\n if (keys(options).length === 0) {\n throw new Error('can\\'t create property for empty options');\n }\n options.namespace = this.namespace;\n const prop = new DefaultPropertyRef(options);\n return this.add(prop.metaType, prop);\n }\n\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n createEntityForOptions(options: IEntityOptions): DefaultEntityRef {\n options.namespace = this.namespace;\n if (!options.name) {\n options.name = ClassRef.getClassName(options.target);\n }\n const entityRef = new DefaultEntityRef(options);\n const retRef = this.add(entityRef.metaType, entityRef);\n const metaSchemaOptionsForEntity = MetadataRegistry.$()\n .getByContextAndTarget(METATYPE_SCHEMA, entityRef.getClass()) as ISchemaOptions[];\n if (metaSchemaOptionsForEntity.length > 0) {\n for (const schemaOptions of metaSchemaOptionsForEntity) {\n this.addSchemaToEntityRef(schemaOptions.name, entityRef);\n }\n }\n return retRef;\n }\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n createEmbeddableForOptions(options: IObjectOptions): IClassRef {\n // options.namespace = this.namespace;\n // if (!options.name) {\n // options.name = ClassRef.getClassName(options.target);\n // }\n options = defaults(options || {}, {});\n const classRef = this.getClassRefFor(options.target, METATYPE_CLASS_REF);\n classRef.setOptions(options);\n return classRef;\n }\n\n /**\n * Create default schema reference\n *\n * @param options\n */\n createSchemaForOptions(options: ISchemaOptions): SchemaRef {\n options.namespace = this.namespace;\n const schemaRef = new SchemaRef(options);\n return this.add(schemaRef.metaType, schemaRef);\n }\n\n /**\n * Return metadata collected in the MetadataRegistry through annotation or explizit attached data.\n *\n * @param context\n * @param target\n * @return IAbstractOptions\n */\n getMetadata(context: METADATA_TYPE, target: Function | string, propertyName?: string): IAbstractOptions {\n let metadataOptionList: IAbstractOptions[] =\n MetadataRegistry.$()\n .getByContextAndTarget(context, target, 'merge', propertyName) as IAbstractOptions[];\n\n let metadataOptions: IAbstractOptions = {};\n if (metadataOptionList.length > 1) {\n metadataOptions = assign(metadataOptions, ...metadataOptionList.map(x => cloneDeep(x)));\n } else if (metadataOptionList.length === 1) {\n metadataOptions = cloneDeep(metadataOptionList.shift());\n }\n\n if (propertyName) {\n // remove namespace for properties\n delete metadataOptions.namespace;\n }\n\n return metadataOptions;\n }\n\n\n getPropertyRefsFor(fn: string | object | Function): DefaultPropertyRef[] {\n const clsName = ClassRef.getClassName(fn);\n const clsRef = ClassRef.get(clsName, this.namespace);\n return this.getPropertyRefs(clsRef);\n }\n\n\n create<T>(context: string, options: IAbstractOptions): T {\n const skipNsCheck = get(options, 'skipNsCheck', false);\n delete options.skipNsCheck;\n const metadata = this.getMetadata(context as METADATA_TYPE, options.target, options.propertyName ? options.propertyName : null);\n if (metadata) {\n\n if (!skipNsCheck && metadata.namespace && metadata.namespace !== this.namespace) {\n if (context !== METATYPE_PROPERTY) {\n throw new NotSupportedError(\n 'namespace for ' + context + ' is ' + metadata.namespace +\n ' the namespace of this registry is ' + this.namespace\n );\n }\n }\n if (!isEmpty(metadata) && keys(metadata).length > 0) {\n merge(options, assign(metadata, {namespace: this.namespace}));\n }\n }\n options.metaType = context;\n switch (context as METADATA_TYPE) {\n case METATYPE_CLASS_REF:\n break;\n case METATYPE_EMBEDDABLE:\n return <any>this.createEmbeddableForOptions(options);\n case METATYPE_ENTITY:\n return <any>this.createEntityForOptions(options);\n case METATYPE_PROPERTY:\n return <any>this.createPropertyForOptions(options);\n case METATYPE_SCHEMA:\n return <any>this.createSchemaForOptions(options as ISchemaOptions);\n }\n\n return null;\n }\n\n /**\n * TODO\n */\n add<T>(context: string, entry: T): T {\n if (context === METATYPE_CLASS_REF) {\n return this.addClassRef(entry as any) as any;\n }\n return this.getLookupRegistry().add(context, entry);\n }\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n addClassRef(ref: IClassRef): IClassRef {\n const addedClassRef = this.getLookupRegistry().add(METATYPE_CLASS_REF, ref);\n this.createPropertiesForRef(addedClassRef);\n return addedClassRef;\n }\n\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n let ref: IClassRef = null;\n if (isString(object)) {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x.name === object);\n } else if (isFunction(object)) {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass(true) === object);\n } else {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x === object);\n }\n if (!ref) {\n ref = ClassRef.get(<string | Function>object, this.namespace, {\n resolve: type === METATYPE_PROPERTY,\n checkNamespace: true\n });\n const metadata = this.getMetadata(METATYPE_EMBEDDABLE, <string | Function>object);\n if (!isEmpty(metadata) && keys(metadata).length > 0) {\n const refOptions = ref.getOptions();\n merge(refOptions, metadata);\n }\n // this.createPropertiesForRef(ref);\n }\n return ref;\n }\n\n reset() {\n super.reset();\n MetadataRegistry.$().off(C_EVENT_ADD, this.onAdd.bind(this));\n MetadataRegistry.$().off(C_EVENT_REMOVE, this.onRemove.bind(this));\n MetadataRegistry.$().off(C_EVENT_UPDATE, this.onUpdate.bind(this));\n }\n\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../../src/lib/registry/DefaultNamespacedRegistry.ts"],"names":[],"mappings":"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","file":"DefaultNamespacedRegistry.js","sourcesContent":["/**\n * Handler for metadata\n */\nimport {\n assign,\n clone,\n cloneDeep,\n defaults,\n get,\n isArray,\n isEmpty,\n isFunction,\n isObjectLike,\n isString,\n keys,\n merge,\n remove,\n snakeCase,\n uniq\n} from 'lodash';\n\nimport {\n C_EVENT_ADD, C_EVENT_DRAIN_FINISHED,\n C_EVENT_REMOVE,\n C_EVENT_UPDATE,\n DEFAULT_NAMESPACE,\n K_TRIGGERED,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_EMBEDDABLE,\n METATYPE_ENTITY,\n METATYPE_NAMESPACE,\n METATYPE_PROPERTY,\n METATYPE_SCHEMA\n} from './../Constants';\nimport {IPropertyOptions} from './../options/IPropertyOptions';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {MetadataRegistry} from './MetadataRegistry';\nimport {DefaultPropertyRef} from './DefaultPropertyRef';\nimport {ClassRef} from '../ClassRef';\nimport {IEntityOptions} from '../options/IEntityOptions';\nimport {DefaultEntityRef} from './DefaultEntityRef';\nimport {hasClassPropertiesInDefinition, IJsonSchema7} from '../json-schema/JsonSchema7';\nimport {ISchemaOptions} from '../options/ISchemaOptions';\nimport {IObjectOptions} from '../options/IObjectOptions';\nimport {C_DEFAULT, ClassUtils, NotSupportedError} from '@allgemein/base';\nimport {JsonSchema} from '../json-schema/JsonSchema';\nimport {ISchemaRef} from '../../api/ISchemaRef';\nimport {SchemaRef} from '../SchemaRef';\nimport {AbstractRegistry} from './AbstractRegistry';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {IRegistryOptions} from './IRegistryOptions';\n\n\n/**\n * Registry which handles by default class, schema, embeddalbes and properties, which are not handled by a specialized registry.\n *\n * This is a space for entities and their relations, which are grouped by a give \"namespace\" context.\n *\n * How entities are passed to the registry:\n *\n * 1. by annotations at startup (event from metadata registry)\n * - properties are appended first by annotation then entities follow\n * 2. by call for getEntityRefFor\n * 3. append during runtime by event fired through metadata registry\n * 4. append through reload method\n *\n */\nexport class DefaultNamespacedRegistry extends AbstractRegistry {\n\n private drained = false;\n\n constructor(namespace: string, options?: IRegistryOptions) {\n super(namespace, defaults(options || {}, <IRegistryOptions>{detectUnannotatedProperties: true}));\n }\n\n /**\n * Initialize events for metadata changes on runtime\n */\n prepare() {\n // apply listener\n this.drainAlreadyAdded();\n MetadataRegistry.$().on(C_EVENT_ADD, this.onMetadataAdd.bind(this));\n MetadataRegistry.$().on(C_EVENT_REMOVE, this.onMetadataRemove.bind(this));\n MetadataRegistry.$().on(C_EVENT_UPDATE, this.onMetadataUpdate.bind(this));\n }\n\n\n ready(timeout?: number) {\n return super.ready(timeout).then(() => {\n if (this.drained) {\n return Promise.resolve(this.drained);\n } else {\n return new Promise<boolean>((resolve, reject) => {\n const t = setTimeout(() => {\n reject();\n }, timeout ? timeout : 10000);\n MetadataRegistry.$().once(C_EVENT_DRAIN_FINISHED + this.namespace, () => {\n resolve(true);\n });\n });\n }\n });\n }\n\n /**\n * Apply already added entries to the metadata registry can be added to this registry\n */\n drainAlreadyAdded() {\n this.drained = false;\n const alreadyFired = MetadataRegistry.$().getMetadata().filter(x => {\n const v = Object.getOwnPropertyDescriptor(x, K_TRIGGERED);\n return v && v.value;\n }) as IAbstractOptions[];\n for (const event of alreadyFired) {\n try {\n this.onAdd(event.metaType as METADATA_TYPE, event);\n } catch (e) {\n }\n }\n this.drained = true;\n MetadataRegistry.$().emit([C_EVENT_DRAIN_FINISHED, this.namespace].join('_'), true);\n }\n\n\n async onMetadataAdd(\n context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n await this.lock.acquire();\n this.onAdd(context, options);\n this.lock.release();\n }\n\n async onMetadataUpdate(\n context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n if (!this.validNamespace(options)) {\n return;\n }\n await this.lock.acquire();\n this.onUpdate(context, options);\n this.lock.release();\n }\n\n async onMetadataRemove(\n context: METADATA_TYPE,\n options: (IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions)[]) {\n if (!this.validNamespace(options)) {\n return;\n }\n await this.lock.acquire();\n this.onRemove(context, options);\n this.lock.release();\n }\n\n /**\n * Check if object has the correct namespace for this registry handle\n *\n * @param options\n */\n validNamespace(options: IAbstractOptions): boolean {\n if (options.namespace) {\n if (options.namespace !== this.namespace) {\n // skip not my namespace\n return false;\n }\n } else {\n // if namespace not present skipping\n if (options.metaType !== METATYPE_PROPERTY) {\n // only properties should be pass and check if entity already exists\n const namespace = MetadataRegistry.$().find(METATYPE_NAMESPACE, (x: IAbstractOptions) => x.target === options.target);\n if (namespace && namespace.attributes.namespace === this.namespace) {\n options.namespace = namespace.attributes.namespace;\n } else if (this.namespace !== DEFAULT_NAMESPACE) {\n // passing to default namespace if nothing\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * react on dynamically added context\n *\n * @param context\n * @param entries\n */\n onAdd(context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n\n if (!this.validNamespace(options)) {\n return;\n }\n\n if (context === METATYPE_PROPERTY) {\n const sourceEntry = this.find(METATYPE_CLASS_REF, (ref: IClassRef) => ref.getClass() === options.target);\n if (sourceEntry) {\n const find = this.find(context, (c: IPropertyRef) =>\n c.getClassRef().getClass() === options.target &&\n c.name === (options as IPropertyOptions).propertyName\n );\n if (!find) {\n // update\n this.create(context, options);\n }\n }\n } else if (context === METATYPE_ENTITY) {\n const find = this.find(context, (c: IEntityRef) => c.getClassRef().getClass() === options.target);\n if (!find) {\n const entityRef = this.create(context, options) as IEntityRef;\n const properties = this.find(METATYPE_PROPERTY, (c: IPropertyRef) =>\n c.getClassRef().getClass() === options.target\n );\n if (isEmpty(properties)) {\n // create properties only when non exists\n this.createPropertiesForRef(entityRef.getClassRef());\n }\n }\n } else if (context === METATYPE_EMBEDDABLE) {\n const find = this.find(METATYPE_CLASS_REF, (c: IClassRef) => c.getClass() === options.target) as IClassRef;\n if (!find) {\n this.create(context, options);\n } else {\n const refOptions = find.getOptions();\n defaults(refOptions, options);\n }\n } else if (context === METATYPE_SCHEMA) {\n let find: ISchemaRef = this.getOrCreateSchemaRefByName(options as ISchemaOptions);\n if (options.target) {\n let entityRef: IEntityRef = this.find(METATYPE_ENTITY, (c: IEntityRef) => c.getClass() === options.target);\n\n if (find && entityRef) {\n this.addSchemaToEntityRef(find, entityRef);\n }\n }\n }\n }\n\n getOrCreateSchemaRefByName(options: ISchemaOptions) {\n let find: ISchemaRef = this.find(METATYPE_SCHEMA, (c: ISchemaRef) => c.name === (<ISchemaOptions>options).name);\n if (!find) {\n find = this.createSchemaForOptions(options);\n }\n return find;\n }\n\n\n addSchemaToEntityRef(schemaRef: string | ISchemaRef, entityRef: IEntityRef, options: { override?: boolean, onlyDefault?: boolean } = {}) {\n if (isString(schemaRef)) {\n schemaRef = this.getOrCreateSchemaRefByName({\n metaType: METATYPE_SCHEMA,\n name: schemaRef,\n namespace: this.namespace,\n target: entityRef.getClass()\n });\n }\n const name = schemaRef.name;\n let entry = entityRef.getOptions(METATYPE_SCHEMA, []);\n if (!entry.includes(name)) {\n if (entry) {\n if (isArray(entry)) {\n entry.push(name);\n } else {\n entry = [entry, name];\n }\n } else {\n entry = [name];\n }\n\n if (get(options, 'override', false)) {\n if (get(options, 'onlyDefault', false)) {\n remove(entry, x => x === C_DEFAULT);\n } else {\n entry = [name];\n }\n }\n entityRef.setOption(METATYPE_SCHEMA, uniq(entry));\n }\n }\n\n\n /**\n * react on dynamically removed context\n *\n * @param context\n * @param entries\n */\n onRemove(context: METADATA_TYPE, entries: (IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions)[]) {\n\n if (context === METATYPE_ENTITY || context === METATYPE_CLASS_REF) {\n const targets = entries.map(x => x.target);\n this.getLookupRegistry().remove(METATYPE_CLASS_REF, (x: any) => targets.includes(x.target));\n this.getLookupRegistry().remove(METATYPE_ENTITY, (x: any) => targets.includes(x.target));\n this.getLookupRegistry().remove(METATYPE_PROPERTY, (x: any) => targets.includes(x.target));\n } else if (context === METATYPE_PROPERTY) {\n const targets = entries.map(x => [x.target, x.propertyName]);\n this.getLookupRegistry().remove(context, (x: any) => targets.includes([x.target, x.name]));\n } else if (context === METATYPE_SCHEMA) {\n // TODO remove schema ref\n // TODO remove schema options entries\n }\n }\n\n\n /**\n * react on dynamically update context\n *\n * @param context\n * @param entries\n */\n onUpdate(context: METADATA_TYPE,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions) {\n }\n\n\n /**\n * Return all registered schema references\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefs(filter?: (x: ISchemaRef) => boolean): SchemaRef[] {\n return this.filter(METATYPE_SCHEMA, filter);\n }\n\n /**\n * Return schema references for an given entity or class reference\n *\n * @param ref\n * @return ISchemaRef[]\n */\n getSchemaRefsFor(ref: string): SchemaRef;\n getSchemaRefsFor(ref: string | IEntityRef | IClassRef): SchemaRef | SchemaRef[] {\n let lookup: SchemaRef[] = [];\n if (isEntityRef(ref) || isClassRef(ref)) {\n const schemas = ref.getOptions(METATYPE_SCHEMA, []);\n for (const schema of schemas) {\n let schemaRef: SchemaRef = this.find(METATYPE_SCHEMA, (x: ISchemaRef) => x.name === schema);\n if (!schemaRef) {\n schemaRef = this.create(METATYPE_SCHEMA, {name: schema, target: ref.getClass()});\n }\n lookup.push(schemaRef);\n }\n lookup = this.getSchemaRefs((x: ISchemaRef) => schemas.includes(x.name));\n } else if (isString(ref)) {\n let schemaRef = this.find(METATYPE_SCHEMA, (x: ISchemaRef) => x.name === ref);\n if (!schemaRef) {\n schemaRef = this.create(METATYPE_SCHEMA, {name: ref});\n }\n return schemaRef as SchemaRef;\n } else {\n throw new NotSupportedError('passed value is not supported');\n }\n return lookup ? uniq(lookup) : null;\n }\n\n /**\n * TODO\n *\n * @param filter\n */\n getEntities(filter?: (x: IEntityRef) => boolean): IEntityRef[] {\n return this.getLookupRegistry().filter(METATYPE_ENTITY, filter);\n }\n\n /**\n * Can get get entity ref for function.\n *\n * @param fn\n */\n getEntityRefFor(fn: string | object | Function, skipNsCheck: boolean = true): DefaultEntityRef {\n let lookup = <string | Function>fn;\n if (!isFunction(fn) && !isString(fn) && isObjectLike(fn)) {\n lookup = ClassUtils.getFunction(fn as any);\n }\n let lookupFn = (x: IEntityRef) => x.getClassRef().getClass() === lookup;\n if (isString(fn)) {\n lookupFn = (x: IEntityRef) => x.getClassRef().name === lookup || x.name === lookup;\n }\n const entityRefExists = this.find<DefaultEntityRef>(METATYPE_ENTITY, lookupFn);\n if (entityRefExists) {\n return entityRefExists;\n }\n return this.create(METATYPE_ENTITY, {\n target: lookup,\n namespace: this.namespace,\n skipNsCheck: skipNsCheck\n });\n }\n\n\n /**\n * Returns property by name for a given class or entity ref\n *\n * @param filter\n */\n getPropertyRef(ref: IClassRef | IEntityRef, name: string): DefaultPropertyRef {\n return this.getPropertyRefs(ref).find(x => snakeCase(x.name) === snakeCase(name));\n }\n\n\n /**\n * Returns all properties for given class or entity ref\n *\n * @param ref\n */\n getPropertyRefs(ref: IClassRef | IEntityRef): DefaultPropertyRef[] {\n const clsRef: IClassRef = isEntityRef(ref) ? ref.getClassRef() : ref;\n // Return existing\n const clsRefExists = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x === clsRef);\n let properties: DefaultPropertyRef[] = [];\n if (clsRefExists) {\n properties = this.filter(METATYPE_PROPERTY, (x: IPropertyRef) => x.getClassRef() === clsRefExists);\n } else {\n properties = this.createPropertiesForRef(clsRef);\n }\n return properties;\n }\n\n /**\n * Create properties for class or entity ref.\n */\n createPropertiesForRef(clsRef: IClassRef): DefaultPropertyRef[] {\n const cls = clsRef.getClass(true);\n const propOptions: IPropertyOptions[] = [];\n const metaPropOptions = MetadataRegistry.$().getByContextAndTarget(METATYPE_PROPERTY, cls) as IPropertyOptions[];\n\n if (this.getOptions().detectUnannotatedProperties) {\n const jsonSchema = JsonSchema.serialize(cls, {appendTarget: true}) as any;\n if (hasClassPropertiesInDefinition(clsRef.name, jsonSchema)) {\n const properties = (jsonSchema.definitions[clsRef.name] as IJsonSchema7).properties;\n for (const k of keys(properties)) {\n const property: IJsonSchema7 = properties[k] as IJsonSchema7;\n const opts: IPropertyOptions = {\n metaType: METATYPE_PROPERTY,\n namespace: clsRef.getNamespace(),\n type: property.$target ? property.$target : property.type,\n propertyName: k,\n target: cls\n };\n\n if (property.default) {\n opts.default = property.default;\n }\n\n const propMetadata = remove(metaPropOptions, x => x.propertyName === k);\n if (!isEmpty(propMetadata)) {\n for (const p of propMetadata) {\n // clean namespace\n const copy = clone(p);\n delete copy.namespace;\n assign(opts, copy);\n }\n }\n propOptions.push(opts);\n }\n }\n }\n\n const propertyOptions = propOptions.concat(metaPropOptions)\n // .filter(x => !clsRef.getRegistry().find(METATYPE_PROPERTY,\n // (z: IPropertyRef) => z.name === x.propertyName && z.getClassRef().getClass() === x.target)\n // )\n // .filter(x => !this.processing.find((z: IPropertyOptions) => z.propertyName === x.propertyName && z.target === x.target))\n .map(p => {\n // change namespace of properties namespace\n const copy = clone(p);\n copy.namespace = clsRef.getNamespace();\n copy.skipNsCheck = true;\n return copy;\n });\n\n\n return propertyOptions.map(opts => clsRef.getRegistry().create(METATYPE_PROPERTY, opts));\n }\n\n\n /**\n * Create default property reference\n *\n * @param options\n */\n createPropertyForOptions(options: IPropertyOptions): DefaultPropertyRef {\n if (keys(options).length === 0) {\n throw new Error('can\\'t create property for empty options');\n }\n options.namespace = this.namespace;\n const prop = new DefaultPropertyRef(options);\n return this.add(prop.metaType, prop);\n }\n\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n createEntityForOptions(options: IEntityOptions): DefaultEntityRef {\n options.namespace = this.namespace;\n if (!options.name) {\n options.name = ClassRef.getClassName(options.target);\n }\n const entityRef = new DefaultEntityRef(options);\n const retRef = this.add(entityRef.metaType, entityRef);\n const metaSchemaOptionsForEntity = MetadataRegistry.$()\n .getByContextAndTarget(METATYPE_SCHEMA, entityRef.getClass()) as ISchemaOptions[];\n if (metaSchemaOptionsForEntity.length > 0) {\n for (const schemaOptions of metaSchemaOptionsForEntity) {\n this.addSchemaToEntityRef(schemaOptions.name, entityRef);\n }\n }\n return retRef;\n }\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n createEmbeddableForOptions(options: IObjectOptions): IClassRef {\n // options.namespace = this.namespace;\n // if (!options.name) {\n // options.name = ClassRef.getClassName(options.target);\n // }\n options = defaults(options || {}, {});\n const classRef = this.getClassRefFor(options.target, METATYPE_CLASS_REF);\n classRef.setOptions(options);\n return classRef;\n }\n\n /**\n * Create default schema reference\n *\n * @param options\n */\n createSchemaForOptions(options: ISchemaOptions): SchemaRef {\n options.namespace = this.namespace;\n const schemaRef = new SchemaRef(options);\n return this.add(schemaRef.metaType, schemaRef);\n }\n\n /**\n * Return metadata collected in the MetadataRegistry through annotation or explizit attached data.\n *\n * @param context\n * @param target\n * @return IAbstractOptions\n */\n getMetadata(context: METADATA_TYPE, target: Function | string, propertyName?: string): IAbstractOptions {\n let metadataOptionList: IAbstractOptions[] =\n MetadataRegistry.$()\n .getByContextAndTarget(context, target, 'merge', propertyName) as IAbstractOptions[];\n\n let metadataOptions: IAbstractOptions = {};\n if (metadataOptionList.length > 1) {\n metadataOptions = assign(metadataOptions, ...metadataOptionList.map(x => cloneDeep(x)));\n } else if (metadataOptionList.length === 1) {\n metadataOptions = cloneDeep(metadataOptionList.shift());\n }\n\n if (propertyName) {\n // remove namespace for properties\n delete metadataOptions.namespace;\n }\n\n return metadataOptions;\n }\n\n\n getPropertyRefsFor(fn: string | object | Function): DefaultPropertyRef[] {\n const clsName = ClassRef.getClassName(fn);\n const clsRef = ClassRef.get(clsName, this.namespace);\n return this.getPropertyRefs(clsRef);\n }\n\n\n create<T>(context: string, options: IAbstractOptions): T {\n const skipNsCheck = get(options, 'skipNsCheck', false);\n delete options.skipNsCheck;\n const metadata = this.getMetadata(context as METADATA_TYPE, options.target, options.propertyName ? options.propertyName : null);\n if (metadata) {\n\n if (!skipNsCheck && metadata.namespace && metadata.namespace !== this.namespace) {\n if (context !== METATYPE_PROPERTY) {\n throw new NotSupportedError(\n 'namespace for ' + context + ' is ' + metadata.namespace +\n ' the namespace of this registry is ' + this.namespace\n );\n }\n }\n if (!isEmpty(metadata) && keys(metadata).length > 0) {\n merge(options, assign(metadata, {namespace: this.namespace}));\n }\n }\n options.metaType = context;\n switch (context as METADATA_TYPE) {\n case METATYPE_CLASS_REF:\n break;\n case METATYPE_EMBEDDABLE:\n return <any>this.createEmbeddableForOptions(options);\n case METATYPE_ENTITY:\n return <any>this.createEntityForOptions(options);\n case METATYPE_PROPERTY:\n return <any>this.createPropertyForOptions(options);\n case METATYPE_SCHEMA:\n return <any>this.createSchemaForOptions(options as ISchemaOptions);\n }\n\n return null;\n }\n\n /**\n * TODO\n */\n add<T>(context: string, entry: T): T {\n if (context === METATYPE_CLASS_REF) {\n return this.addClassRef(entry as any) as any;\n }\n return this.getLookupRegistry().add(context, entry);\n }\n\n /**\n * Create default entity reference\n *\n * @param options\n */\n addClassRef(ref: IClassRef): IClassRef {\n const addedClassRef = this.getLookupRegistry().add(METATYPE_CLASS_REF, ref);\n this.createPropertiesForRef(addedClassRef);\n return addedClassRef;\n }\n\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n let ref: IClassRef = null;\n if (isString(object)) {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x.name === object);\n } else if (isFunction(object)) {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass(true) === object);\n } else {\n ref = this.find(METATYPE_CLASS_REF, (x: IClassRef) => x === object);\n }\n if (!ref) {\n ref = ClassRef.get(<string | Function>object, this.namespace, {\n resolve: type === METATYPE_PROPERTY,\n checkNamespace: true\n });\n const metadata = this.getMetadata(METATYPE_EMBEDDABLE, <string | Function>object);\n if (!isEmpty(metadata) && keys(metadata).length > 0) {\n const refOptions = ref.getOptions();\n merge(refOptions, metadata);\n }\n // this.createPropertiesForRef(ref);\n }\n return ref;\n }\n\n reset() {\n super.reset();\n MetadataRegistry.$().off(C_EVENT_ADD, this.onAdd.bind(this));\n MetadataRegistry.$().off(C_EVENT_REMOVE, this.onRemove.bind(this));\n MetadataRegistry.$().off(C_EVENT_UPDATE, this.onUpdate.bind(this));\n }\n\n\n}\n"],"sourceRoot":"../.."}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allgemein/schema-api",
3
- "version": "1.5.21",
3
+ "version": "1.5.24",
4
4
  "description": "Library for schema api",
5
5
  "main": "index.js",
6
6
  "private": false,