UNPKG

@lyra/form-builder

Version:
69 lines (49 loc) 2.08 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _isObject2 = require('lodash/isObject'); var _isObject3 = _interopRequireDefault(_isObject2); var _clone2 = require('lodash/clone'); var _clone3 = _interopRequireDefault(_clone2); var _omit2 = require('lodash/omit'); var _omit3 = _interopRequireDefault(_omit2); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = apply; var _applyPatch = require('./applyPatch'); var _applyPatch2 = _interopRequireDefault(_applyPatch); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } function apply(value, patch) { const nextValue = (0, _clone3.default)(value); if (patch.path.length === 0) { // its directed to me if (patch.type === 'set') { if (!(0, _isObject3.default)(patch.value)) { // eslint-disable-line max-depth throw new Error('Cannot set value of an object to a non-object'); } return patch.value; } else if (patch.type === 'unset') { return undefined; } else if (patch.type === 'setIfMissing') { // console.log('IS IT missing?', value) return value === undefined ? patch.value : value; } throw new Error(`Invalid object operation: ${patch.type}`); } // The patch is not directed to me var _patch$path = _toArray(patch.path); const head = _patch$path[0], tail = _patch$path.slice(1); if (typeof head !== 'string') { throw new Error(`Expected field name to be a string, instad got: ${head}`); } if (tail.length === 0 && patch.type === 'unset') { return (0, _omit3.default)(nextValue, head); } nextValue[head] = (0, _applyPatch2.default)(nextValue[head], _extends({}, patch, { path: tail })); return nextValue; }