@allgemein/schema-api 1.5.28 → 1.5.29
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.
|
@@ -77,13 +77,16 @@ class DefaultNamespacedRegistry extends AbstractRegistry_1.AbstractRegistry {
|
|
|
77
77
|
*/
|
|
78
78
|
drainAlreadyAdded() {
|
|
79
79
|
this.drained = false;
|
|
80
|
-
const alreadyFired = MetadataRegistry_1.MetadataRegistry.$()
|
|
80
|
+
const alreadyFired = MetadataRegistry_1.MetadataRegistry.$()
|
|
81
|
+
.getMetadata()
|
|
82
|
+
.filter(x => {
|
|
81
83
|
const v = Object.getOwnPropertyDescriptor(x, Constants_1.K_TRIGGERED);
|
|
82
84
|
return v && v.value;
|
|
83
85
|
});
|
|
84
86
|
for (const event of alreadyFired) {
|
|
87
|
+
const cloneEvent = (0, lodash_1.cloneDeep)(event);
|
|
85
88
|
try {
|
|
86
|
-
this.onAdd(
|
|
89
|
+
this.onAdd(cloneEvent.metaType, cloneEvent);
|
|
87
90
|
}
|
|
88
91
|
catch (e) {
|
|
89
92
|
}
|
|
@@ -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(() => {\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 const failedNsCheck = get(options, 'failedNsCheckMode', 'throw');\n delete options.skipNsCheck;\n const metadata = this.getMetadata(context as METADATA_TYPE, options.target, options.propertyName ? options.propertyName : null);\n if (metadata) {\n if (metadata.namespace && metadata.namespace !== this.namespace) {\n if (!skipNsCheck) {\n if (context !== METATYPE_PROPERTY) {\n if (failedNsCheck === 'ignore') {\n return null;\n } else {\n throw new NotSupportedError(\n 'namespace for ' + context + ' is ' + metadata.namespace +\n ' the namespace of this registry is ' + this.namespace\n );\n }\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.$()\n .getMetadata()\n .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 const cloneEvent = cloneDeep(event);\n try {\n this.onAdd(cloneEvent.metaType as METADATA_TYPE, cloneEvent);\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 const failedNsCheck = get(options, 'failedNsCheckMode', 'throw');\n delete options.skipNsCheck;\n const metadata = this.getMetadata(context as METADATA_TYPE, options.target, options.propertyName ? options.propertyName : null);\n if (metadata) {\n if (metadata.namespace && metadata.namespace !== this.namespace) {\n if (!skipNsCheck) {\n if (context !== METATYPE_PROPERTY) {\n if (failedNsCheck === 'ignore') {\n return null;\n } else {\n throw new NotSupportedError(\n 'namespace for ' + context + ' is ' + metadata.namespace +\n ' the namespace of this registry is ' + this.namespace\n );\n }\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":"../.."}
|