mvom
Version:
Multivalue Object Mapper
46 lines (41 loc) • 1.87 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utils = require("../utils");
var _BaseScalarArrayType = _interopRequireDefault(require("./BaseScalarArrayType"));
/** Nested Scalar Array Schema Type */
class NestedArrayType extends _BaseScalarArrayType.default {
constructor(valueSchemaType) {
super(valueSchemaType);
}
/** Get value from mv data */
get(record) {
const value = this.valueSchemaType.getFromMvData(record);
return (0, _utils.ensureArray)(value).map(itemValue => (0, _utils.ensureArray)(itemValue).map(nestedValue => this.valueSchemaType.transformFromDb(nestedValue)));
}
/** Set specified nested array value into mv record */
set(originalRecord, setValue) {
return this.valueSchemaType.setIntoMvData(originalRecord, (0, _utils.ensureArray)(setValue).map(value => (0, _utils.ensureArray)(value).map(nestedValue => this.valueSchemaType.transformToDb(nestedValue))));
}
/** Create an array of foreign key definitions that will be validated before save */
transformForeignKeyDefinitionsToDb(value) {
return (0, _utils.ensureArray)(value).flat(Infinity).map(nestedValue => this.valueSchemaType.transformForeignKeyDefinitionsToDb(nestedValue)).flat();
}
/** Validate the nested array */
validate(value) {
return (0, _utils.ensureArray)(value).reduce((acc, arrayItem, index) => {
(0, _utils.ensureArray)(arrayItem).forEach((nestedArrayItem, nestedIndex) => {
const result = this.valueSchemaType.validate(nestedArrayItem);
if (result.length > 0) {
const key = `${index}.${nestedIndex}`;
acc.set(key, result);
}
});
return acc;
}, new Map());
}
}
var _default = exports.default = NestedArrayType;