diff --git a/README.md b/README.md index b5977c4..11c14fd 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ This program is free software under [MIT][mit-url] License. See the file LICENSE in this distribution for more details. [repo-url]: https://github.com/sttk/copy-props/ -[npm-img]: https://img.shields.io/badge/npm-v1.4.0-blue.svg +[npm-img]: https://img.shields.io/badge/npm-v1.4.1-blue.svg [npm-url]: https://www.npmjs.org/package/copy-props/ [mit-img]: https://img.shields.io/badge/license-MIT-green.svg [mit-url]: https://opensource.org/licenses.MIT diff --git a/package.json b/package.json index 229ce22..d5af48d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "copy-props", - "version": "1.4.0", + "version": "1.4.1", "description": "Copy properties deeply between two objects.", "main": "index.js", "files": [ diff --git a/test/web/copy-props.test.js b/test/web/copy-props.test.js index 4c21a6b..1b6d72e 100644 --- a/test/web/copy-props.test.js +++ b/test/web/copy-props.test.js @@ -86,9 +86,7 @@ function copyWithFromto(value, keyChain, nodeInfo) { for (var i = 0, n = dstKeyChains.length; i < n; i++) { var dstValue = nodeInfo.convert(value, keyChain, dstKeyChains[i]); - if (dstValue !== undefined) { - setDeep(nodeInfo.dest, dstKeyChains[i], dstValue); - } + setDeep(nodeInfo.dest, dstKeyChains[i], dstValue); } } @@ -8105,38 +8103,42 @@ module.exports = function(obj, fn, opts) { return; } - var nodeInfo = isPlainObject(opts) ? objectAssign({}, opts) : {}; - nodeInfo.depth = 0; + if (!isPlainObject(opts)) { + opts = {}; + } - forEachChild(obj, '', fn, nodeInfo); + forEachChild(obj, '', fn, 0, opts); }; -function forEachChild(node, baseKey, fn, nodeInfo) { +function forEachChild(node, baseKey, fn, depth, opts) { var keys = Object.keys(node); - if (typeof nodeInfo.sort === 'function') { - var sortedKeys = nodeInfo.sort(keys); + if (typeof opts.sort === 'function') { + var sortedKeys = opts.sort(keys); if (Array.isArray(sortedKeys)) { keys = sortedKeys; } } + depth += 1; + for (var i = 0, n = keys.length; i < n; i++) { var key = keys[i]; var keyChain = baseKey + '.' + key; var value = node[key]; - var childInfo = objectAssign({}, nodeInfo); - childInfo.index = i; - childInfo.count = n; - childInfo.depth = nodeInfo.depth + 1; - childInfo.parent = node; + var nodeInfo = objectAssign({}, opts); + nodeInfo.name = key; + nodeInfo.index = i; + nodeInfo.count = n; + nodeInfo.depth = depth; + nodeInfo.parent = node; - var notDigg = fn(value, keyChain.slice(1), childInfo); + var notDigg = fn(value, keyChain.slice(1), nodeInfo); if (notDigg || !isPlainObject(value)) { continue; } - forEachChild(value, keyChain, fn, childInfo); + forEachChild(value, keyChain, fn, depth, opts); } } diff --git a/web/copy-props.js b/web/copy-props.js index 5bc8df2..2d8d6e7 100644 --- a/web/copy-props.js +++ b/web/copy-props.js @@ -1 +1 @@ -!function r(t,n,e){function o(a,c){if(!n[a]){if(!t[a]){var f="function"==typeof require&&require;if(!c&&f)return f(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(r){var n=t[a][1][r];return o(n?n:r)},s,s.exports,r,t,n,e)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a