@blazingedge/update
Advanced tools
Comparing version 1.1.3 to 1.1.4
@@ -19,7 +19,3 @@ 'use strict'; | ||
var isProps = function isProps(z) { | ||
if (!z || (typeof z === 'undefined' ? 'undefined' : _typeof(z)) !== 'object') { | ||
return false; | ||
} | ||
var proto = protoOf(z); | ||
return !!proto && !protoOf(proto); | ||
return (typeof z === 'undefined' ? 'undefined' : _typeof(z)) === 'object' && z !== null && !protoOf(protoOf(z) || {}); | ||
}; | ||
@@ -33,3 +29,3 @@ | ||
function change(key, val, data, original, dataIsArray, removeLater) { | ||
function applyChange(key, val, data, original, dataIsArray, removeLater) { | ||
if (val === data[key] || val === REMOVE && !dataIsArray && !(key in data)) { | ||
@@ -76,3 +72,3 @@ return data; | ||
for (var i = 0; i < n; ++i) { | ||
ret = change(i, f(array[i]), ret, array, true, true); | ||
ret = applyChange(i, f(array[i]), ret, array, true, true); | ||
} | ||
@@ -91,3 +87,3 @@ | ||
var ret = keys.reduce(function (acc, key) { | ||
return change(key, f(data[key]), acc, data, dataIsArray, dataIsArray); | ||
return applyChange(key, f(data[key]), acc, data, dataIsArray, dataIsArray); | ||
}, data); | ||
@@ -102,3 +98,3 @@ | ||
var map = exports.map = function map(data, f) { | ||
var map = function map(data, f) { | ||
return isArray(data) ? mapArray(data, f) : mapProps(data, Object.keys(data), f); | ||
@@ -113,9 +109,8 @@ }; | ||
var dataIsArray = isArray(data); | ||
var ret = data; | ||
var dataIsArray = isArray(ret); | ||
for (var key in props) { | ||
var val = patch(ret[key], props[key]); | ||
ret = change(key, val, ret, data, dataIsArray, dataIsArray); | ||
var val = patch(data[key], props[key]); | ||
ret = applyChange(key, val, ret, data, dataIsArray, dataIsArray); | ||
} | ||
@@ -132,3 +127,3 @@ | ||
var ALL = exports.ALL = function ALL() { | ||
var ALL = function ALL() { | ||
return true; | ||
@@ -143,9 +138,10 @@ }; | ||
var PropsMatcher = function PropsMatcher(keys, props) { | ||
function PropsMatcher(keys, props) { | ||
var check = function check(key) { | ||
return props[key] === this[key]; | ||
}; | ||
return function (data) { | ||
return !!data && keys.every(function (key) { | ||
return props[key] === data[key]; | ||
}); | ||
return !!data && keys.every(check, data); | ||
}; | ||
}; | ||
} | ||
@@ -190,8 +186,6 @@ function toPathPart(part) { | ||
function updatePath(data, pathParts, pathIndex, update) { | ||
if (pathIndex === pathParts.length) { | ||
return patch(data, update); | ||
} | ||
function updatePath(data, parts, index, change) { | ||
if (index === parts.length) return patch(data, change); | ||
var part = pathParts[pathIndex]; | ||
var part = parts[index++]; | ||
var partIsArray = isArray(part); | ||
@@ -202,22 +196,17 @@ | ||
} else if (partIsArray || isFunc(part)) { | ||
if (!data && !partIsArray) return data; | ||
var f = pathIndex + 1 === pathParts.length && isFunc(update) ? update : function (it) { | ||
return updatePath(it, pathParts, pathIndex + 1, update); | ||
var f = index === parts.length && isFunc(change) ? change : function (it) { | ||
return updatePath(it, parts, index, change); | ||
}; | ||
if (part === ALL) { | ||
return map(data, f); | ||
} else if (partIsArray) { | ||
return mapProps(data, part, f); | ||
} else { | ||
// part is a function | ||
return map(data, function (v) { | ||
return part(v) ? f(v) : v; | ||
}); | ||
} | ||
if (partIsArray) return mapProps(data, part, f); | ||
if (!data) return data; | ||
return part === ALL ? map(data, f) : map(data, function (v) { | ||
return part(v) ? f(v) : v; | ||
}); | ||
} | ||
var val = updatePath(data[part], pathParts, pathIndex + 1, update); | ||
return change(part, val, data, data, isArray(data), false); | ||
var val = updatePath(data[part], parts, index, change); | ||
return applyChange(part, val, data, data, isArray(data), false); | ||
} | ||
@@ -224,0 +213,0 @@ |
{ | ||
"name": "@blazingedge/update", | ||
"version": "1.1.3", | ||
"version": "1.1.4", | ||
"description": "Utility for immutable deep updates of objects.", | ||
@@ -5,0 +5,0 @@ "main": "lib", |
@@ -6,9 +6,4 @@ const { isArray } = Array | ||
const isProps = (z) => { | ||
if (!z || typeof z !== 'object') { | ||
return false | ||
} | ||
const proto = protoOf(z) | ||
return !!proto && !protoOf(proto) | ||
} | ||
const isProps = (z) => typeof z === 'object' | ||
&& z !== null && !protoOf(protoOf(z) || {}) | ||
@@ -19,3 +14,3 @@ //--------------------------------------------------------- | ||
function change (key, val, data, original, dataIsArray, removeLater) { | ||
function applyChange (key, val, data, original, dataIsArray, removeLater) { | ||
if (val === data[key] || val === REMOVE && !dataIsArray && !(key in data)) { | ||
@@ -64,3 +59,3 @@ return data | ||
for (let i = 0; i < n; ++i) { | ||
ret = change(i, f(array[i]), ret, array, true, true) | ||
ret = applyChange(i, f(array[i]), ret, array, true, true) | ||
} | ||
@@ -79,3 +74,3 @@ | ||
const ret = keys.reduce((acc, key) => { | ||
return change(key, f(data[key]), acc, data, dataIsArray, dataIsArray) | ||
return applyChange(key, f(data[key]), acc, data, dataIsArray, dataIsArray) | ||
}, data) | ||
@@ -90,3 +85,6 @@ | ||
export const map = (data, f) => isArray(data) ? mapArray(data, f) : mapProps(data, Object.keys(data), f) | ||
const map = (data, f) => | ||
isArray(data) | ||
? mapArray(data, f) | ||
: mapProps(data, Object.keys(data), f) | ||
@@ -99,9 +97,8 @@ //--------------------------------------------------------- | ||
const dataIsArray = isArray(data) | ||
let ret = data | ||
const dataIsArray = isArray(ret) | ||
for (const key in props) { | ||
const val = patch(ret[key], props[key]) | ||
ret = change(key, val, ret, data, dataIsArray, dataIsArray) | ||
const val = patch(data[key], props[key]) | ||
ret = applyChange(key, val, ret, data, dataIsArray, dataIsArray) | ||
} | ||
@@ -118,8 +115,9 @@ | ||
export const ALL = () => true | ||
const ALL = () => true | ||
const PropMatcher = (key, value) => data => !!data && data[key] === value | ||
const PropsMatcher = (keys, props) => (data) => { | ||
return !!data && keys.every(key => props[key] === data[key]) | ||
function PropsMatcher (keys, props) { | ||
const check = function (key) { return props[key] === this[key] } | ||
return data => !!data && keys.every(check, data) | ||
} | ||
@@ -162,8 +160,6 @@ | ||
function updatePath (data, pathParts, pathIndex, update) { | ||
if (pathIndex === pathParts.length) { | ||
return patch(data, update) | ||
} | ||
function updatePath (data, parts, index, change) { | ||
if (index === parts.length) return patch(data, change) | ||
let part = pathParts[pathIndex] | ||
let part = parts[index++] | ||
const partIsArray = isArray(part) | ||
@@ -175,21 +171,17 @@ | ||
} else if (partIsArray || isFunc(part)) { | ||
if (!data && !partIsArray) return data | ||
const f = (index === parts.length && isFunc(change)) | ||
? change | ||
: it => updatePath(it, parts, index, change) | ||
const f = (pathIndex + 1 === pathParts.length && isFunc(update)) | ||
? update | ||
: it => updatePath(it, pathParts, pathIndex + 1, update) | ||
if (partIsArray) return mapProps(data, part, f) | ||
if (part === ALL) { | ||
return map(data, f) | ||
if (!data) return data | ||
} else if (partIsArray) { | ||
return mapProps(data, part, f) | ||
} else { // part is a function | ||
return map(data, (v) => part(v) ? f(v) : v) | ||
} | ||
return part === ALL | ||
? map(data, f) | ||
: map(data, (v) => part(v) ? f(v) : v) | ||
} | ||
const val = updatePath(data[part], pathParts, pathIndex + 1, update) | ||
return change(part, val, data, data, isArray(data), false) | ||
const val = updatePath(data[part], parts, index, change) | ||
return applyChange(part, val, data, data, isArray(data), false) | ||
} | ||
@@ -196,0 +188,0 @@ |
19528
485