diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6244e1b
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,7 @@
+root = true
+
+[*]
+indent_style = tab
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 8dfabbd..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,3 +0,0 @@
-test/
-.gitignore
-.travis.yml
diff --git a/debian/changelog b/debian/changelog
index 6714fe1..d9bbf77 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+node-deepmerge (4.2.2+~1.1.1+git20211207.1.e5a2771-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 27 Mar 2022 08:27:52 -0000
+
 node-deepmerge (4.2.2+~1.1.1-1) unstable; urgency=medium
 
   * Set upstream metadata fields: Bug-Submit.
diff --git a/debian/patches/drop-legacy-node-resolve.patch b/debian/patches/drop-legacy-node-resolve.patch
index df88495..a8d69eb 100644
--- a/debian/patches/drop-legacy-node-resolve.patch
+++ b/debian/patches/drop-legacy-node-resolve.patch
@@ -1,8 +1,10 @@
 
 Forwarded: https://github.com/TehShrike/deepmerge/pull/222
 
---- a/rollup.config.js
-+++ b/rollup.config.js
+Index: node-deepmerge/rollup.config.js
+===================================================================
+--- node-deepmerge.orig/rollup.config.js
++++ node-deepmerge/rollup.config.js
 @@ -1,5 +1,5 @@
 -import resolve from 'rollup-plugin-node-resolve'
 -import commonjs from 'rollup-plugin-commonjs'
diff --git a/is-mergeable-object/index.d.ts b/is-mergeable-object/index.d.ts
deleted file mode 100644
index fe0278f..0000000
--- a/is-mergeable-object/index.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-declare function isMergeableObject(value: any): boolean;
-
-export default isMergeableObject;
diff --git a/is-mergeable-object/index.js b/is-mergeable-object/index.js
deleted file mode 100644
index 762068b..0000000
--- a/is-mergeable-object/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-module.exports = function isMergeableObject(value) {
-	return isNonNullObject(value)
-		&& !isSpecial(value)
-}
-
-function isNonNullObject(value) {
-	return !!value && typeof value === 'object'
-}
-
-function isSpecial(value) {
-	var stringValue = Object.prototype.toString.call(value)
-
-	return stringValue === '[object RegExp]'
-		|| stringValue === '[object Date]'
-		|| isReactElement(value)
-}
-
-// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
-var canUseSymbol = typeof Symbol === 'function' && Symbol.for
-var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7
-
-function isReactElement(value) {
-	return value.$$typeof === REACT_ELEMENT_TYPE
-}
diff --git a/is-mergeable-object/package-lock.json b/is-mergeable-object/package-lock.json
deleted file mode 100644
index cc30dfa..0000000
--- a/is-mergeable-object/package-lock.json
+++ /dev/null
@@ -1,135 +0,0 @@
-{
-  "name": "is-mergeable-object",
-  "version": "1.1.1",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-      "dev": true
-    },
-    "escodegen": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
-      "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
-      "dev": true,
-      "requires": {
-        "esprima": "^3.1.3",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        }
-      }
-    },
-    "esprima": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-      "dev": true
-    },
-    "estraverse": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "jsmd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/jsmd/-/jsmd-1.0.1.tgz",
-      "integrity": "sha512-fcNxki98MSYdJyWj9jjbSrQkd+ptYLRgb3HgLMZxALI9TznqbqmTImBhWei2GkOSerX84Ve8Swq6AYqCrti8dw==",
-      "dev": true,
-      "requires": {
-        "escodegen": "^1.9.1",
-        "esprima": "^2.7.3",
-        "estraverse": "^4.2.0",
-        "marked": "0.6.2",
-        "v8-argv": "github:jkroso/v8-argv#1.1.1"
-      }
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
-    "marked": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz",
-      "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==",
-      "dev": true
-    },
-    "optionator": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
-      }
-    },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-      "dev": true
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "optional": true
-    },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2"
-      }
-    },
-    "v8-argv": {
-      "version": "github:jkroso/v8-argv#284f84379e292eb956a5e7b66fb953ec4974385e",
-      "from": "github:jkroso/v8-argv#1.1.1",
-      "dev": true
-    },
-    "wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-      "dev": true
-    }
-  }
-}
diff --git a/is-mergeable-object/package.json b/is-mergeable-object/package.json
deleted file mode 100644
index 3bc0061..0000000
--- a/is-mergeable-object/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "name": "is-mergeable-object",
-  "version": "1.1.1",
-  "description": "Check whether or not a value is an object that makes sense to iterate over",
-  "main": "index.js",
-  "types": "index.d.ts",
-  "scripts": {
-    "test": "jsmd readme.md"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/TehShrike/is-mergeable-object.git"
-  },
-  "keywords": [
-    "object",
-    "iterate",
-    "recursive",
-    "merge",
-    "deep"
-  ],
-  "author": "TehShrike",
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/TehShrike/is-mergeable-object/issues"
-  },
-  "homepage": "https://github.com/TehShrike/is-mergeable-object#readme",
-  "devDependencies": {
-    "jsmd": "^1.0.1"
-  }
-}
diff --git a/is-mergeable-object/readme.md b/is-mergeable-object/readme.md
deleted file mode 100644
index f443872..0000000
--- a/is-mergeable-object/readme.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# is-mergeable-object
-
-<!--js
-const isMergeableObject = require('./')
--->
-
-The biggest difficulty deep merge libraries run into is figuring out which properties of an object should be recursively iterated over.
-
-This module contains the algorithm used by [`deepmerge`](https://github.com/KyleAMathews/deepmerge/).
-
-<!--js
-const someReactElement = {
-	$$typeof: Symbol.for('react.element')
-}
--->
-
-```js
-isMergeableObject(null) // => false
-
-isMergeableObject({}) // => true
-
-isMergeableObject(new RegExp('wat')) // => false
-
-isMergeableObject(undefined) // => false
-
-isMergeableObject(new Object()) // => true
-
-isMergeableObject(new Date()) // => false
-
-isMergeableObject(someReactElement) // => false
-```
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index c112ccb..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,686 +0,0 @@
-{
-  "name": "deepmerge",
-  "version": "4.2.2",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "@types/estree": {
-      "version": "0.0.39",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
-      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "8.10.54",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz",
-      "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==",
-      "dev": true
-    },
-    "@types/resolve": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
-      "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "acorn": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
-      "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
-      "dev": true
-    },
-    "arrify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-      "dev": true
-    },
-    "builtin-modules": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
-      "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
-      "dev": true
-    },
-    "commander": {
-      "version": "2.20.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
-      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
-      "dev": true
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "deep-equal": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
-      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
-      "dev": true
-    },
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-      "dev": true
-    },
-    "define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
-      "requires": {
-        "object-keys": "^1.0.12"
-      }
-    },
-    "defined": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
-      "dev": true
-    },
-    "es-abstract": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
-      "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
-      "dev": true,
-      "requires": {
-        "es-to-primitive": "^1.2.0",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.0",
-        "is-callable": "^1.1.4",
-        "is-regex": "^1.0.4",
-        "object-inspect": "^1.6.0",
-        "object-keys": "^1.1.1",
-        "string.prototype.trimleft": "^2.1.0",
-        "string.prototype.trimright": "^2.1.0"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
-      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      }
-    },
-    "escodegen": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
-      "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
-      "dev": true,
-      "requires": {
-        "esprima": "^3.1.3",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        }
-      }
-    },
-    "esprima": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-      "dev": true
-    },
-    "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true
-    },
-    "estree-walker": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
-      "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "for-each": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
-      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.3"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "glob": {
-      "version": "7.1.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-      "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-      "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      }
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "has-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
-      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
-      "dev": true
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "is-callable": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
-      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
-      "dev": true
-    },
-    "is-date-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
-      "dev": true
-    },
-    "is-mergeable-object": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.0.tgz",
-      "integrity": "sha512-JfyDDwUdtS4yHCgUpxOyKB9dnfZ0gecufxB0eytX6BmSXSE+8dbxDGt+V7CNRIRJ9sYFV/WQt2KJG6hNob2sBw==",
-      "dev": true
-    },
-    "is-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
-      "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
-      "dev": true
-    },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "isobject": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-          "dev": true
-        }
-      }
-    },
-    "is-reference": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz",
-      "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==",
-      "dev": true,
-      "requires": {
-        "@types/estree": "0.0.39"
-      }
-    },
-    "is-regex": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
-      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.1"
-      }
-    },
-    "is-symbol": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
-      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.0"
-      }
-    },
-    "jsmd": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/jsmd/-/jsmd-1.0.2.tgz",
-      "integrity": "sha512-mrQ80ysClsuw4QASa7JcjpwgTADBclo9LgIPDERD99tsfVcXGEHjkX50Q9N0NSmX1Zq3xxQYAA8fuN9GHk1Beg==",
-      "dev": true,
-      "requires": {
-        "escodegen": "^1.9.1",
-        "esprima": "^2.7.3",
-        "estraverse": "^4.2.0",
-        "marked": "^0.7.0",
-        "v8-argv": "github:jkroso/v8-argv#1.1.1"
-      }
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
-    "magic-string": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz",
-      "integrity": "sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==",
-      "dev": true,
-      "requires": {
-        "sourcemap-codec": "^1.4.4"
-      }
-    },
-    "make-error": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
-      "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
-      "dev": true
-    },
-    "marked": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
-      "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-      "dev": true
-    },
-    "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-      "dev": true,
-      "requires": {
-        "minimist": "0.0.8"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        }
-      }
-    },
-    "object-inspect": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
-      "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
-      "dev": true
-    },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "optionator": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
-      }
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-      "dev": true
-    },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-      "dev": true
-    },
-    "resolve": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
-      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
-      "dev": true,
-      "requires": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "resumer": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
-      "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
-      "dev": true,
-      "requires": {
-        "through": "~2.3.4"
-      }
-    },
-    "rollup": {
-      "version": "1.23.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.23.1.tgz",
-      "integrity": "sha512-95C1GZQpr/NIA0kMUQmSjuMDQ45oZfPgDBcN0yZwBG7Kee//m7H68vgIyg+SPuyrTZ5PrXfyLK80OzXeKG5dAA==",
-      "dev": true,
-      "requires": {
-        "@types/estree": "*",
-        "@types/node": "*",
-        "acorn": "^7.1.0"
-      }
-    },
-    "rollup-plugin-commonjs": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz",
-      "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==",
-      "dev": true,
-      "requires": {
-        "estree-walker": "^0.6.1",
-        "is-reference": "^1.1.2",
-        "magic-string": "^0.25.2",
-        "resolve": "^1.11.0",
-        "rollup-pluginutils": "^2.8.1"
-      }
-    },
-    "rollup-plugin-node-resolve": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
-      "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
-      "dev": true,
-      "requires": {
-        "@types/resolve": "0.0.8",
-        "builtin-modules": "^3.1.0",
-        "is-module": "^1.0.0",
-        "resolve": "^1.11.1",
-        "rollup-pluginutils": "^2.8.1"
-      }
-    },
-    "rollup-pluginutils": {
-      "version": "2.8.2",
-      "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
-      "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
-      "dev": true,
-      "requires": {
-        "estree-walker": "^0.6.1"
-      }
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true
-    },
-    "source-map-support": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
-      "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
-      "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "sourcemap-codec": {
-      "version": "1.4.6",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
-      "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
-      "dev": true
-    },
-    "string.prototype.trim": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
-      "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.5.0",
-        "function-bind": "^1.0.2"
-      }
-    },
-    "string.prototype.trimleft": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
-      "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "function-bind": "^1.1.1"
-      }
-    },
-    "string.prototype.trimright": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
-      "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "function-bind": "^1.1.1"
-      }
-    },
-    "tape": {
-      "version": "4.11.0",
-      "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz",
-      "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==",
-      "dev": true,
-      "requires": {
-        "deep-equal": "~1.0.1",
-        "defined": "~1.0.0",
-        "for-each": "~0.3.3",
-        "function-bind": "~1.1.1",
-        "glob": "~7.1.4",
-        "has": "~1.0.3",
-        "inherits": "~2.0.4",
-        "minimist": "~1.2.0",
-        "object-inspect": "~1.6.0",
-        "resolve": "~1.11.1",
-        "resumer": "~0.0.0",
-        "string.prototype.trim": "~1.1.2",
-        "through": "~2.3.8"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "1.11.1",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
-          "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
-          "dev": true,
-          "requires": {
-            "path-parse": "^1.0.6"
-          }
-        }
-      }
-    },
-    "through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-      "dev": true
-    },
-    "ts-node": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
-      "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
-      "dev": true,
-      "requires": {
-        "arrify": "^1.0.0",
-        "buffer-from": "^1.1.0",
-        "diff": "^3.1.0",
-        "make-error": "^1.1.1",
-        "minimist": "^1.2.0",
-        "mkdirp": "^0.5.1",
-        "source-map-support": "^0.5.6",
-        "yn": "^2.0.0"
-      },
-      "dependencies": {
-        "diff": {
-          "version": "3.5.0",
-          "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
-          "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
-          "dev": true
-        }
-      }
-    },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2"
-      }
-    },
-    "typescript": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.2.tgz",
-      "integrity": "sha1-YGAiUIR5tV/6NotY/uljoD39eww=",
-      "dev": true
-    },
-    "uglify-js": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz",
-      "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==",
-      "dev": true,
-      "requires": {
-        "commander": "2.20.0",
-        "source-map": "~0.6.1"
-      }
-    },
-    "v8-argv": {
-      "version": "github:jkroso/v8-argv#284f84379e292eb956a5e7b66fb953ec4974385e",
-      "from": "github:jkroso/v8-argv#1.1.1",
-      "dev": true
-    },
-    "wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-      "dev": true
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "yn": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
-      "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
-      "dev": true
-    }
-  }
-}
diff --git a/readme.md b/readme.md
index b6a785a..7dfa920 100644
--- a/readme.md
+++ b/readme.md
@@ -209,29 +209,29 @@ It may also return undefined, in which case the default merge behaviour will be
 
 ```js
 const alex = {
-    name: {
-        first: 'Alex',
-        last: 'Alexson'
-    },
-    pets: ['Cat', 'Parrot']
+	name: {
+		first: 'Alex',
+		last: 'Alexson'
+	},
+	pets: ['Cat', 'Parrot']
 }
 
 const tony = {
-    name: {
-        first: 'Tony',
-        last: 'Tonison'
-    },
-    pets: ['Dog']
+	name: {
+		first: 'Tony',
+		last: 'Tonison'
+	},
+	pets: ['Dog']
 }
 
 const mergeNames = (nameA, nameB) => `${nameA.first} and ${nameB.first}`
 
 const options = {
-    customMerge: (key) => {
-        if (key === 'name') {
-            return mergeNames
-        }
-    }
+	customMerge: (key) => {
+		if (key === 'name') {
+			return mergeNames
+		}
+	}
 }
 
 const result = merge(alex, tony, options)
diff --git a/test/custom-array-merge.js b/test/custom-array-merge.js
deleted file mode 100644
index 0a81100..0000000
--- a/test/custom-array-merge.js
+++ /dev/null
@@ -1,70 +0,0 @@
-var merge = require('../')
-var test = require('tape')
-
-test('custom merge array', function(t) {
-	var mergeFunctionCalled = false
-	function overwriteMerge(target, source, options) {
-		mergeFunctionCalled = true
-		t.equal(options.arrayMerge, overwriteMerge)
-
-		return source
-	}
-	const destination = {
-		someArray: [ 1, 2 ],
-		someObject: { what: 'yes' },
-	}
-	const source = {
-		someArray: [ 1, 2, 3 ],
-	}
-
-	const actual = merge(destination, source, { arrayMerge: overwriteMerge })
-	const expected = {
-		someArray: [ 1, 2, 3 ],
-		someObject: { what: 'yes' },
-	}
-
-	t.ok(mergeFunctionCalled)
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-test('merge top-level arrays', function(t) {
-	function overwriteMerge(a, b) {
-		return b
-	}
-	var actual = merge([ 1, 2 ], [ 1, 2 ], { arrayMerge: overwriteMerge })
-	var expected = [ 1, 2 ]
-
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-test('cloner function is available for merge functions to use', function(t) {
-	var customMergeWasCalled = false
-	function cloneMerge(target, source, options) {
-		customMergeWasCalled = true
-		t.ok(options.cloneUnlessOtherwiseSpecified, 'cloner function is available')
-		return target.concat(source).map(function(element) {
-			return options.cloneUnlessOtherwiseSpecified(element, options)
-		})
-	}
-
-	var src = {
-		key1: [ 'one', 'three' ],
-		key2: [ 'four' ],
-	}
-	var target = {
-		key1: [ 'one', 'two' ],
-	}
-
-	var expected = {
-		key1: [ 'one', 'two', 'one', 'three' ],
-		key2: [ 'four' ],
-	}
-
-	t.deepEqual(merge(target, src, { arrayMerge: cloneMerge }), expected)
-	t.ok(customMergeWasCalled)
-	t.ok(Array.isArray(merge(target, src).key1))
-	t.ok(Array.isArray(merge(target, src).key2))
-	t.end()
-})
diff --git a/test/custom-is-mergeable-object.js b/test/custom-is-mergeable-object.js
deleted file mode 100644
index ea247ab..0000000
--- a/test/custom-is-mergeable-object.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var merge = require('../')
-var test = require('tape')
-
-test('isMergeableObject function copying object over object', function(t) {
-	var src = { key: { isMergeable: false }, baz: 'yes' }
-	var target = { key: { foo: 'wat' }, baz: 'whatever' }
-
-	function isMergeableObject(object) {
-		return object && typeof value === 'object' && object.isMergeable !== false
-	}
-
-	var res = merge(target, src, {
-		isMergeableObject: isMergeableObject
-	})
-
-	t.deepEqual(res, { key: { isMergeable: false }, baz: 'yes' })
-	t.equal(res.key, src.key, 'Object has the same identity and was not cloned')
-	t.end()
-})
-
-test('isMergeableObject function copying object over nothing', function(t) {
-	var src = { key: { isMergeable: false, foo: 'bar' }, baz: 'yes' }
-	var target = { baz: 'whatever' }
-
-	function isMergeableObject(object) {
-		return object && typeof value === 'object' && object.isMergeable !== false
-	}
-
-	var res = merge(target, src, {
-		isMergeableObject: isMergeableObject
-	})
-
-	t.deepEqual(res, { key: { isMergeable: false, foo: 'bar' }, baz: 'yes' })
-	t.equal(res.key, src.key, 'Object has the same identity and was not cloned')
-	t.end()
-})
diff --git a/test/merge-all.js b/test/merge-all.js
deleted file mode 100644
index 4627e77..0000000
--- a/test/merge-all.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var merge = require('../')
-var test = require('tape')
-
-test('throw error if first argument is not an array', function(t) {
-	t.throws(merge.all.bind(null, { example: true }, { another: '2' }), Error)
-	t.end()
-})
-
-test('return an empty object if first argument is an array with no elements', function(t) {
-	t.deepEqual(merge.all([]), {})
-	t.end()
-})
-
-test('Work just fine if first argument is an array with least than two elements', function(t) {
-	var actual = merge.all([{ example: true }])
-	var expected = { example: true }
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-test('execute correctly if options object were not passed', function(t) {
-	var arrayToMerge = [{ example: true }, { another: '123' }]
-	t.doesNotThrow(merge.all.bind(null, arrayToMerge))
-	t.end()
-})
-
-test('execute correctly if options object were passed', function(t) {
-	var arrayToMerge = [{ example: true }, { another: '123' }]
-	t.doesNotThrow(merge.all.bind(null, arrayToMerge, { clone: true }))
-	t.end()
-})
-
-test('invoke merge on every item in array should result with all props', function(t) {
-	var firstObject = { first: true }
-	var secondObject = { second: false }
-	var thirdObject = { third: 123 }
-	var fourthObject = { fourth: 'some string' }
-
-	var mergedObject = merge.all([ firstObject, secondObject, thirdObject, fourthObject ])
-
-	t.ok(mergedObject.first === true)
-	t.ok(mergedObject.second === false)
-	t.ok(mergedObject.third === 123)
-	t.ok(mergedObject.fourth === 'some string')
-	t.end()
-})
-
-test('invoke merge on every item in array with clone should clone all elements', function(t) {
-	var firstObject = { a: { d: 123 } }
-	var secondObject = { b: { e: true } }
-	var thirdObject = { c: { f: 'string' } }
-
-	var mergedWithClone = merge.all([ firstObject, secondObject, thirdObject ], { clone: true })
-
-	t.notEqual(mergedWithClone.a, firstObject.a)
-	t.notEqual(mergedWithClone.b, secondObject.b)
-	t.notEqual(mergedWithClone.c, thirdObject.c)
-
-	t.end()
-})
-
-test('invoke merge on every item in array clone=false should not clone all elements', function(t) {
-	var firstObject = { a: { d: 123 } }
-	var secondObject = { b: { e: true } }
-	var thirdObject = { c: { f: 'string' } }
-
-	var mergedWithoutClone = merge.all([ firstObject, secondObject, thirdObject ], { clone: false })
-
-	t.equal(mergedWithoutClone.a, firstObject.a)
-	t.equal(mergedWithoutClone.b, secondObject.b)
-	t.equal(mergedWithoutClone.c, thirdObject.c)
-
-	t.end()
-})
-
-
-test('invoke merge on every item in array without clone should clone all elements', function(t) {
-	var firstObject = { a: { d: 123 } }
-	var secondObject = { b: { e: true } }
-	var thirdObject = { c: { f: 'string' } }
-
-	var mergedWithoutClone = merge.all([ firstObject, secondObject, thirdObject ])
-
-	t.notEqual(mergedWithoutClone.a, firstObject.a)
-	t.notEqual(mergedWithoutClone.b, secondObject.b)
-	t.notEqual(mergedWithoutClone.c, thirdObject.c)
-
-	t.end()
-})
diff --git a/test/merge.js b/test/merge.js
deleted file mode 100644
index fa2ac5b..0000000
--- a/test/merge.js
+++ /dev/null
@@ -1,669 +0,0 @@
-var merge = require('../')
-var test = require('tape')
-
-test('add keys in target that do not exist at the root', function(t) {
-	var src = { key1: 'value1', key2: 'value2' }
-	var target = {}
-
-	var res = merge(target, src)
-
-	t.deepEqual(target, {}, 'merge should be immutable')
-	t.deepEqual(res, src)
-	t.end()
-})
-
-test('merge existing simple keys in target at the roots', function(t) {
-	var src = { key1: 'changed', key2: 'value2' }
-	var target = { key1: 'value1', key3: 'value3' }
-
-	var expected = {
-		key1: 'changed',
-		key2: 'value2',
-		key3: 'value3',
-	}
-
-	t.deepEqual(target, { key1: 'value1', key3: 'value3' })
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('merge nested objects into target', function(t) {
-	var src = {
-		key1: {
-			subkey1: 'changed',
-			subkey3: 'added',
-		},
-	}
-	var target = {
-		key1: {
-			subkey1: 'value1',
-			subkey2: 'value2',
-		},
-	}
-
-	var expected = {
-		key1: {
-			subkey1: 'changed',
-			subkey2: 'value2',
-			subkey3: 'added',
-		},
-	}
-
-	t.deepEqual(target, {
-		key1: {
-			subkey1: 'value1',
-			subkey2: 'value2',
-		},
-	})
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('replace simple key with nested object in target', function(t) {
-	var src = {
-		key1: {
-			subkey1: 'subvalue1',
-			subkey2: 'subvalue2',
-		},
-	}
-	var target = {
-		key1: 'value1',
-		key2: 'value2',
-	}
-
-	var expected = {
-		key1: {
-			subkey1: 'subvalue1',
-			subkey2: 'subvalue2',
-		},
-		key2: 'value2',
-	}
-
-	t.deepEqual(target, { key1: 'value1', key2: 'value2' })
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should add nested object in target', function(t) {
-	var src = {
-		"b": {
-			"c": {},
-		},
-	}
-
-	var target = {
-		"a": {},
-	}
-
-	var expected = {
-		"a": {},
-		"b": {
-			"c": {},
-		},
-	}
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should clone source and target', function(t) {
-	var src = {
-		"b": {
-			"c": "foo",
-		},
-	}
-
-	var target = {
-		"a": {
-			"d": "bar",
-		},
-	}
-
-	var expected = {
-		"a": {
-			"d": "bar",
-		},
-		"b": {
-			"c": "foo",
-		},
-	}
-
-	var merged = merge(target, src, { clone: true })
-
-	t.deepEqual(merged, expected)
-
-	t.notEqual(merged.a, target.a)
-	t.notEqual(merged.b, src.b)
-
-	t.end()
-})
-
-test('should clone source and target', function(t) {
-	var src = {
-		"b": {
-			"c": "foo",
-		},
-	}
-
-	var target = {
-		"a": {
-			"d": "bar",
-		},
-	}
-
-	var merged = merge(target, src)
-	t.notEqual(merged.a, target.a)
-	t.notEqual(merged.b, src.b)
-
-	t.end()
-})
-
-test('should replace object with simple key in target', function(t) {
-	var src = { key1: 'value1' }
-	var target = {
-		key1: {
-			subkey1: 'subvalue1',
-			subkey2: 'subvalue2',
-		},
-		key2: 'value2',
-	}
-
-	var expected = { key1: 'value1', key2: 'value2' }
-
-	t.deepEqual(target, {
-		key1: {
-			subkey1: 'subvalue1',
-			subkey2: 'subvalue2',
-		},
-		key2: 'value2',
-	})
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should replace objects with arrays', function(t) {
-	var target = { key1: { subkey: 'one' } }
-
-	var src = { key1: [ 'subkey' ] }
-
-	var expected = { key1: [ 'subkey' ] }
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should replace arrays with objects', function(t) {
-	var target = { key1: [ "subkey" ] }
-
-	var src = { key1: { subkey: 'one' } }
-
-	var expected = { key1: { subkey: 'one' } }
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should replace dates with arrays', function(t) {
-	var target = { key1: new Date() }
-
-	var src = { key1: [ "subkey" ] }
-
-	var expected = { key1: [ "subkey" ] }
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should replace null with arrays', function(t) {
-	var target = {
-		key1: null,
-	}
-
-	var src = {
-		key1: [ "subkey" ],
-	}
-
-	var expected = {
-		key1: [ "subkey" ],
-	}
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should work on simple array', function(t) {
-	var src = [ 'one', 'three' ]
-	var target = [ 'one', 'two' ]
-
-	var expected = [ 'one', 'two', 'one', 'three' ]
-
-	t.deepEqual(merge(target, src), expected)
-	t.ok(Array.isArray(merge(target, src)))
-	t.end()
-})
-
-test('should work on another simple array', function(t) {
-	var target = [ "a1", "a2", "c1", "f1", "p1" ]
-	var src = [ "t1", "s1", "c2", "r1", "p2", "p3" ]
-
-	var expected = [ "a1", "a2", "c1", "f1", "p1", "t1", "s1", "c2", "r1", "p2", "p3" ]
-	t.deepEqual(target, [ "a1", "a2", "c1", "f1", "p1" ])
-	t.deepEqual(merge(target, src), expected)
-	t.ok(Array.isArray(merge(target, src)))
-	t.end()
-})
-
-test('should work on array properties', function(t) {
-	var src = {
-		key1: [ 'one', 'three' ],
-		key2: [ 'four' ],
-	}
-	var target = {
-		key1: [ 'one', 'two' ],
-	}
-
-	var expected = {
-		key1: [ 'one', 'two', 'one', 'three' ],
-		key2: [ 'four' ],
-	}
-
-	t.deepEqual(merge(target, src), expected)
-	t.ok(Array.isArray(merge(target, src).key1))
-	t.ok(Array.isArray(merge(target, src).key2))
-	t.end()
-})
-
-test('should work on array properties with clone option', function(t) {
-	var src = {
-		key1: [ 'one', 'three' ],
-		key2: [ 'four' ],
-	}
-	var target = {
-		key1: [ 'one', 'two' ],
-	}
-
-	t.deepEqual(target, {
-		key1: [ 'one', 'two' ],
-	})
-	var merged = merge(target, src, { clone: true })
-	t.notEqual(merged.key1, src.key1)
-	t.notEqual(merged.key1, target.key1)
-	t.notEqual(merged.key2, src.key2)
-	t.end()
-})
-
-test('should work on array of objects', function(t) {
-	var src = [
-		{ key1: [ 'one', 'three' ], key2: [ 'one' ] },
-		{ key3: [ 'five' ] },
-	]
-	var target = [
-		{ key1: [ 'one', 'two' ] },
-		{ key3: [ 'four' ] },
-	]
-
-	var expected = [
-		{ key1: [ 'one', 'two' ] },
-		{ key3: [ 'four' ] },
-		{ key1: [ 'one', 'three' ], key2: [ 'one' ] },
-		{ key3: [ 'five' ] },
-	]
-
-	t.deepEqual(merge(target, src), expected)
-	t.ok(Array.isArray(merge(target, src)), 'result should be an array')
-	t.ok(Array.isArray(merge(target, src)[0].key1), 'subkey should be an array too')
-
-	t.end()
-})
-
-test('should work on array of objects with clone option', function(t) {
-	var src = [
-		{ key1: [ 'one', 'three' ], key2: [ 'one' ] },
-		{ key3: [ 'five' ] },
-	]
-	var target = [
-		{ key1: [ 'one', 'two' ] },
-		{ key3: [ 'four' ] },
-	]
-
-	var expected = [
-		{ key1: [ 'one', 'two' ] },
-		{ key3: [ 'four' ] },
-		{ key1: [ 'one', 'three' ], key2: [ 'one' ] },
-		{ key3: [ 'five' ] },
-	]
-
-	var merged = merge(target, src, { clone: true })
-	t.deepEqual(merged, expected)
-	t.ok(Array.isArray(merge(target, src)), 'result should be an array')
-	t.ok(Array.isArray(merge(target, src)[0].key1), 'subkey should be an array too')
-	t.notEqual(merged[0].key1, src[0].key1)
-	t.notEqual(merged[0].key1, target[0].key1)
-	t.notEqual(merged[0].key2, src[0].key2)
-	t.notEqual(merged[1].key3, src[1].key3)
-	t.notEqual(merged[1].key3, target[1].key3)
-	t.end()
-})
-
-test('should treat regular expressions like primitive values', function(t) {
-	var target = { key1: /abc/ }
-	var src = { key1: /efg/ }
-	var expected = { key1: /efg/ }
-
-	t.deepEqual(merge(target, src), expected)
-	t.deepEqual(merge(target, src).key1.test('efg'), true)
-	t.end()
-})
-
-test('should treat regular expressions like primitive values and should not'
-				+ ' clone even with clone option', function(t) {
-	var target = { key1: /abc/ }
-	var src = { key1: /efg/ }
-
-	var output = merge(target, src, { clone: true })
-
-	t.equal(output.key1, src.key1)
-	t.end()
-}
-)
-
-test('should treat dates like primitives', function(t) {
-	var monday = new Date('2016-09-27T01:08:12.761Z')
-	var tuesday = new Date('2016-09-28T01:18:12.761Z')
-
-	var target = {
-		key: monday,
-	}
-	var source = {
-		key: tuesday,
-	}
-
-	var expected = {
-		key: tuesday,
-	}
-	var actual = merge(target, source)
-
-	t.deepEqual(actual, expected)
-	t.equal(actual.key.valueOf(), tuesday.valueOf())
-	t.end()
-})
-
-test('should treat dates like primitives and should not clone even with clone'
-				+  ' option', function(t) {
-	var monday = new Date('2016-09-27T01:08:12.761Z')
-	var tuesday = new Date('2016-09-28T01:18:12.761Z')
-
-	var target = {
-		key: monday,
-	}
-	var source = {
-		key: tuesday,
-	}
-
-	var actual = merge(target, source, { clone: true })
-
-	t.equal(actual.key, tuesday)
-	t.end()
-})
-
-test('should work on array with null in it', function(t) {
-	var target = []
-
-	var src = [ null ]
-
-	var expected = [ null ]
-
-	t.deepEqual(merge(target, src), expected)
-	t.end()
-})
-
-test('should clone array\'s element if it is object', function(t) {
-	var a = { key: 'yup' }
-	var target = []
-	var source = [ a ]
-
-	var output = merge(target, source, { clone: true })
-
-	t.notEqual(output[0], a)
-	t.equal(output[0].key, 'yup')
-	t.end()
-})
-
-test('should clone an array property when there is no target array', function(t) {
-	const someObject = {}
-	var target = {}
-	var source = { ary: [ someObject ] }
-	var output = merge(target, source, { clone: true })
-
-	t.deepEqual(output, { ary: [{}] })
-	t.notEqual(output.ary[0], someObject)
-	t.end()
-})
-
-test('should overwrite values when property is initialised but undefined', function(t) {
-	var target1 = { value: [] }
-	var target2 = { value: null }
-	var target3 = { value: 2 }
-
-	var src = { value: undefined }
-
-	function hasUndefinedProperty(o) {
-		t.ok(o.hasOwnProperty('value'))
-		t.equal(typeof o.value, 'undefined')
-	}
-
-	hasUndefinedProperty(merge(target1, src))
-	hasUndefinedProperty(merge(target2, src))
-	hasUndefinedProperty(merge(target3, src))
-
-	t.end()
-})
-
-test('dates should copy correctly in an array', function(t) {
-	var monday = new Date('2016-09-27T01:08:12.761Z')
-	var tuesday = new Date('2016-09-28T01:18:12.761Z')
-
-	var target = [ monday, 'dude' ]
-	var source = [ tuesday, 'lol' ]
-
-	var expected = [ monday, 'dude', tuesday, 'lol' ]
-	var actual = merge(target, source)
-
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-test('should handle custom merge functions', function(t) {
-	var target = {
-		letters: ['a', 'b'],
-		people: {
-			first: 'Alex',
-			second: 'Bert',
-		}
-	}
-
-	var source = {
-		letters: ['c'],
-		people: {
-			first: 'Smith',
-			second: 'Bertson',
-			third: 'Car'
-		}
-	}
-
-    const mergePeople = (target, source, options) => {
-       const keys = new Set(Object.keys(target).concat(Object.keys(source)))
-	   const destination = {}
-       keys.forEach(key => {
-           if (key in target && key in source) {
-               destination[key] = `${target[key]}-${source[key]}`
-           } else if (key in target) {
-               destination[key] = target[key]
-           } else {
-               destination[key] = source[key]
-           }
-	   })
-       return destination
-   }
-
-   const options = {
-       customMerge: (key, options) => {
-         if (key === 'people') {
-           return mergePeople
-		 }
-
-		 return merge
-       }
-   }
-
-	var expected = {
-		letters: ['a', 'b', 'c'],
-		people: {
-			first: 'Alex-Smith',
-			second: 'Bert-Bertson',
-			third: 'Car'
-		}
-	}
-
-	var actual = merge(target, source, options)
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-
-test('should handle custom merge functions', function(t) {
-	var target = {
-		letters: ['a', 'b'],
-		people: {
-			first: 'Alex',
-			second: 'Bert',
-		}
-	}
-
-	var source = {
-		letters: ['c'],
-		people: {
-			first: 'Smith',
-			second: 'Bertson',
-			third: 'Car'
-		}
-	}
-
-    const mergeLetters = (target, source, options) => {
-      return 'merged letters'
-    }
-
-
-    const options = {
-        customMerge: (key, options) => {
-          if (key === 'letters') {
-            return mergeLetters
-          }
-        }
-    }
-
-    const expected = {
-        letters: 'merged letters',
-        people: {
-            first: 'Smith',
-            second: 'Bertson',
-            third: 'Car'
-        }
-    }
-
-	var actual = merge(target, source, options)
-	t.deepEqual(actual, expected)
-	t.end()
-})
-
-test('should merge correctly if custom merge is not a valid function', function(t) {
-	var target = {
-		letters: ['a', 'b'],
-		people: {
-			first: 'Alex',
-			second: 'Bert',
-		}
-	}
-
-	var source = {
-		letters: ['c'],
-		people: {
-			first: 'Smith',
-			second: 'Bertson',
-			third: 'Car'
-		}
-	}
-
-    const options = {
-        customMerge: (key, options) => {
-            return  false
-        }
-    }
-
-    const expected = {
-        letters: ['a', 'b', 'c'],
-        people: {
-            first: 'Smith',
-            second: 'Bertson',
-            third: 'Car'
-        }
-    }
-
-	var actual = merge(target, source, options)
-	t.deepEqual(actual, expected)
-	t.end()
-
-})
-
-test('copy symbol keys in target that do not exist on the target', function(t) {
-	var mySymbol = Symbol();
-	var src = { [mySymbol]: 'value1' }
-	var target = {}
-
-	var res = merge(target, src)
-
-	t.equal(res[mySymbol], 'value1')
-	t.deepEqual(Object.getOwnPropertySymbols(res), Object.getOwnPropertySymbols(src))
-	t.end()
-})
-
-test('copy symbol keys in target that do exist on the target', function(t) {
-	var mySymbol = Symbol();
-	var src = { [mySymbol]: 'value1' }
-	var target = { [mySymbol]: 'wat'}
-
-	var res = merge(target, src)
-
-	t.equal(res[mySymbol], 'value1')
-	t.end()
-})
-
-test('Falsey properties should be mergeable', function(t) {
-	var uniqueValue = {}
-
-	var target = {
-		wat: false
-	}
-
-	var source = {
-		wat: false
-	}
-
-	var customMergeWasCalled = false
-
-	var result = merge(target, source, {
-		isMergeableObject: function() {
-			return true
-		},
-		customMerge: function() {
-			return function() {
-				customMergeWasCalled = true
-				return uniqueValue
-			}
-		}
-	})
-
-	t.equal(result.wat, uniqueValue)
-	t.ok(customMergeWasCalled, 'custom merge function was called')
-	t.end()
-})
diff --git a/test/prototype-poisoning.js b/test/prototype-poisoning.js
deleted file mode 100644
index fc79cf3..0000000
--- a/test/prototype-poisoning.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var merge = require('../')
-var test = require('tape')
-var isMergeableObject = require('is-mergeable-object')
-
-test('merging objects with own __proto__', function(t) {
-	var user = {}
-	var malicious = JSON.parse('{ "__proto__": { "admin": true } }')
-	var mergedObject = merge(user, malicious)
-	t.notOk(mergedObject.__proto__.admin, 'non-plain properties should not be merged')
-	t.notOk(mergedObject.admin, 'the destination should have an unmodified prototype')
-	t.end()
-})
-
-test('merging objects with plain and non-plain properties', function(t) {
-	var plainSymbolKey = Symbol('plainSymbolKey')
-	var parent = {
-		parentKey: 'should be undefined'
-	}
-	
-	var target = Object.create(parent)	
-	target.plainKey = 'should be replaced'
-	target[plainSymbolKey] = 'should also be replaced'
-	
-	var source = {
-		parentKey: 'foo',
-		plainKey: 'bar',
-		newKey: 'baz',
-		[plainSymbolKey]: 'qux'
-	}
-	
-	var mergedObject = merge(target, source)
-	t.equal(undefined, mergedObject.parentKey, 'inherited properties of target should be removed, not merged or ignored')
-	t.equal('bar', mergedObject.plainKey, 'enumerable own properties of target should be merged')
-	t.equal('baz', mergedObject.newKey, 'properties not yet on target should be merged')
-	t.equal('qux', mergedObject[plainSymbolKey], 'enumerable own symbol properties of target should be merged')
-	t.end()
-})
-
-// the following cases come from the thread here: https://github.com/TehShrike/deepmerge/pull/164
-test('merging strings works with a custom string merge', function(t) {
-	var target = { name: "Alexander" }
-	var source = { name: "Hamilton" }
-	function customMerge(key, options) {
-		if (key === 'name') {
-			return function(target, source, options) {
-				return target[0] + '. ' + source.substring(0, 3)
-			}
-		} else {
-			return merge
-		}
-	}
-
-	function mergeable(target) {
-		return isMergeableObject(target) || (typeof target === 'string' && target.length > 1)
-	}
-
-	t.equal('A. Ham', merge(target, source, { customMerge: customMerge, isMergeableObject: mergeable }).name)
-	t.end()
-})
-
-test('merging objects with null prototype', function(t) {
-	var target = Object.create(null)
-	var source = Object.create(null)
-	target.wheels = 4
-	target.trunk = { toolbox: ['hammer'] }
-	source.trunk = { toolbox: ['wrench'] }
-	source.engine = 'v8'
-	var expected = {
-		wheels: 4,
-		engine: 'v8',
-		trunk: {
-			toolbox: ['hammer', 'wrench' ]
-		}
-	}
-
-	t.deepEqual(expected, merge(target, source))
-	t.end()
-})
diff --git a/test/typescript.ts b/test/typescript.ts
deleted file mode 100644
index 23d2c5c..0000000
--- a/test/typescript.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import * as merge from '../';
-
-const x = {
-	foo: 'abc',
-	bar: 'def',
-	wat: 42,
-}
-
-const y = {
-	foo: 'cba',
-	bar: 'fed',
-	wat: 42,
-}
-
-const z = {
-	baz: '123',
-	quux: '456',
-	wat: 42,
-}
-
-let merged1 = merge(x, y);
-let merged2 = merge(x, z);
-let merged3 = merge.all<{wat: number}>([ x, y, z ]);
-
-merged1.foo;
-merged1.bar;
-merged2.foo;
-merged2.baz;
-merged3.wat;
-
-
-const options1: merge.Options = {
-	clone: true,
-	isMergeableObject (obj) {
-		return false;
-	},
-};
-
-const options2: merge.Options = {
-	arrayMerge (target, source, options) {
-		target.length;
-		source.length;
-		options.isMergeableObject(target);
-
-		return [];
-	},
-	clone: true,
-	isMergeableObject (obj) {
-		return false;
-	},
-};
-
-const options3: merge.Options = {
-    customMerge: (key) => {
-        if (key === 'foo') {
-          return (target, source) => target + source;
-        }
-    }
-}
-
-merged1 = merge(x, y, options1);
-merged2 = merge(x, z, options2);
-merged3 = merge.all<{wat: number}>([x, y, z], options1);
-
-const merged4 = merge(x, y, options3);