UNPKG

@allgemein/schema-api

Version:
96 lines 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AnnotationsHelper = void 0; const lodash_1 = require("lodash"); const ClassRef_1 = require("./ClassRef"); const Constants_1 = require("./Constants"); const base_1 = require("@allgemein/base"); class AnnotationsHelper { static forPropertyOn(object, property, options, merge) { const source = base_1.ClassUtils.getFunction(object); const classRefs = ClassRef_1.ClassRef.filter(c => c.getClass() === source); for (const ref of classRefs) { let prop = ref.getPropertyRef(property); if (prop) { const pOptions = prop.getOptions(); (0, lodash_1.defaults)(pOptions, options); if (ref.hasEntityRef()) { const eOptions = ref.getEntityRef().getOptions(); (0, lodash_1.defaults)(eOptions, options); } } } base_1.MetadataStorage.key(Constants_1.XS_ANNOTATION_OPTIONS_CACHE).push({ type: Constants_1.METATYPE_PROPERTY, object: source, property: property, options: options, merge: merge ? merge : 'default' }); } static forEntityOn(object, options, merge) { const source = base_1.ClassUtils.getFunction(object); const classRefs = ClassRef_1.ClassRef.filter(c => c.getClass() === source); for (const ref of classRefs) { if (ref) { let pOptions = ref.getOptions(); (0, lodash_1.defaults)(pOptions, options); if (ref.hasEntityRef()) { const eOptions = ref.getEntityRef().getOptions(); (0, lodash_1.defaults)(eOptions, options); } } } base_1.MetadataStorage.key(Constants_1.XS_ANNOTATION_OPTIONS_CACHE).push({ type: Constants_1.METATYPE_ENTITY, object: source, options: options, merge: merge }); } static merge(classRef, options, property = null) { if (!classRef) { return; } const object = classRef.getClass(true); const addOns = (0, lodash_1.filter)(base_1.MetadataStorage.key(Constants_1.XS_ANNOTATION_OPTIONS_CACHE), (x) => property ? (classRef.isPlaceholder ? base_1.ClassUtils.getClassName(x.object) === classRef.name : x.object === object) && x.property === property && x.type == Constants_1.METATYPE_PROPERTY : (classRef.isPlaceholder ? base_1.ClassUtils.getClassName(x.object) === classRef.name : x.object === object) && x.type == Constants_1.METATYPE_ENTITY); if (addOns) { addOns.forEach(addOn => { const mergeType = (0, lodash_1.get)(addOn, 'merge', 'default'); switch (mergeType) { case 'merge': for (const k of (0, lodash_1.keys)(addOn.options)) { if ((0, lodash_1.isUndefined)(options[k]) || (0, lodash_1.isEmpty)(options[k])) { // create if not present options[k] = addOn.options[k]; } else if ((0, lodash_1.isArray)(options[k])) { // add to array options[k].push(addOn.options[k]); } else if ((0, lodash_1.isObjectLike)(options[k]) && (0, lodash_1.isObjectLike)(addOn.options[k])) { (0, lodash_1.merge)(options[k], addOn.options[k]); } else { // create array options[k] = [options[k], addOn.options[k]]; } } break; case 'assign': (0, lodash_1.assign)(options, addOn.options); break; default: (0, lodash_1.defaults)(options, addOn.options); } }); } } } exports.AnnotationsHelper = AnnotationsHelper; //# sourceMappingURL=AnnotationsHelper.js.map