warriorjs-engine
Version:
The bowels of WarriorJS
43 lines (35 loc) • 1.19 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = viewObject;
function getViewObject(object) {
return typeof object.toViewObject === 'function' ? object.toViewObject() : object;
}
function viewObject() {
var viewObjectShape = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
return function (target) {
Object.defineProperty(target.prototype, 'toViewObject', {
value: function value() {
var _this = this;
var applyShape = function applyShape(shape) {
var result = {};
Object.keys(shape).forEach(function (key) {
if (typeof shape[key] === 'function') {
var viewProperty = shape[key].call(_this);
if (viewProperty) {
result[key] = Array.isArray(viewProperty) ? viewProperty.map(getViewObject) : getViewObject(viewProperty);
} else {
result[key] = viewProperty;
}
} else {
result[key] = applyShape(shape[key]);
}
});
return result;
};
return applyShape(viewObjectShape);
}
});
};
}
;