@allgemein/schema-api
Version:
Library for schema api
96 lines • 4.38 kB
JavaScript
;
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