@allgemein/schema-api 1.5.1 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/decorators/Property.js +1 -1
- package/decorators/Property.js.map +1 -1
- package/decorators/validate/Regex.js +3 -0
- package/decorators/validate/Regex.js.map +1 -1
- package/lib/AbstractRef.d.ts +5 -1
- package/lib/AbstractRef.js +7 -1
- package/lib/AbstractRef.js.map +1 -1
- package/lib/Constants.d.ts +5 -0
- package/lib/Constants.js +6 -1
- package/lib/Constants.js.map +1 -1
- package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +5 -0
- package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -1
- package/lib/json-schema/JsonSchema7Serializer.d.ts +1 -0
- package/lib/json-schema/JsonSchema7Serializer.js +15 -2
- package/lib/json-schema/JsonSchema7Serializer.js.map +1 -1
- package/lib/options/IPropertyOptions.d.ts +4 -0
- package/lib/options/IPropertyOptions.js.map +1 -1
- package/lib/registry/AbstractRegistry.d.ts +4 -1
- package/lib/registry/AbstractRegistry.js +5 -1
- package/lib/registry/AbstractRegistry.js.map +1 -1
- package/lib/registry/DefaultNamespacedRegistry.d.ts +2 -0
- package/lib/registry/DefaultNamespacedRegistry.js +28 -20
- package/lib/registry/DefaultNamespacedRegistry.js.map +1 -1
- package/lib/registry/DefaultPropertyRef.d.ts +21 -0
- package/lib/registry/DefaultPropertyRef.js +36 -6
- package/lib/registry/DefaultPropertyRef.js.map +1 -1
- package/lib/registry/IRegistryOptions.d.ts +8 -0
- package/lib/registry/IRegistryOptions.js +4 -0
- package/lib/registry/IRegistryOptions.js.map +1 -0
- package/lib/registry/MetadataRegistry.d.ts +14 -0
- package/lib/registry/MetadataRegistry.js +23 -9
- package/lib/registry/MetadataRegistry.js.map +1 -1
- package/lib/registry/RegistryFactory.d.ts +2 -1
- package/lib/registry/RegistryFactory.js +4 -4
- package/lib/registry/RegistryFactory.js.map +1 -1
- package/package.json +13 -13
|
@@ -41,6 +41,9 @@ const AbstractRegistry_1 = require("./AbstractRegistry");
|
|
|
41
41
|
*
|
|
42
42
|
*/
|
|
43
43
|
class DefaultNamespacedRegistry extends AbstractRegistry_1.AbstractRegistry {
|
|
44
|
+
constructor(namespace, options) {
|
|
45
|
+
super(namespace, (0, lodash_1.defaults)(options || {}, { detectUnannotatedProperties: true }));
|
|
46
|
+
}
|
|
44
47
|
/**
|
|
45
48
|
* Initialize events for metadata changes on runtime
|
|
46
49
|
*/
|
|
@@ -342,30 +345,35 @@ class DefaultNamespacedRegistry extends AbstractRegistry_1.AbstractRegistry {
|
|
|
342
345
|
*/
|
|
343
346
|
createPropertiesForRef(clsRef) {
|
|
344
347
|
const cls = clsRef.getClass(true);
|
|
345
|
-
const jsonSchema = JsonSchema_1.JsonSchema.serialize(cls, { appendTarget: true });
|
|
346
348
|
const propOptions = [];
|
|
347
349
|
const metaPropOptions = MetadataRegistry_1.MetadataRegistry.$().getByContextAndTarget(Constants_1.METATYPE_PROPERTY, cls);
|
|
348
|
-
if ((
|
|
349
|
-
const
|
|
350
|
-
|
|
351
|
-
const
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
350
|
+
if (this.getOptions().detectUnannotatedProperties) {
|
|
351
|
+
const jsonSchema = JsonSchema_1.JsonSchema.serialize(cls, { appendTarget: true });
|
|
352
|
+
if ((0, JsonSchema7_1.hasClassPropertiesInDefinition)(clsRef.name, jsonSchema)) {
|
|
353
|
+
const properties = jsonSchema.definitions[clsRef.name].properties;
|
|
354
|
+
for (const k of (0, lodash_1.keys)(properties)) {
|
|
355
|
+
const property = properties[k];
|
|
356
|
+
const opts = {
|
|
357
|
+
metaType: Constants_1.METATYPE_PROPERTY,
|
|
358
|
+
namespace: clsRef.getNamespace(),
|
|
359
|
+
type: property.$target ? property.$target : property.type,
|
|
360
|
+
propertyName: k,
|
|
361
|
+
target: cls
|
|
362
|
+
};
|
|
363
|
+
if (property.default) {
|
|
364
|
+
opts.default = property.default;
|
|
365
|
+
}
|
|
366
|
+
const propMetadata = (0, lodash_1.remove)(metaPropOptions, x => x.propertyName === k);
|
|
367
|
+
if (!(0, lodash_1.isEmpty)(propMetadata)) {
|
|
368
|
+
for (const p of propMetadata) {
|
|
369
|
+
// clean namespace
|
|
370
|
+
const copy = (0, lodash_1.clone)(p);
|
|
371
|
+
delete copy.namespace;
|
|
372
|
+
(0, lodash_1.assign)(opts, copy);
|
|
373
|
+
}
|
|
366
374
|
}
|
|
375
|
+
propOptions.push(opts);
|
|
367
376
|
}
|
|
368
|
-
propOptions.push(opts);
|
|
369
377
|
}
|
|
370
378
|
}
|
|
371
379
|
const propertyOptions = propOptions.concat(metaPropOptions)
|
|
@@ -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,\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';\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 /**\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 * Apply already added entries to the metadata registry can be added to this registry\n */\n drainAlreadyAdded() {\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 }\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 jsonSchema = JsonSchema.serialize(cls, {appendTarget: true}) as any;\n const propOptions: IPropertyOptions[] = [];\n const metaPropOptions = MetadataRegistry.$().getByContextAndTarget(METATYPE_PROPERTY, cls) as IPropertyOptions[];\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 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 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, type === METATYPE_PROPERTY);\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,\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\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 * Apply already added entries to the metadata registry can be added to this registry\n */\n drainAlreadyAdded() {\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 }\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, type === METATYPE_PROPERTY);\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":"../.."}
|
|
@@ -39,6 +39,27 @@ export declare class DefaultPropertyRef extends AbstractRef implements IProperty
|
|
|
39
39
|
* Returns info if property parameter results are in classspace
|
|
40
40
|
*/
|
|
41
41
|
isReference(): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Check if property is a to an other object referring property.
|
|
44
|
+
*
|
|
45
|
+
* Note:
|
|
46
|
+
* types defined as string, must match the following conditions to be interpreted as reference to an other object:
|
|
47
|
+
* - not contain any upper case
|
|
48
|
+
* - not a defined supported type
|
|
49
|
+
*
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
42
52
|
private checkReference;
|
|
53
|
+
/**
|
|
54
|
+
* Check type given as string if it is an object type.
|
|
55
|
+
*
|
|
56
|
+
* Note:
|
|
57
|
+
* types defined as string, must match the following conditions to be interpreted as reference to an other object:
|
|
58
|
+
* - not contain any upper case
|
|
59
|
+
* - not a defined supported type
|
|
60
|
+
*
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
isReferencingType(type: string): boolean;
|
|
43
64
|
getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef;
|
|
44
65
|
}
|
|
@@ -16,8 +16,14 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
16
16
|
this.cardinality = 1;
|
|
17
17
|
this.reference = undefined;
|
|
18
18
|
AnnotationsHelper_1.AnnotationsHelper.merge(this.object, options, this.name);
|
|
19
|
+
if (options.type === Constants_1.T_ARRAY) {
|
|
20
|
+
// if array reset
|
|
21
|
+
options.type = Constants_1.T_OBJECT;
|
|
22
|
+
options.cardinality = 0;
|
|
23
|
+
options.array = true;
|
|
24
|
+
}
|
|
19
25
|
this.setOptions(options);
|
|
20
|
-
this.cardinality = (0, lodash_1.has)(options,
|
|
26
|
+
this.cardinality = (0, lodash_1.has)(options, Constants_1.C_CARDINALITY) ? options.cardinality : 1;
|
|
21
27
|
}
|
|
22
28
|
getRegistry() {
|
|
23
29
|
return RegistryFactory_1.RegistryFactory.get(this.namespace);
|
|
@@ -105,10 +111,10 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
105
111
|
return this.targetRef;
|
|
106
112
|
}
|
|
107
113
|
getType() {
|
|
108
|
-
return this.getOptions(
|
|
114
|
+
return this.getOptions(Constants_1.C_TYPE);
|
|
109
115
|
}
|
|
110
116
|
isAppended() {
|
|
111
|
-
return this.getOptions(
|
|
117
|
+
return this.getOptions(Constants_1.C_APPENDED, false);
|
|
112
118
|
}
|
|
113
119
|
/**
|
|
114
120
|
* TODO
|
|
@@ -131,7 +137,7 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
131
137
|
* Return if is identifier
|
|
132
138
|
*/
|
|
133
139
|
isIdentifier() {
|
|
134
|
-
return this.getOptions(
|
|
140
|
+
return this.getOptions(Constants_1.C_IDENTIFIER, false);
|
|
135
141
|
}
|
|
136
142
|
/**
|
|
137
143
|
* Return if is a pattern property
|
|
@@ -146,6 +152,16 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
146
152
|
this.checkReference();
|
|
147
153
|
return this.reference;
|
|
148
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if property is a to an other object referring property.
|
|
157
|
+
*
|
|
158
|
+
* Note:
|
|
159
|
+
* types defined as string, must match the following conditions to be interpreted as reference to an other object:
|
|
160
|
+
* - not contain any upper case
|
|
161
|
+
* - not a defined supported type
|
|
162
|
+
*
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
149
165
|
checkReference() {
|
|
150
166
|
if ((0, lodash_1.isUndefined)(this.reference)) {
|
|
151
167
|
this.reference = false;
|
|
@@ -154,8 +170,7 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
154
170
|
this.targetRef = (0, IEntityRef_1.isEntityRef)(type) ? type.getClassRef() : type;
|
|
155
171
|
this.reference = true;
|
|
156
172
|
}
|
|
157
|
-
else if ((0, lodash_1.isFunction)(type) ||
|
|
158
|
-
((0, lodash_1.isString)(type) && !Constants_1.JS_DATA_TYPES.find(t => (new RegExp('^' + t + ':?')).test(type.toLowerCase())))) {
|
|
173
|
+
else if ((0, lodash_1.isFunction)(type) || this.isReferencingType(type)) {
|
|
159
174
|
// try get existing class
|
|
160
175
|
const exists = ClassRef_1.ClassRef.get(type, this.getClassRef().getNamespace());
|
|
161
176
|
if (exists) {
|
|
@@ -166,6 +181,21 @@ class DefaultPropertyRef extends AbstractRef_1.AbstractRef {
|
|
|
166
181
|
}
|
|
167
182
|
return this.reference;
|
|
168
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Check type given as string if it is an object type.
|
|
186
|
+
*
|
|
187
|
+
* Note:
|
|
188
|
+
* types defined as string, must match the following conditions to be interpreted as reference to an other object:
|
|
189
|
+
* - not contain any upper case
|
|
190
|
+
* - not a defined supported type
|
|
191
|
+
*
|
|
192
|
+
* @private
|
|
193
|
+
*/
|
|
194
|
+
isReferencingType(type) {
|
|
195
|
+
return ((0, lodash_1.isString)(type) &&
|
|
196
|
+
(type.toLocaleLowerCase() !== type
|
|
197
|
+
&& !this.getSupportedDataTypes().find(t => (new RegExp('^' + t + ':?')).test(type.toLowerCase()))));
|
|
198
|
+
}
|
|
169
199
|
getClassRefFor(object, type) {
|
|
170
200
|
return this.getRegistry().getClassRefFor(object, this.metaType);
|
|
171
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/registry/DefaultPropertyRef.ts"],"names":[],"mappings":"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","file":"DefaultPropertyRef.js","sourcesContent":["import {get, has, isArray, isBoolean, isFunction, isNumber, isObjectLike, isString, isUndefined} from 'lodash';\n\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {AbstractRef} from '../AbstractRef';\nimport {IBuildOptions} from '../../api/IBuildOptions';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {\n DEFAULT_NAMESPACE,\n IMinMax,\n JS_DATA_TYPES, K_PATTERN_PROPERTY,\n METADATA_TYPE,\n METATYPE_PROPERTY, T_ARRAY, T_OBJECT, T_STRING,\n XS_ID_SEPARATOR\n} from '../Constants';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {ClassRef} from '../ClassRef';\nimport {NotYetImplementedError} from '@allgemein/base';\nimport {AnnotationsHelper} from '../AnnotationsHelper';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {RegistryFactory} from './RegistryFactory';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\n\n\nexport class DefaultPropertyRef extends AbstractRef implements IPropertyRef {\n\n cardinality: IMinMax | number = 1;\n\n reference: boolean = undefined;\n\n targetRef: IClassRef;\n\n constructor(options: IPropertyOptions = {}) {\n super(METATYPE_PROPERTY, options.propertyName, options.target, options.namespace ? options.namespace : DEFAULT_NAMESPACE);\n AnnotationsHelper.merge(this.object, options, this.name);\n this.setOptions(options);\n this.cardinality = has(options, 'cardinality') ? options.cardinality : 1;\n }\n\n\n getRegistry(): ILookupRegistry {\n return RegistryFactory.get(this.namespace);\n }\n\n /**\n * TODO\n */\n convert(data: any, options?: IBuildOptions): any {\n const sourceType = this.getType();\n if (!sourceType || !isString(sourceType)) {\n return data;\n }\n\n const jsType = sourceType.toLowerCase();\n const [baseType, variant] = jsType.split(':');\n\n switch (baseType) {\n case 'datetime':\n case 'timestamp':\n case 'date':\n return new Date(data);\n\n case 'time':\n case 'text':\n case T_STRING:\n if (isString(data)) {\n return data;\n } else if (isArray(data) && data.length === 1) {\n return data[0];\n } else if (data) {\n return JSON.stringify(data);\n } else {\n return null;\n }\n break;\n\n case 'boolean':\n if (isBoolean(data)) {\n return data;\n } else if (isNumber(data)) {\n return data > 0;\n } else if (isString(data)) {\n if (data.toLowerCase() === 'true' || data.toLowerCase() === '1') {\n return true;\n }\n return false;\n }\n break;\n\n case 'double':\n case 'number':\n if (isString(data)) {\n if (/^\\d+\\.|\\,\\d+$/.test(data)) {\n return parseFloat(data.replace(',', '.'));\n } else if (/^\\d+$/.test(data)) {\n return parseInt(data, 0);\n } else {\n }\n } else if (isNumber(data)) {\n return data;\n } else if (isBoolean(data)) {\n return data ? 1 : 0;\n } else {\n // Pass to exception\n }\n break;\n\n case 'byte':\n case 'json':\n case T_OBJECT:\n case T_ARRAY:\n return data;\n }\n\n throw new NotYetImplementedError('value \"' + data + '\" of type ' + (typeof data) + ' column type=' + jsType);\n }\n\n\n get(instance: any): any {\n return get(instance, this.name, null);\n }\n\n\n getTargetRef(): IClassRef {\n this.checkReference();\n return this.targetRef;\n }\n\n getType(): string {\n return this.getOptions('type');\n }\n\n isAppended(): boolean {\n return this.getOptions('appended', false);\n }\n\n\n /**\n * TODO\n */\n id(): string {\n return [this.getClassRef().id(), this.name].join(XS_ID_SEPARATOR);\n }\n\n /**\n * check if property parameter is an array\n */\n isCollection(): boolean {\n if (isObjectLike(this.cardinality) &&\n (<IMinMax>this.cardinality).min >= 0 &&\n (<IMinMax>this.cardinality).max >= 0) {\n return true;\n }\n return this.cardinality !== 1;\n }\n\n /**\n * Return if is identifier\n */\n isIdentifier(): boolean {\n return this.getOptions('identifier', false);\n }\n\n /**\n * Return if is a pattern property\n */\n isPattern(): boolean {\n return this.getOptions(K_PATTERN_PROPERTY, false);\n }\n\n /**\n * Returns info if property parameter results are in classspace\n */\n isReference(): boolean {\n this.checkReference();\n return this.reference;\n }\n\n private checkReference() {\n if (isUndefined(this.reference)) {\n this.reference = false;\n const type = this.getType();\n if (!isString(type) && (isClassRef(type) || isEntityRef(type))) {\n this.targetRef = isEntityRef(type) ? (type as IEntityRef).getClassRef() : type;\n this.reference = true;\n } else if (isFunction(type) ||\n (isString(type) && !JS_DATA_TYPES.find(t => (new RegExp('^' + t + ':?')).test((<string>type).toLowerCase())))) {\n // try get existing class\n const exists = ClassRef.get(type, this.getClassRef().getNamespace());\n if (exists) {\n this.targetRef = exists;\n this.reference = true;\n }\n }\n }\n return this.reference;\n }\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n return this.getRegistry().getClassRefFor(object, this.metaType);\n }\n\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/registry/DefaultPropertyRef.ts"],"names":[],"mappings":"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","file":"DefaultPropertyRef.js","sourcesContent":["import {get, has, isArray, isBoolean, isFunction, isNumber, isObjectLike, isString, isUndefined} from 'lodash';\n\nimport {IPropertyRef} from '../../api/IPropertyRef';\nimport {AbstractRef} from '../AbstractRef';\nimport {IBuildOptions} from '../../api/IBuildOptions';\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {\n C_APPENDED,\n C_CARDINALITY,\n C_IDENTIFIER,\n C_TYPE,\n DEFAULT_NAMESPACE,\n IMinMax,\n K_PATTERN_PROPERTY,\n METADATA_TYPE,\n METATYPE_PROPERTY,\n T_ARRAY,\n T_OBJECT,\n T_STRING,\n XS_ID_SEPARATOR\n} from '../Constants';\nimport {IPropertyOptions} from '../options/IPropertyOptions';\nimport {ClassRef} from '../ClassRef';\nimport {NotYetImplementedError} from '@allgemein/base';\nimport {AnnotationsHelper} from '../AnnotationsHelper';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {RegistryFactory} from './RegistryFactory';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\n\n\nexport class DefaultPropertyRef extends AbstractRef implements IPropertyRef {\n\n cardinality: IMinMax | number = 1;\n\n reference: boolean = undefined;\n\n targetRef: IClassRef;\n\n constructor(options: IPropertyOptions = {}) {\n super(METATYPE_PROPERTY, options.propertyName, options.target, options.namespace ? options.namespace : DEFAULT_NAMESPACE);\n AnnotationsHelper.merge(this.object, options, this.name);\n if (options.type === T_ARRAY) {\n // if array reset\n options.type = T_OBJECT;\n options.cardinality = 0;\n options.array = true;\n }\n this.setOptions(options);\n this.cardinality = has(options, C_CARDINALITY) ? options.cardinality : 1;\n }\n\n\n getRegistry(): ILookupRegistry {\n return RegistryFactory.get(this.namespace);\n }\n\n /**\n * TODO\n */\n convert(data: any, options?: IBuildOptions): any {\n const sourceType = this.getType();\n if (!sourceType || !isString(sourceType)) {\n return data;\n }\n\n const jsType = sourceType.toLowerCase();\n const [baseType, variant] = jsType.split(':');\n\n switch (baseType) {\n case 'datetime':\n case 'timestamp':\n case 'date':\n return new Date(data);\n\n case 'time':\n case 'text':\n case T_STRING:\n if (isString(data)) {\n return data;\n } else if (isArray(data) && data.length === 1) {\n return data[0];\n } else if (data) {\n return JSON.stringify(data);\n } else {\n return null;\n }\n break;\n\n case 'boolean':\n if (isBoolean(data)) {\n return data;\n } else if (isNumber(data)) {\n return data > 0;\n } else if (isString(data)) {\n if (data.toLowerCase() === 'true' || data.toLowerCase() === '1') {\n return true;\n }\n return false;\n }\n break;\n\n case 'double':\n case 'number':\n if (isString(data)) {\n if (/^\\d+\\.|\\,\\d+$/.test(data)) {\n return parseFloat(data.replace(',', '.'));\n } else if (/^\\d+$/.test(data)) {\n return parseInt(data, 0);\n } else {\n }\n } else if (isNumber(data)) {\n return data;\n } else if (isBoolean(data)) {\n return data ? 1 : 0;\n } else {\n // Pass to exception\n }\n break;\n\n case 'byte':\n case 'json':\n case T_OBJECT:\n case T_ARRAY:\n return data;\n }\n\n throw new NotYetImplementedError('value \"' + data + '\" of type ' + (typeof data) + ' column type=' + jsType);\n }\n\n\n get(instance: any): any {\n return get(instance, this.name, null);\n }\n\n\n getTargetRef(): IClassRef {\n this.checkReference();\n return this.targetRef;\n }\n\n getType(): string {\n return this.getOptions(C_TYPE);\n }\n\n isAppended(): boolean {\n return this.getOptions(C_APPENDED, false);\n }\n\n\n /**\n * TODO\n */\n id(): string {\n return [this.getClassRef().id(), this.name].join(XS_ID_SEPARATOR);\n }\n\n /**\n * check if property parameter is an array\n */\n isCollection(): boolean {\n if (isObjectLike(this.cardinality) &&\n (<IMinMax>this.cardinality).min >= 0 &&\n (<IMinMax>this.cardinality).max >= 0) {\n return true;\n }\n return this.cardinality !== 1;\n }\n\n /**\n * Return if is identifier\n */\n isIdentifier(): boolean {\n return this.getOptions(C_IDENTIFIER, false);\n }\n\n /**\n * Return if is a pattern property\n */\n isPattern(): boolean {\n return this.getOptions(K_PATTERN_PROPERTY, false);\n }\n\n /**\n * Returns info if property parameter results are in classspace\n */\n isReference(): boolean {\n this.checkReference();\n return this.reference;\n }\n\n\n /**\n * Check if property is a to an other object referring property.\n *\n * Note:\n * types defined as string, must match the following conditions to be interpreted as reference to an other object:\n * - not contain any upper case\n * - not a defined supported type\n *\n * @private\n */\n private checkReference() {\n if (isUndefined(this.reference)) {\n this.reference = false;\n const type = this.getType();\n if (!isString(type) && (isClassRef(type) || isEntityRef(type))) {\n this.targetRef = isEntityRef(type) ? (type as IEntityRef).getClassRef() : type;\n this.reference = true;\n } else if (isFunction(type) || this.isReferencingType(type)) {\n // try get existing class\n const exists = ClassRef.get(type, this.getClassRef().getNamespace());\n if (exists) {\n this.targetRef = exists;\n this.reference = true;\n }\n }\n }\n return this.reference;\n }\n\n\n /**\n * Check type given as string if it is an object type.\n *\n * Note:\n * types defined as string, must match the following conditions to be interpreted as reference to an other object:\n * - not contain any upper case\n * - not a defined supported type\n *\n * @private\n */\n isReferencingType(type: string) {\n return (isString(type) &&\n (type.toLocaleLowerCase() !== type\n && !this.getSupportedDataTypes().find(t => (new RegExp('^' + t + ':?')).test((<string>type).toLowerCase())))\n )\n }\n\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n return this.getRegistry().getClassRefFor(object, this.metaType);\n }\n\n\n}\n"],"sourceRoot":"../.."}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/registry/IRegistryOptions.ts"],"names":[],"mappings":"","file":"IRegistryOptions.js","sourcesContent":["export interface IRegistryOptions {\n /**\n * If class is passed without annotated properties, then scan for existing defined attributes.\n *\n * Default value is true.\n */\n detectUnannotatedProperties?: boolean;\n}\n"],"sourceRoot":"../.."}
|
|
@@ -30,11 +30,25 @@ export declare class MetadataRegistry extends EventEmitter {
|
|
|
30
30
|
* @param options
|
|
31
31
|
*/
|
|
32
32
|
add(context: METADATA_TYPE | string, options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions, trigger?: boolean): IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions;
|
|
33
|
+
/**
|
|
34
|
+
* Add cached content mostly for ClassRef instances throw AbstractRef
|
|
35
|
+
*
|
|
36
|
+
* @param context
|
|
37
|
+
* @param options
|
|
38
|
+
*/
|
|
33
39
|
addCached(context: METADATA_TYPE | string, options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions): IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions;
|
|
34
40
|
notify(eventName: string, context: string, options: any): void;
|
|
35
41
|
remove(context: METADATA_TYPE | string, c: (x: any) => boolean, trigger?: boolean): void;
|
|
36
42
|
getByContext<T extends IAbstractOptions>(context: METADATA_TYPE): T[];
|
|
37
43
|
getTargets(): any[];
|
|
44
|
+
/**
|
|
45
|
+
* Return the metadata/options for some entry (entity/property/classref/...). A copy of the original will be delivered.
|
|
46
|
+
*
|
|
47
|
+
* @param context
|
|
48
|
+
* @param target
|
|
49
|
+
* @param attributes
|
|
50
|
+
* @param propertyName
|
|
51
|
+
*/
|
|
38
52
|
getByContextAndTarget<T extends IAbstractOptions>(context: METADATA_TYPE | string, target: CLASS_TYPE | string, attributes?: 'merge' | 'assign' | 'defaults', propertyName?: string): T[];
|
|
39
53
|
mergeAttributes(context: METADATA_TYPE | string, target: CLASS_TYPE | string, data: IPropertyOptions | IEntityOptions | IObjectOptions | ISchemaOptions, mode?: 'merge' | 'assign' | 'defaults'): void;
|
|
40
54
|
getAttributesForTarget<T extends IAttributeOptions>(context: METADATA_TYPE | string, target: CLASS_TYPE | string): T[];
|
|
@@ -57,6 +57,12 @@ class MetadataRegistry extends events_1.EventEmitter {
|
|
|
57
57
|
}
|
|
58
58
|
return options;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Add cached content mostly for ClassRef instances throw AbstractRef
|
|
62
|
+
*
|
|
63
|
+
* @param context
|
|
64
|
+
* @param options
|
|
65
|
+
*/
|
|
60
66
|
addCached(context, options) {
|
|
61
67
|
options.metaType = context;
|
|
62
68
|
this.cached.push(options);
|
|
@@ -80,10 +86,18 @@ class MetadataRegistry extends events_1.EventEmitter {
|
|
|
80
86
|
getTargets() {
|
|
81
87
|
return this.targets;
|
|
82
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Return the metadata/options for some entry (entity/property/classref/...). A copy of the original will be delivered.
|
|
91
|
+
*
|
|
92
|
+
* @param context
|
|
93
|
+
* @param target
|
|
94
|
+
* @param attributes
|
|
95
|
+
* @param propertyName
|
|
96
|
+
*/
|
|
83
97
|
getByContextAndTarget(context, target, attributes = null, propertyName) {
|
|
84
|
-
const data = this.metadata.filter(x => x.metaType === context &&
|
|
98
|
+
const data = (0, lodash_1.cloneDeep)(this.metadata.filter(x => x.metaType === context &&
|
|
85
99
|
x.target === target &&
|
|
86
|
-
(propertyName ? x.propertyName === propertyName : true));
|
|
100
|
+
(propertyName ? x.propertyName === propertyName : true)));
|
|
87
101
|
if (attributes && !(0, lodash_1.isEmpty)(data)) {
|
|
88
102
|
this.mergeAttributes(context, target, data, attributes);
|
|
89
103
|
}
|
|
@@ -122,28 +136,28 @@ class MetadataRegistry extends events_1.EventEmitter {
|
|
|
122
136
|
}
|
|
123
137
|
}
|
|
124
138
|
getAttributesForTarget(context, target) {
|
|
125
|
-
return this.metadata.filter((x) => x.targetTypes &&
|
|
139
|
+
return (0, lodash_1.cloneDeep)(this.metadata.filter((x) => x.targetTypes &&
|
|
126
140
|
!x.propertyName &&
|
|
127
141
|
x.attributes &&
|
|
128
142
|
x.targetTypes.includes(context) &&
|
|
129
|
-
x.target === target);
|
|
143
|
+
x.target === target));
|
|
130
144
|
}
|
|
131
145
|
getAttributesForTargetProperty(context, target, propertyName) {
|
|
132
|
-
return this.metadata.filter((x) => x.targetTypes &&
|
|
146
|
+
return (0, lodash_1.cloneDeep)(this.metadata.filter((x) => x.targetTypes &&
|
|
133
147
|
x.propertyName === propertyName &&
|
|
134
148
|
x.attributes &&
|
|
135
149
|
x.targetTypes.includes(context) &&
|
|
136
|
-
x.target === target);
|
|
150
|
+
x.target === target));
|
|
137
151
|
}
|
|
138
152
|
getAttributesForTargetProperties(context, target) {
|
|
139
|
-
return this.metadata.filter((x) => x.targetTypes &&
|
|
153
|
+
return (0, lodash_1.cloneDeep)(this.metadata.filter((x) => x.targetTypes &&
|
|
140
154
|
x.propertyName &&
|
|
141
155
|
x.attributes &&
|
|
142
156
|
x.targetTypes.includes(context) &&
|
|
143
|
-
x.target === target);
|
|
157
|
+
x.target === target));
|
|
144
158
|
}
|
|
145
159
|
getByTarget(target) {
|
|
146
|
-
return this.metadata.filter(x => x.target === target);
|
|
160
|
+
return (0, lodash_1.cloneDeep)(this.metadata.filter(x => x.target === target));
|
|
147
161
|
}
|
|
148
162
|
createSearchFunction(find) {
|
|
149
163
|
let lookup = find;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/registry/MetadataRegistry.ts"],"names":[],"mappings":"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","file":"MetadataRegistry.js","sourcesContent":["import {assign, defaults, isEmpty, isFunction, keys, merge, remove, uniq} from 'lodash';\n\n/**\n * Handler for metadata\n */\nimport {\n C_EVENT_ADD,\n C_EVENT_REMOVE,\n CLASS_TYPE, K_TRIGGERED,\n METADATA_REGISTRY,\n METADATA_TYPE,\n METATYPE_PROPERTY,\n METATYPE_SCHEMA\n} from './../Constants';\nimport {IEntityOptions} from './../options/IEntityOptions';\nimport {IPropertyOptions} from './../options/IPropertyOptions';\nimport {ISchemaOptions} from './../options/ISchemaOptions';\nimport {IObjectOptions} from './../options/IObjectOptions';\nimport {MetadataStorage} from '@allgemein/base';\nimport {EventEmitter} from 'events';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {IAttributeOptions} from '../options/IAttributeOptions';\n\n/**\n * Registry for metadata of classes and there properties\n */\nexport class MetadataRegistry extends EventEmitter {\n\n private static INC = 0;\n\n private static $self: MetadataRegistry;\n\n private readonly metadata: IAbstractOptions[] = [];\n\n private readonly cached: IAbstractOptions[] = [];\n\n private schemas: string[] = [];\n\n private targets: any[] = [];\n\n\n constructor() {\n super();\n this.setMaxListeners(1000);\n this.targets = [];\n this.schemas = [];\n this.metadata = MetadataStorage.key(METADATA_REGISTRY);\n }\n\n\n static $() {\n if (!this.$self) {\n this.$self = new MetadataRegistry();\n }\n return this.$self;\n }\n\n\n static reset() {\n this.$self = null;\n }\n\n\n /**\n * Add typed element to the local registry\n *\n * @param context\n * @param options\n */\n add(context: METADATA_TYPE | string,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions,\n trigger: boolean = true) {\n options.metaType = context;\n\n // find?\n const id = MetadataRegistry.INC++;\n this.metadata.push(options);\n if (this.targets.indexOf(options.target) === -1) {\n this.targets.push(options.target);\n }\n if (context === METATYPE_SCHEMA) {\n if (this.schemas.indexOf(options.name) === -1) {\n this.schemas.push(options.name);\n }\n }\n\n if (trigger) {\n Object.defineProperty(options, K_TRIGGERED, {value: true});\n this.notify(C_EVENT_ADD, context, options);\n }\n\n return options;\n }\n\n addCached(context: METADATA_TYPE | string,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions) {\n options.metaType = context;\n this.cached.push(options);\n return options;\n }\n\n notify(eventName: string, context: string, options: any) {\n this.emit(eventName, context, options);\n }\n\n\n remove(context: METADATA_TYPE | string, c: (x: any) => boolean, trigger: boolean = true) {\n const removed = remove(this.metadata, x => x.metaType === context && c(x));\n if (!isEmpty(removed) && trigger) {\n this.notify(C_EVENT_REMOVE, context, removed);\n }\n }\n\n // private update(context: METADATA_TYPE) {\n // this.emit(C_EVENT_UPDATE, {});\n // }\n\n getByContext<T extends IAbstractOptions>(context: METADATA_TYPE): T[] {\n return <T[]>this.metadata.filter(x =>\n x.metaType === context\n );\n }\n\n\n getTargets() {\n return this.targets;\n }\n\n\n getByContextAndTarget<T extends IAbstractOptions>(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string,\n attributes: 'merge' | 'assign' | 'defaults' = null,\n propertyName?: string): T[] {\n const data = <T[]>this.metadata.filter(x =>\n x.metaType === context &&\n x.target === target &&\n (propertyName ? x.propertyName === propertyName : true)\n );\n if (attributes && !isEmpty(data)) {\n this.mergeAttributes(context, target, data, attributes);\n }\n return data;\n }\n\n\n mergeAttributes(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string,\n data: IPropertyOptions | IEntityOptions | IObjectOptions | ISchemaOptions,\n mode: 'merge' | 'assign' | 'defaults' = null) {\n let attributes: IAttributeOptions[] = [];\n if (context === METATYPE_PROPERTY) {\n // merge with properties\n attributes = this.getAttributesForTargetProperties(context, target);\n } else {\n attributes = this.getAttributesForTarget(context, target);\n }\n\n for (const attribute of attributes) {\n let toExtend = null;\n if (attribute.propertyName) {\n toExtend = data.find((x: IPropertyOptions) => x.metaType === METATYPE_PROPERTY && x.propertyName === attribute.propertyName);\n } else {\n toExtend = data.find((x: IAbstractOptions) => x.metaType === context);\n }\n if (toExtend) {\n switch (mode) {\n case 'assign':\n assign(toExtend, attribute.attributes);\n break;\n case 'merge':\n merge(toExtend, attribute.attributes);\n break;\n case 'defaults':\n defaults(toExtend, attribute.attributes);\n break;\n }\n\n }\n }\n }\n\n getAttributesForTarget<T extends IAttributeOptions>(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string): T[] {\n return <T[]>this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n !x.propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n );\n }\n\n getAttributesForTargetProperty<T extends IAttributeOptions>(context: METADATA_TYPE,\n target: CLASS_TYPE,\n propertyName: string): T[] {\n return <T[]>this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n x.propertyName === propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n );\n }\n\n getAttributesForTargetProperties<T extends IAttributeOptions>(context: METADATA_TYPE, target: CLASS_TYPE | string): T[] {\n return <T[]>this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n x.propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n );\n }\n\n getByTarget(target: CLASS_TYPE) {\n return this.metadata.filter(x =>\n x.target === target\n );\n }\n\n private createSearchFunction(find: any) {\n let lookup = find;\n if (!isFunction(find)) {\n const _keys = keys(find);\n lookup = (x: any) => {\n return _keys.map(k => find[k] === x[k]).reduce((previousValue, currentValue) => previousValue && currentValue);\n };\n }\n return lookup;\n }\n\n\n find(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.metadata.find((x => x.metaType === context && lookup(x)));\n }\n\n\n findCached(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.cached.find((x => x.metaType === context && lookup(x)));\n }\n\n\n filter(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.metadata.filter((x => x.context === context && lookup(x)));\n }\n\n getMetadata() {\n return this.metadata;\n }\n\n\n getCached() {\n return this.cached;\n }\n\n getSchemas() {\n return uniq(this.metadata.filter((x => x.context === METATYPE_SCHEMA)).map(x => x.name));\n }\n\n getMetadatasForSchema(schema: string) {\n return this.metadata.filter((x => x.context === METATYPE_SCHEMA && x.name === schema));\n }\n\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/registry/MetadataRegistry.ts"],"names":[],"mappings":"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","file":"MetadataRegistry.js","sourcesContent":["import {assign, cloneDeep, defaults, isEmpty, isFunction, keys, merge, remove, uniq} from 'lodash';\n\n/**\n * Handler for metadata\n */\nimport {\n C_EVENT_ADD,\n C_EVENT_REMOVE,\n CLASS_TYPE, K_TRIGGERED,\n METADATA_REGISTRY,\n METADATA_TYPE,\n METATYPE_PROPERTY,\n METATYPE_SCHEMA\n} from './../Constants';\nimport {IEntityOptions} from './../options/IEntityOptions';\nimport {IPropertyOptions} from './../options/IPropertyOptions';\nimport {ISchemaOptions} from './../options/ISchemaOptions';\nimport {IObjectOptions} from './../options/IObjectOptions';\nimport {MetadataStorage} from '@allgemein/base';\nimport {EventEmitter} from 'events';\nimport {IAbstractOptions} from '../options/IAbstractOptions';\nimport {IAttributeOptions} from '../options/IAttributeOptions';\n\n/**\n * Registry for metadata of classes and there properties\n */\nexport class MetadataRegistry extends EventEmitter {\n\n private static INC = 0;\n\n private static $self: MetadataRegistry;\n\n private readonly metadata: IAbstractOptions[] = [];\n\n private readonly cached: IAbstractOptions[] = [];\n\n private schemas: string[] = [];\n\n private targets: any[] = [];\n\n\n constructor() {\n super();\n this.setMaxListeners(1000);\n this.targets = [];\n this.schemas = [];\n this.metadata = MetadataStorage.key(METADATA_REGISTRY);\n }\n\n\n static $() {\n if (!this.$self) {\n this.$self = new MetadataRegistry();\n }\n return this.$self;\n }\n\n\n static reset() {\n this.$self = null;\n }\n\n\n /**\n * Add typed element to the local registry\n *\n * @param context\n * @param options\n */\n add(context: METADATA_TYPE | string,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions,\n trigger: boolean = true) {\n options.metaType = context;\n\n // find?\n const id = MetadataRegistry.INC++;\n this.metadata.push(options);\n if (this.targets.indexOf(options.target) === -1) {\n this.targets.push(options.target);\n }\n if (context === METATYPE_SCHEMA) {\n if (this.schemas.indexOf(options.name) === -1) {\n this.schemas.push(options.name);\n }\n }\n\n if (trigger) {\n Object.defineProperty(options, K_TRIGGERED, {value: true});\n this.notify(C_EVENT_ADD, context, options);\n }\n\n return options;\n }\n\n /**\n * Add cached content mostly for ClassRef instances throw AbstractRef\n *\n * @param context\n * @param options\n */\n addCached(context: METADATA_TYPE | string,\n options: IEntityOptions | IPropertyOptions | ISchemaOptions | IObjectOptions | IAttributeOptions) {\n options.metaType = context;\n this.cached.push(options);\n return options;\n }\n\n notify(eventName: string, context: string, options: any) {\n this.emit(eventName, context, options);\n }\n\n\n remove(context: METADATA_TYPE | string, c: (x: any) => boolean, trigger: boolean = true) {\n const removed = remove(this.metadata, x => x.metaType === context && c(x));\n if (!isEmpty(removed) && trigger) {\n this.notify(C_EVENT_REMOVE, context, removed);\n }\n }\n\n // private update(context: METADATA_TYPE) {\n // this.emit(C_EVENT_UPDATE, {});\n // }\n\n getByContext<T extends IAbstractOptions>(context: METADATA_TYPE): T[] {\n return <T[]>this.metadata.filter(x =>\n x.metaType === context\n );\n }\n\n\n getTargets() {\n return this.targets;\n }\n\n /**\n * Return the metadata/options for some entry (entity/property/classref/...). A copy of the original will be delivered.\n *\n * @param context\n * @param target\n * @param attributes\n * @param propertyName\n */\n getByContextAndTarget<T extends IAbstractOptions>(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string,\n attributes: 'merge' | 'assign' | 'defaults' = null,\n propertyName?: string): T[] {\n const data = <T[]>cloneDeep(this.metadata.filter(x =>\n x.metaType === context &&\n x.target === target &&\n (propertyName ? x.propertyName === propertyName : true)\n ));\n if (attributes && !isEmpty(data)) {\n this.mergeAttributes(context, target, data, attributes);\n }\n return data;\n }\n\n\n mergeAttributes(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string,\n data: IPropertyOptions | IEntityOptions | IObjectOptions | ISchemaOptions,\n mode: 'merge' | 'assign' | 'defaults' = null) {\n let attributes: IAttributeOptions[] = [];\n if (context === METATYPE_PROPERTY) {\n // merge with properties\n attributes = this.getAttributesForTargetProperties(context, target);\n } else {\n attributes = this.getAttributesForTarget(context, target);\n }\n\n for (const attribute of attributes) {\n let toExtend = null;\n if (attribute.propertyName) {\n toExtend = data.find((x: IPropertyOptions) => x.metaType === METATYPE_PROPERTY && x.propertyName === attribute.propertyName);\n } else {\n toExtend = data.find((x: IAbstractOptions) => x.metaType === context);\n }\n if (toExtend) {\n switch (mode) {\n case 'assign':\n assign(toExtend, attribute.attributes);\n break;\n case 'merge':\n merge(toExtend, attribute.attributes);\n break;\n case 'defaults':\n defaults(toExtend, attribute.attributes);\n break;\n }\n\n }\n }\n }\n\n getAttributesForTarget<T extends IAttributeOptions>(context: METADATA_TYPE | string,\n target: CLASS_TYPE | string): T[] {\n return <T[]>cloneDeep(this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n !x.propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n ));\n }\n\n getAttributesForTargetProperty<T extends IAttributeOptions>(context: METADATA_TYPE,\n target: CLASS_TYPE,\n propertyName: string): T[] {\n return <T[]>cloneDeep(this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n x.propertyName === propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n ));\n }\n\n getAttributesForTargetProperties<T extends IAttributeOptions>(context: METADATA_TYPE, target: CLASS_TYPE | string): T[] {\n return cloneDeep(<T[]>this.metadata.filter((x: IAttributeOptions) =>\n x.targetTypes &&\n x.propertyName &&\n x.attributes &&\n x.targetTypes.includes(context) &&\n x.target === target\n ));\n }\n\n getByTarget(target: CLASS_TYPE) {\n return cloneDeep(this.metadata.filter(x =>\n x.target === target\n ));\n }\n\n private createSearchFunction(find: any) {\n let lookup = find;\n if (!isFunction(find)) {\n const _keys = keys(find);\n lookup = (x: any) => {\n return _keys.map(k => find[k] === x[k]).reduce((previousValue, currentValue) => previousValue && currentValue);\n };\n }\n return lookup;\n }\n\n\n find(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.metadata.find((x => x.metaType === context && lookup(x)));\n }\n\n\n findCached(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.cached.find((x => x.metaType === context && lookup(x)));\n }\n\n\n filter(context: METADATA_TYPE | string, find: CLASS_TYPE) {\n const lookup = this.createSearchFunction(find);\n return this.metadata.filter((x => x.context === context && lookup(x)));\n }\n\n getMetadata() {\n return this.metadata;\n }\n\n\n getCached() {\n return this.cached;\n }\n\n getSchemas() {\n return uniq(this.metadata.filter((x => x.context === METATYPE_SCHEMA)).map(x => x.name));\n }\n\n getMetadatasForSchema(schema: string) {\n return this.metadata.filter((x => x.context === METATYPE_SCHEMA && x.name === schema));\n }\n\n\n}\n"],"sourceRoot":"../.."}
|