@allgemein/schema-api 1.5.17 → 1.5.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/decorators/Namespace.js +5 -1
- package/decorators/Namespace.js.map +1 -1
- package/lib/ClassRef.d.ts +4 -1
- package/lib/ClassRef.js +18 -19
- package/lib/ClassRef.js.map +1 -1
- package/lib/Constants.d.ts +1 -1
- package/lib/Constants.js.map +1 -1
- package/lib/json-schema/Constants.d.ts +1 -0
- package/lib/json-schema/Constants.js +2 -1
- package/lib/json-schema/Constants.js.map +1 -1
- package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +4 -0
- package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -1
- package/lib/json-schema/IJsonSchemaUnserializeOptions.d.ts +4 -0
- package/lib/json-schema/IJsonSchemaUnserializeOptions.js.map +1 -1
- package/lib/json-schema/JsonSchema7Serializer.js +7 -5
- package/lib/json-schema/JsonSchema7Serializer.js.map +1 -1
- package/lib/json-schema/JsonSchema7Unserializer.d.ts +1 -1
- package/lib/json-schema/JsonSchema7Unserializer.js +6 -5
- package/lib/json-schema/JsonSchema7Unserializer.js.map +1 -1
- package/lib/registry/AbstractRegistry.d.ts +6 -8
- package/lib/registry/AbstractRegistry.js +11 -21
- package/lib/registry/AbstractRegistry.js.map +1 -1
- package/lib/registry/DefaultNamespacedRegistry.d.ts +1 -1
- package/lib/registry/DefaultNamespacedRegistry.js +20 -15
- package/lib/registry/DefaultNamespacedRegistry.js.map +1 -1
- package/lib/registry/DefaultPropertyRef.js +1 -1
- package/lib/registry/DefaultPropertyRef.js.map +1 -1
- package/lib/registry/MetadataRegistry.js +2 -1
- package/lib/registry/MetadataRegistry.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 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":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/registry/DefaultPropertyRef.ts"],"names":[],"mappings":";;;AAAA,mCAA+G;AAG/G,gDAA2C;AAE3C,mDAA0D;AAC1D,4CAcsB;AAEtB,0CAAqC;AACrC,0CAAuD;AACvD,4DAAuD;AAEvD,uDAAkD;AAClD,qDAA6D;AAG7D,MAAa,kBAAmB,SAAQ,yBAAW;IAQjD,YAAY,UAA4B,EAAE;QACxC,KAAK,CAAC,6BAAiB,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,6BAAiB,CAAC,CAAC;QAP5H,gBAAW,GAAqB,CAAC,CAAC;QAElC,cAAS,GAAY,SAAS,CAAC;QAM7B,qCAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAO,EAAE;YAC5B,iBAAiB;YACjB,OAAO,CAAC,IAAI,GAAG,oBAAQ,CAAC;YACxB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;SACtB;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAA,YAAG,EAAC,OAAO,EAAE,yBAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAGD,WAAW;QACT,OAAO,iCAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAS,EAAE,OAAuB;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAA,iBAAQ,EAAC,UAAU,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9C,QAAQ,QAAQ,EAAE;YAChB,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,oBAAQ;gBACX,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;oBAClB,OAAO,IAAI,CAAC;iBACb;qBAAM,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;iBAChB;qBAAM,IAAI,IAAI,EAAE;oBACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC7B;qBAAM;oBACL,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,EAAE;oBACnB,OAAO,IAAI,CAAC;iBACb;qBAAM,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;oBACzB,OAAO,IAAI,GAAG,CAAC,CAAC;iBACjB;qBAAM,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;oBACzB,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;wBAC/D,OAAO,IAAI,CAAC;qBACb;oBACD,OAAO,KAAK,CAAC;iBACd;gBACD,MAAM;YAER,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;oBAClB,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;qBAC3C;yBAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC7B,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;qBAC1B;yBAAM;qBACN;iBACF;qBAAM,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;oBACzB,OAAO,IAAI,CAAC;iBACb;qBAAM,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,EAAE;oBAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrB;qBAAM;oBACL,oBAAoB;iBACrB;gBACD,MAAM;YAER,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,oBAAQ,CAAC;YACd,KAAK,mBAAO;gBACV,OAAO,IAAI,CAAC;SACf;QAED,MAAM,IAAI,6BAAsB,CAAC,SAAS,GAAG,IAAI,GAAG,YAAY,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,CAAC;IAC/G,CAAC;IAGD,GAAG,CAAC,QAAa;QACf,OAAO,IAAA,YAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAGD,YAAY;QACV,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAM,CAAC,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAGD;;OAEG;IACH,EAAE;QACA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,2BAAe,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,IAAA,qBAAY,EAAC,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,CAAC,WAAY,CAAC,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAY,CAAC,GAAG,IAAI,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,wBAAY,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,8BAAkB,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAGD;;;;;;;;;OASG;IACK,cAAc;QACpB,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,sBAAU,EAAC,IAAI,CAAC,IAAI,IAAA,wBAAW,EAAC,IAAI,CAAC,CAAC,EAAE;gBAC9D,IAAI,CAAC,SAAS,GAAG,IAAA,wBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;iBAAM,IAAI,IAAA,mBAAU,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC3D,yBAAyB;gBACzB,MAAM,MAAM,GAAG,mBAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE,EAAC,cAAc,EAAE,IAAI,EAAC,CAAC,CAAC;gBAC7F,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;oBACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;aACF;SACF;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAGD;;;;;;;;;OASG;IACH,iBAAiB,CAAC,IAAY;QAC5B,OAAO,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC;YACpB,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;mBAC7B,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAU,IAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAC/G,CAAA;IACH,CAAC;IAGD,cAAc,CAAC,MAAqC,EAAE,IAAmB;QACvE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CAGF;AAtND,gDAsNC","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(), {checkNamespace: true});\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":"../.."}
|
|
@@ -8,6 +8,7 @@ const lodash_1 = require("lodash");
|
|
|
8
8
|
const Constants_1 = require("./../Constants");
|
|
9
9
|
const base_1 = require("@allgemein/base");
|
|
10
10
|
const events_1 = require("events");
|
|
11
|
+
const ClassRef_1 = require("../ClassRef");
|
|
11
12
|
/**
|
|
12
13
|
* Registry for metadata of classes and there properties
|
|
13
14
|
*/
|
|
@@ -96,7 +97,7 @@ class MetadataRegistry extends events_1.EventEmitter {
|
|
|
96
97
|
*/
|
|
97
98
|
getByContextAndTarget(context, target, attributes = null, propertyName) {
|
|
98
99
|
const data = (0, lodash_1.cloneDeep)(this.metadata.filter(x => x.metaType === context &&
|
|
99
|
-
x.target === target &&
|
|
100
|
+
((0, lodash_1.isFunction)(target) ? x.target === target : ClassRef_1.ClassRef.getClassName(x.target) === target) &&
|
|
100
101
|
(propertyName ? x.propertyName === propertyName : true)));
|
|
101
102
|
if (attributes && !(0, lodash_1.isEmpty)(data)) {
|
|
102
103
|
this.mergeAttributes(context, target, data, attributes);
|
|
@@ -1 +1 @@
|
|
|
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":"../.."}
|
|
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';\nimport {ClassRef} from \"../ClassRef\";\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 (isFunction(target) ? x.target === target : ClassRef.getClassName(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":"../.."}
|