UNPKG

fluxtuate

Version:

a javascript ES7 library for handling complex data transactions

71 lines (57 loc) 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _lang = require("lodash/lang"); var _getOwnKeys = require("../../utils/getOwnKeys"); var _getOwnKeys2 = _interopRequireDefault(_getOwnKeys); var _model = require("../model"); var _model2 = _interopRequireDefault(_model); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function convert(valueType, typeProperty, typeChecks, value, parentName, parentProperty) { if (value === undefined) return undefined; if (value.modelData) { value = value.modelData; } if (!valueType) return value; if (!(0, _lang.isObject)(value)) { throw new Error("You must supply a value of object for property " + parentProperty + " in " + parentName + "!"); } if ((0, _lang.isArray)(valueType)) { if (!(0, _lang.isArray)(typeChecks) || typeChecks.length !== valueType.length) throw new Error("Type checks must be a array with the same length as value types if you are sending multiple value types for property " + parentProperty); var v = value; var propertyArray = typeProperty.split("."); for (var i = 0; i < propertyArray.length; i++) { if (!v[propertyArray[i]]) break; v = v[propertyArray[i]]; } valueType = valueType[typeChecks.indexOf(v)]; if (!valueType) throw new Error("No valid type found for property " + parentProperty); } if (valueType !== Object) { var el = void 0; //TODO: cycle trough inheritance tree to check for update function, will fail if there is a array of type if ((0, _lang.isFunction)(valueType.prototype.update)) { el = _model2.default.getInstance(valueType, parentName + "." + parentProperty); el.update(value); } else { el = valueType(value, parentName, parentProperty); if ((0, _lang.isObject)(value)) { var keys = (0, _getOwnKeys2.default)(value); keys.forEach(function (key) { el[key] = value[key]; }); } } return el; } else { return value; } } exports.default = function (valueClass, typeProperty, typeChecks) { if (!(0, _lang.isArray)(valueClass) && typeChecks) { return convert.apply(undefined, [undefined, undefined, undefined, valueClass, typeProperty, typeChecks]); } else { return convert.bind(undefined, valueClass, typeProperty, typeChecks); } };