Skip to content

Commit

Permalink
Refactoring and tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Katić committed Oct 12, 2017
1 parent 52fcdf7 commit c61976f
Show file tree
Hide file tree
Showing 6 changed files with 480 additions and 122 deletions.
1 change: 1 addition & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"parser": "babel-eslint",
"env": {
"es6": true,
"node": true,
},
"parserOptions": {
"ecmaVersion": 6,
Expand Down
108 changes: 44 additions & 64 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,23 @@ var isProps = function isProps(x) {
return false;
}
var proto = protoOf(x);
return proto && !protoOf(proto);
return !!proto && !protoOf(proto);
};

var clone = function clone(data) {
return isArray(data) ? data.slice() : Object.assign({}, data);
};

var toPathParts = function toPathParts(path) {
return isArray(path) ? path : (path || '').split('.');
if (isArray(path)) {
return path;
}

if (typeof path === 'string') {
return path.split('.');
}

return [path];
};

//---------------------------------------------------------
Expand All @@ -58,38 +67,15 @@ var PropsMatcher = function PropsMatcher(props) {
};

var Matcher = function Matcher(spec) {
if (isFunc(spec)) return spec;
if (isFunc(spec)) {
return spec;
}
var keys = Object.keys(spec);
return keys.length === 1 ? PropMatcher(keys[0], spec[keys[0]]) : PropsMatcher(spec);
};

//---------------------------------------------------------

// const findLastIndex = (array, check) => {
// let i = array.length
// while (i--) {
// if (check(array[i])) {
// return i
// }
// }
// return null
// }

// const findKey = (obj, check) => {
// for (const key in obj) {
// if (check(obj[key])) {
// return key
// }
// }
// return null
// }

// export default function find (data, check) {
// return Array.isArray(data) ? findLastIndex(data, check) : findKey(data, check)
// }

//---------------------------------------------------------

var REMOVE = exports.REMOVE = function REMOVE() {
return REMOVE;
};
Expand All @@ -112,35 +98,40 @@ var change = function change(key, val, data, original) {
return target;
};

//---------------------------------------------------------

var mapArray = function mapArray(array, f) {
var n = array.length;
var cloned = void 0;
var toRemove = false;
var ret = array;
var changed = false;
var c = 0;

for (var i = 0; i < n; ++i) {
var newVal = f(array[i], i, array);
if (newVal !== array[i]) {
if (!cloned) cloned = array.slice();
cloned[i] = newVal;
toRemove = toRemove || newVal === REMOVE;
var val = f(array[i], i, array);
if (!changed) {
if (val === array[i]) continue;
ret = array.slice();
changed = true;
c = i;
}
if (val !== REMOVE) {
ret[c++] = val;
}
}

if (toRemove) {
return cloned.filter(function (it) {
return it !== REMOVE;
});
if (changed && c < n) {
ret.length = c;
}

return cloned || array;
return ret;
};

var mapProps = function mapProps(obj, f) {
var ret = obj;

for (var key in obj) {
var newVal = f(obj[key], key, obj);
ret = change(key, newVal, ret, obj);
var val = f(obj[key], key, obj);
ret = change(key, val, ret, obj);
}

return ret;
Expand All @@ -167,7 +158,7 @@ var patch = function patch(data, props) {
};

var updatePath = function updatePath(data, pathParts, update) {
if (pathParts.length === 0) return patch(update, data);
if (pathParts.length === 0) return patch(data, update);
if (!data) return data;

var _pathParts = _toArray(pathParts),
Expand All @@ -193,26 +184,15 @@ var updatePath = function updatePath(data, pathParts, update) {
return change(part, val, data, data);
};

function update(data) {
var path = void 0,
update = void 0;

for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}

if (args.length === 1) {
update = args[0];
} else {
path = args[0];
update = args[1];
function update() {
switch (arguments.length) {
case 2:
return patch(arguments[0], arguments[1]);
case 3:
return updatePath(arguments[0], toPathParts(arguments[1]), arguments[2]);
default:
throw new TypeError('wrong number of arguments');
}

if (!path) {
return patch(data, update);
}

return updatePath(data, toPathParts(path), update);
}

var remove = exports.remove = function remove(data, path) {
Expand All @@ -223,8 +203,8 @@ var remove = exports.remove = function remove(data, path) {

var fp = function fp(f) {
return function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}

return function (data) {
Expand Down
Loading

0 comments on commit c61976f

Please sign in to comment.