Repository: char0n/ramda-adjunct
Pull request #1085 (2019-10-02 23:52:54)

feat: add toArray #342
#342 

rafaelpadovezi: Hey @char0n, you wrote:

> For the implementation it is possible to use Array.from internally **(if available)**

Should I provide a polyfill for `Array.from`? If yes, should I base my code on [this](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Polyfill)? 

Patch:
diff --git a/package-lock.json b/package-lock.json
index 5570638eb0..601c909ab4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,13 +1,13 @@
 {
   "name": "ramda-adjunct",
-  "version": "2.21.0",
+  "version": "2.22.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
     "@babel/cli": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.2.tgz",
-      "integrity": "sha512-JDZ+T/br9pPfT2lmAMJypJDTTTHM9ePD/ED10TRjRzJVdEVy+JB3iRlhzYmTt5YkNgHvxWGlUVnLtdv6ruiDrQ==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.3.tgz",
+      "integrity": "sha512-kWKOEeuylpa781yCeA5//eEx1u3WtLZqbi2VWXLKmb3QDPb5T2f7Yk311MK7bvvjR70dluAeiu4VXXsG1WwJsw==",
       "dev": true,
       "requires": {
         "chokidar": "^2.1.8",
@@ -19,7 +19,15 @@
         "mkdirp": "^0.5.1",
         "output-file-sync": "^2.0.0",
         "slash": "^2.0.0",
-        "source-map": "^0.5.0"
+        "source-map": "^0.6.1"
+      },
+      "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
+        }
       }
     },
     "@babel/code-frame": {
@@ -32,25 +40,25 @@
       }
     },
     "@babel/core": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.2.tgz",
-      "integrity": "sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.3.tgz",
+      "integrity": "sha512-QfQ5jTBgXLzJuo7Mo8bZK/ePywmgNRgk/UQykiKwEtZPiFIn8ZqE6jB+AnD1hbB1S2xQyL4//it5vuAUOVAMTw==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.5.5",
-        "@babel/generator": "^7.6.2",
+        "@babel/generator": "^7.6.3",
         "@babel/helpers": "^7.6.2",
-        "@babel/parser": "^7.6.2",
+        "@babel/parser": "^7.6.3",
         "@babel/template": "^7.6.0",
-        "@babel/traverse": "^7.6.2",
-        "@babel/types": "^7.6.0",
+        "@babel/traverse": "^7.6.3",
+        "@babel/types": "^7.6.3",
         "convert-source-map": "^1.1.0",
         "debug": "^4.1.0",
         "json5": "^2.1.0",
         "lodash": "^4.17.13",
         "resolve": "^1.3.2",
         "semver": "^5.4.1",
-        "source-map": "^0.5.0"
+        "source-map": "^0.6.1"
       },
       "dependencies": {
         "@babel/code-frame": {
@@ -63,9 +71,9 @@
           }
         },
         "@babel/parser": {
-          "version": "7.6.2",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz",
-          "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.3.tgz",
+          "integrity": "sha512-sUZdXlva1dt2Vw2RqbMkmfoImubO0D0gaCrNngV6Hi0DA4x3o4mlrq0tbfY0dZEUIccH8I6wQ4qgEtwcpOR6Qg==",
           "dev": true
         },
         "@babel/template": {
@@ -80,9 +88,9 @@
           }
         },
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -104,31 +112,43 @@
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
           "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "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
         }
       }
     },
     "@babel/generator": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz",
-      "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.3.tgz",
+      "integrity": "sha512-hLhYbAb3pHwxjlijC4AQ7mqZdcoujiNaW7izCT04CIowHK8psN0IN8QjDv0iyFtycF5FowUOTwDloIheI25aMw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.6.0",
+        "@babel/types": "^7.6.3",
         "jsesc": "^2.5.1",
         "lodash": "^4.17.13",
-        "source-map": "^0.5.0"
+        "source-map": "^0.6.1"
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
             "lodash": "^4.17.13",
             "to-fast-properties": "^2.0.0"
           }
+        },
+        "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
         }
       }
     },
@@ -163,9 +183,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -187,9 +207,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -239,9 +259,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -261,9 +281,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -376,9 +396,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -444,9 +464,9 @@
       },
       "dependencies": {
         "@babel/parser": {
-          "version": "7.6.0",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.0.tgz",
-          "integrity": "sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.3.tgz",
+          "integrity": "sha512-sUZdXlva1dt2Vw2RqbMkmfoImubO0D0gaCrNngV6Hi0DA4x3o4mlrq0tbfY0dZEUIccH8I6wQ4qgEtwcpOR6Qg==",
           "dev": true
         },
         "@babel/template": {
@@ -461,9 +481,9 @@
           }
         },
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -627,9 +647,9 @@
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz",
-      "integrity": "sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz",
+      "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -782,9 +802,9 @@
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz",
-      "integrity": "sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz",
+      "integrity": "sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==",
       "dev": true,
       "requires": {
         "regexpu-core": "^4.6.0"
@@ -924,9 +944,9 @@
       }
     },
     "@babel/preset-env": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.2.tgz",
-      "integrity": "sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.3.tgz",
+      "integrity": "sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -945,7 +965,7 @@
         "@babel/plugin-transform-arrow-functions": "^7.2.0",
         "@babel/plugin-transform-async-to-generator": "^7.5.0",
         "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-        "@babel/plugin-transform-block-scoping": "^7.6.2",
+        "@babel/plugin-transform-block-scoping": "^7.6.3",
         "@babel/plugin-transform-classes": "^7.5.5",
         "@babel/plugin-transform-computed-properties": "^7.2.0",
         "@babel/plugin-transform-destructuring": "^7.6.0",
@@ -960,7 +980,7 @@
         "@babel/plugin-transform-modules-commonjs": "^7.6.0",
         "@babel/plugin-transform-modules-systemjs": "^7.5.0",
         "@babel/plugin-transform-modules-umd": "^7.2.0",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.2",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3",
         "@babel/plugin-transform-new-target": "^7.4.4",
         "@babel/plugin-transform-object-super": "^7.5.5",
         "@babel/plugin-transform-parameters": "^7.4.4",
@@ -973,7 +993,7 @@
         "@babel/plugin-transform-template-literals": "^7.4.4",
         "@babel/plugin-transform-typeof-symbol": "^7.2.0",
         "@babel/plugin-transform-unicode-regex": "^7.6.2",
-        "@babel/types": "^7.6.0",
+        "@babel/types": "^7.6.3",
         "browserslist": "^4.6.0",
         "core-js-compat": "^3.1.1",
         "invariant": "^2.2.2",
@@ -982,9 +1002,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -1019,17 +1039,17 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz",
-      "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz",
+      "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.5.5",
-        "@babel/generator": "^7.6.2",
+        "@babel/generator": "^7.6.3",
         "@babel/helper-function-name": "^7.1.0",
         "@babel/helper-split-export-declaration": "^7.4.4",
-        "@babel/parser": "^7.6.2",
-        "@babel/types": "^7.6.0",
+        "@babel/parser": "^7.6.3",
+        "@babel/types": "^7.6.3",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
         "lodash": "^4.17.13"
@@ -1045,15 +1065,15 @@
           }
         },
         "@babel/parser": {
-          "version": "7.6.2",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz",
-          "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.3.tgz",
+          "integrity": "sha512-sUZdXlva1dt2Vw2RqbMkmfoImubO0D0gaCrNngV6Hi0DA4x3o4mlrq0tbfY0dZEUIccH8I6wQ4qgEtwcpOR6Qg==",
           "dev": true
         },
         "@babel/types": {
-          "version": "7.6.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-          "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
+          "version": "7.6.3",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
+          "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2",
@@ -1391,28 +1411,28 @@
       }
     },
     "@nodelib/fs.scandir": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz",
-      "integrity": "sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
       "dev": true,
       "requires": {
-        "@nodelib/fs.stat": "2.0.2",
+        "@nodelib/fs.stat": "2.0.3",
         "run-parallel": "^1.1.9"
       }
     },
     "@nodelib/fs.stat": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz",
-      "integrity": "sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+      "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
       "dev": true
     },
     "@nodelib/fs.walk": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz",
-      "integrity": "sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
       "dev": true,
       "requires": {
-        "@nodelib/fs.scandir": "2.1.2",
+        "@nodelib/fs.scandir": "2.1.3",
         "fastq": "^1.6.0"
       }
     },
@@ -2767,9 +2787,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30000989",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
-      "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
+      "version": "1.0.30000999",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz",
+      "integrity": "sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg==",
       "dev": true
     },
     "caseless": {
@@ -3213,28 +3233,28 @@
       "dev": true
     },
     "conventional-changelog": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.10.tgz",
-      "integrity": "sha512-6RDj31hL39HUkpqvPjRlOxAwJRwur8O2qu9m6R0FBNDGwCJyy4SYH9NfyshozxYSeklrauKRf3oSbyoEZVzu9Q==",
-      "dev": true,
-      "requires": {
-        "conventional-changelog-angular": "^5.0.3",
-        "conventional-changelog-atom": "^2.0.1",
-        "conventional-changelog-codemirror": "^2.0.1",
-        "conventional-changelog-conventionalcommits": "^4.1.0",
-        "conventional-changelog-core": "^4.0.0",
-        "conventional-changelog-ember": "^2.0.2",
-        "conventional-changelog-eslint": "^3.0.2",
+      "version": "3.1.12",
+      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.12.tgz",
+      "integrity": "sha512-zyGKwii8Z5zOq1nGFm5jn9Ou1jQ6UBoRT0+nqBIU8fEzh64+AcVxrY97tVuK77Ati0xwpBiFHpDXAW7pkq1jEw==",
+      "dev": true,
+      "requires": {
+        "conventional-changelog-angular": "^5.0.5",
+        "conventional-changelog-atom": "^2.0.3",
+        "conventional-changelog-codemirror": "^2.0.3",
+        "conventional-changelog-conventionalcommits": "^4.2.1",
+        "conventional-changelog-core": "^4.0.2",
+        "conventional-changelog-ember": "^2.0.4",
+        "conventional-changelog-eslint": "^3.0.4",
         "conventional-changelog-express": "^2.0.1",
-        "conventional-changelog-jquery": "^3.0.4",
-        "conventional-changelog-jshint": "^2.0.1",
+        "conventional-changelog-jquery": "^3.0.6",
+        "conventional-changelog-jshint": "^2.0.3",
         "conventional-changelog-preset-loader": "^2.2.0"
       },
       "dependencies": {
         "conventional-changelog-angular": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz",
-          "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==",
+          "version": "5.0.5",
+          "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.5.tgz",
+          "integrity": "sha512-RrkdWnL/TVyWV1ayWmSsrWorsTDqjL/VwG5ZSEneBQrd65ONcfeA1cW7FLtNweQyMiKOyriCMTKRSlk18DjTrw==",
           "dev": true,
           "requires": {
             "compare-func": "^1.3.1",
@@ -3254,25 +3274,25 @@
       }
     },
     "conventional-changelog-atom": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz",
-      "integrity": "sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.3.tgz",
+      "integrity": "sha512-szZe2ut97qNO6vCCMkm1I/tWu6ol4Rr8a9Lx0y/VlpDnpY0PNp+oGpFgU55lplhx+I3Lro9Iv4/gRj0knfgjzg==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
       }
     },
     "conventional-changelog-cli": {
-      "version": "2.0.23",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.23.tgz",
-      "integrity": "sha512-a/jDZHEUpSHQMAqeDrmrFhz9CKHBKhBGpJyc38BCfNjFA1RKchpq/Qqbo1BZwRLWrW/PX7IGsUicTyhniqUH9g==",
+      "version": "2.0.25",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.25.tgz",
+      "integrity": "sha512-b0zNygHrFI4HjNmgPzDLSqoltIwo3pIfilWZFNH/1w6QIZoZHeA4SxojRgih9aCc0Eeg1RH7lXIPaRgHa9cv7A==",
       "dev": true,
       "requires": {
         "add-stream": "^1.0.0",
-        "conventional-changelog": "^3.1.10",
+        "conventional-changelog": "^3.1.12",
         "lodash": "^4.14.14",
         "meow": "^4.0.0",
-        "tempfile": "^1.1.1"
+        "tempfile": "^3.0.0"
       },
       "dependencies": {
         "meow": {
@@ -3301,32 +3321,33 @@
       }
     },
     "conventional-changelog-codemirror": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz",
-      "integrity": "sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.3.tgz",
+      "integrity": "sha512-t2afackdgFV2yBdHhWPqrKbpaQeVnz2hSJKdWqjasPo5EpIB6TBL0er3cOP1mnGQmuzk9JSvimNSuqjWGDtU5Q==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
       }
     },
     "conventional-changelog-conventionalcommits": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz",
-      "integrity": "sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz",
+      "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==",
       "dev": true,
       "requires": {
         "compare-func": "^1.3.1",
+        "lodash": "^4.2.1",
         "q": "^1.5.1"
       }
     },
     "conventional-changelog-core": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.0.0.tgz",
-      "integrity": "sha512-+bZMeBUdjKxfyX2w6EST9U7zb85wxrGS3IV4H7SqPya44osNQbm3P+vyqfLs6s57FkoEamC93ioDEiguVLWmSQ==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.0.2.tgz",
+      "integrity": "sha512-vQh7J+emZlcIA5alvI2xGikID2/iYKyk39dHmHEyU7/xvB9L9kq+3BzqbCXVstu7SD7isDfem27m/Qzu7R0BRA==",
       "dev": true,
       "requires": {
-        "conventional-changelog-writer": "^4.0.7",
-        "conventional-commits-parser": "^3.0.3",
+        "conventional-changelog-writer": "^4.0.9",
+        "conventional-commits-parser": "^3.0.5",
         "dateformat": "^3.0.0",
         "get-pkg-repo": "^1.0.0",
         "git-raw-commits": "2.0.0",
@@ -3341,9 +3362,9 @@
       },
       "dependencies": {
         "conventional-commits-parser": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz",
-          "integrity": "sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==",
+          "version": "3.0.5",
+          "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.5.tgz",
+          "integrity": "sha512-qVz9+5JwdJzsbt7JbJ6P7NOXBGt8CyLFJYSjKAuPSgO+5UGfcsbk9EMR+lI8Unlvx6qwIc2YDJlrGIfay2ehNA==",
           "dev": true,
           "requires": {
             "JSONStream": "^1.0.4",
@@ -3430,18 +3451,18 @@
       }
     },
     "conventional-changelog-ember": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz",
-      "integrity": "sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.4.tgz",
+      "integrity": "sha512-q1u73sO9uCnxN4TSw8xu6MRU8Y1h9kpwtcdJuNRwu/LSKI1IE/iuNSH5eQ6aLlQ3HTyrIpTfUuVybW4W0F17rA==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
       }
     },
     "conventional-changelog-eslint": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz",
-      "integrity": "sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.4.tgz",
+      "integrity": "sha512-CPwTUENzhLGl3auunrJxiIEWncAGaby7gOFCdj2gslIuOFJ0KPJVOUhRz4Da/I53sdo/7UncUJkiLg94jEsjxg==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
@@ -3457,18 +3478,18 @@
       }
     },
     "conventional-changelog-jquery": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz",
-      "integrity": "sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.6.tgz",
+      "integrity": "sha512-gHAABCXUNA/HjnZEm+vxAfFPJkgtrZvCDIlCKfdPVXtCIo/Q0lN5VKpx8aR5p8KdVRQFF3OuTlvv5kv6iPuRqA==",
       "dev": true,
       "requires": {
         "q": "^1.5.1"
       }
     },
     "conventional-changelog-jshint": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz",
-      "integrity": "sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.3.tgz",
+      "integrity": "sha512-Pc2PnMPcez634ckzr4EOWviwRSpZcURaK7bjyD9oK6N5fsC/a+3G7LW5m/JpcHPhA9ZxsfIbm7uqZ3ZDGsQ/sw==",
       "dev": true,
       "requires": {
         "compare-func": "^1.3.1",
@@ -3482,15 +3503,15 @@
       "dev": true
     },
     "conventional-changelog-writer": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz",
-      "integrity": "sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw==",
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.9.tgz",
+      "integrity": "sha512-2Y3QfiAM37WvDMjkVNaRtZgxVzWKj73HE61YQ/95T53yle+CRwTVSl6Gbv/lWVKXeZcM5af9n9TDVf0k7Xh+cw==",
       "dev": true,
       "requires": {
         "compare-func": "^1.3.1",
         "conventional-commits-filter": "^2.0.2",
         "dateformat": "^3.0.0",
-        "handlebars": "^4.1.2",
+        "handlebars": "^4.4.0",
         "json-stringify-safe": "^5.0.1",
         "lodash": "^4.2.1",
         "meow": "^4.0.0",
@@ -3499,6 +3520,18 @@
         "through2": "^3.0.0"
       },
       "dependencies": {
+        "handlebars": {
+          "version": "4.4.3",
+          "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz",
+          "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==",
+          "dev": true,
+          "requires": {
+            "neo-async": "^2.6.0",
+            "optimist": "^0.6.1",
+            "source-map": "^0.6.1",
+            "uglify-js": "^3.1.4"
+          }
+        },
         "meow": {
           "version": "4.0.1",
           "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
@@ -3528,6 +3561,12 @@
           "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "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
+        },
         "through2": {
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
@@ -4220,9 +4259,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.264",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.264.tgz",
-      "integrity": "sha512-z8E7WkrrquCuGYv+kKyybuZIbdms+4PeHp7Zm2uIgEhAigP0bOwqXILItwj0YO73o+QyHY/7XtEfP5DsHOWQgQ==",
+      "version": "1.3.277",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.277.tgz",
+      "integrity": "sha512-Czmsrgng89DOgJlIknnw9bn5431QdtnUwGp5YYiPwU1DbZQUxCLF+rc1ZC09VNAdalOPcvH6AE8BaA0H5HjI/w==",
       "dev": true
     },
     "elegant-spinner": {
@@ -4650,9 +4689,9 @@
       }
     },
     "eslint-config-prettier": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.3.0.tgz",
-      "integrity": "sha512-EWaGjlDAZRzVFveh2Jsglcere2KK5CJBhkNSa1xs3KfMUGdRiT7lG089eqPdvlzWHpAqaekubOsOMu8W8Yk71A==",
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz",
+      "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==",
       "dev": true,
       "requires": {
         "get-stdin": "^6.0.0"
@@ -5218,16 +5257,15 @@
       "dev": true
     },
     "fast-glob": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz",
-      "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz",
+      "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==",
       "dev": true,
       "requires": {
-        "@nodelib/fs.stat": "^2.0.1",
-        "@nodelib/fs.walk": "^1.2.1",
-        "glob-parent": "^5.0.0",
-        "is-glob": "^4.0.1",
-        "merge2": "^1.2.3",
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.0",
+        "merge2": "^1.3.0",
         "micromatch": "^4.0.2"
       },
       "dependencies": {
@@ -6347,9 +6385,9 @@
       "dev": true
     },
     "get-own-enumerable-property-symbols": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
-      "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz",
+      "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==",
       "dev": true
     },
     "get-pkg-repo": {
@@ -6373,7 +6411,7 @@
         },
         "camelcase-keys": {
           "version": "2.1.0",
-          "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
           "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
           "dev": true,
           "requires": {
@@ -6408,7 +6446,7 @@
         },
         "load-json-file": {
           "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "dev": true,
           "requires": {
@@ -6427,7 +6465,7 @@
         },
         "meow": {
           "version": "3.7.0",
-          "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+          "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
           "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
           "dev": true,
           "requires": {
@@ -6480,7 +6518,7 @@
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         },
@@ -6621,7 +6659,7 @@
       "dependencies": {
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
@@ -8216,9 +8254,9 @@
       "dev": true
     },
     "json5": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
-      "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+      "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
       "dev": true,
       "requires": {
         "minimist": "^1.2.0"
@@ -8349,9 +8387,9 @@
       }
     },
     "lint-staged": {
-      "version": "9.4.1",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.1.tgz",
-      "integrity": "sha512-zFRbo1bAJEVf1m33paTTjDVfy2v3lICCqHfmQSgNoI+lWpi7HPG5y/R2Y7Whdce+FKxlZYs/U1sDSx8+nmQdDA==",
+      "version": "9.4.2",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz",
+      "integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==",
       "dev": true,
       "requires": {
         "chalk": "^2.4.2",
@@ -8406,9 +8444,9 @@
           }
         },
         "execa": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz",
-          "integrity": "sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==",
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.5.tgz",
+          "integrity": "sha512-SwmwZZyJjflcqLSgllk4EQlMLst2p9muyzwNugKGFlpAz6rZ7M+s2nBR97GAq4Vzjwx2y9rcMcmqzojwN+xwNA==",
           "dev": true,
           "requires": {
             "cross-spawn": "^6.0.5",
@@ -9757,12 +9795,20 @@
       }
     },
     "node-releases": {
-      "version": "1.1.32",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz",
-      "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==",
+      "version": "1.1.35",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.35.tgz",
+      "integrity": "sha512-JGcM/wndCN/2elJlU0IGdVEJQQnJwsLbgPCFd2pY7V0mxf17bZ0Gb/lgOtL29ZQhvEX5shnVhxQyZz3ex94N8w==",
       "dev": true,
       "requires": {
-        "semver": "^5.3.0"
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "nopt": {
@@ -10924,7 +10970,7 @@
       "dependencies": {
         "jsesc": {
           "version": "0.5.0",
-          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
           "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
           "dev": true
         }
@@ -12089,22 +12135,20 @@
         "uuid": "^3.3.2"
       }
     },
+    "temp-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+      "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
+      "dev": true
+    },
     "tempfile": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
-      "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz",
+      "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==",
       "dev": true,
       "requires": {
-        "os-tmpdir": "^1.0.0",
-        "uuid": "^2.0.1"
-      },
-      "dependencies": {
-        "uuid": {
-          "version": "2.0.3",
-          "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
-          "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
-          "dev": true
-        }
+        "temp-dir": "^2.0.0",
+        "uuid": "^3.3.2"
       }
     },
     "terser": {
diff --git a/package.json b/package.json
index d4dbd06ec9..90bdd4f220 100644
--- a/package.json
+++ b/package.json
@@ -42,7 +42,7 @@
     "functional"
   ],
   "sideEffects": false,
-  "version": "2.21.0",
+  "version": "2.22.0",
   "homepage": "https://github.com/char0n/ramda-adjunct",
   "license": "BSD-3-Clause",
   "repository": {
@@ -128,11 +128,11 @@
     "ramda": ">= 0.19.0 <= 0.26.1"
   },
   "devDependencies": {
-    "@babel/cli": "7.6.2",
-    "@babel/core": "7.6.2",
+    "@babel/cli": "7.6.3",
+    "@babel/core": "7.6.3",
     "@babel/plugin-transform-modules-commonjs": "7.6.0",
     "@babel/polyfill": "7.6.0",
-    "@babel/preset-env": "7.6.2",
+    "@babel/preset-env": "7.6.3",
     "@babel/register": "7.6.2",
     "@commitlint/cli": "8.2.0",
     "@commitlint/config-conventional": "8.2.0",
@@ -142,12 +142,12 @@
     "better-npm-run": "0.1.1",
     "chai": "4.2.0",
     "codecov": "3.6.1",
-    "conventional-changelog-cli": "2.0.23",
+    "conventional-changelog-cli": "2.0.25",
     "docdash": "git+https://github.com/char0n/docdash.git#534b44382138a55dd8d93642c979e51e46471185",
     "dtslint": "0.9.7",
     "eslint": "6.5.1",
     "eslint-config-airbnb-base": "=14.0.0",
-    "eslint-config-prettier": "6.3.0",
+    "eslint-config-prettier": "6.4.0",
     "eslint-plugin-import": "2.18.2",
     "eslint-plugin-mocha": "6.1.1",
     "eslint-plugin-prettier": "3.1.1",
@@ -161,7 +161,7 @@
     "jsdoc": "3.6.3",
     "jsverify": "0.8.4",
     "license-cli": "1.1.6",
-    "lint-staged": "9.4.1",
+    "lint-staged": "9.4.2",
     "mocha": "6.2.1",
     "mocha-junit-reporter": "1.23.1",
     "mocha-multi-reporters": "1.1.7",
diff --git a/src/anyP.js b/src/anyP.js
new file mode 100644
index 0000000000..4777572518
--- /dev/null
+++ b/src/anyP.js
@@ -0,0 +1,34 @@
+import { bind } from 'ramda';
+import curry1 from 'ramda/src/internal/_curry1';
+
+import isFunction from './isFunction';
+import polyfill, { AggregatedError } from './internal/polyfills/Promise.any';
+
+export const anyPPolyfill = curry1(polyfill);
+export { AggregatedError };
+
+/**
+ * Returns a promise that is fulfilled by the first given promise to be fulfilled,
+ * or rejected with an array of rejection reasons if all of the given promises are rejected.
+ *
+ * @func anyP
+ * @memberOf RA
+ * @category Function
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @sig [Promise a] -> Promise a
+ * @param {Iterable.<*>} iterable An iterable object such as an Array or String
+ * @return {Promise} Returns a promise that is fulfilled by the first given promise to be fulfilled,
+ * or rejected with an array of rejection reasons if all of the given promises are rejected.
+ * @example
+ *
+ * RA.anyP([
+ *   Promise.resolve(1),
+ *   2,
+ *   Promise.reject(3),
+ * ]); //=> Promise(1)
+ */
+const anyP = isFunction(Promise.any)
+  ? curry1(bind(Promise.any, Promise))
+  : anyPPolyfill;
+
+export default anyP;
diff --git a/src/argsPass.js b/src/argsPass.js
index 421d1e56be..6d2511c715 100644
--- a/src/argsPass.js
+++ b/src/argsPass.js
@@ -33,7 +33,7 @@ import isTruthy from './isTruthy';
  * RA.argsPass(R.none, [RA.isArray, RA.isBoolean, RA.isString])({}, 1, false) //=> true
  * RA.argsPass(R.none, [RA.isArray, RA.isBoolean, RA.isString])({}, 1, 'abc') //=> false
  */
-export default curry((combiningPredicate, predicates) =>
+const argsPass = curry((combiningPredicate, predicates) =>
   useWith(
     compose(
       combiningPredicate(isTruthy),
@@ -42,3 +42,5 @@ export default curry((combiningPredicate, predicates) =>
     predicates
   )
 );
+
+export default argsPass;
diff --git a/src/dispatch.js b/src/dispatch.js
index 96323fadc6..e98d0523f0 100644
--- a/src/dispatch.js
+++ b/src/dispatch.js
@@ -65,7 +65,7 @@ const iteratorFn = curry((args, accumulator, fn) => {
   return isNotNil(result) ? reduced(result) : accumulator;
 });
 
-const dispatch = functions => {
+const dispatchImpl = functions => {
   const arity = getMaxArity(functions);
 
   return curryN(arity, (...args) =>
@@ -73,4 +73,6 @@ const dispatch = functions => {
   );
 };
 
-export default ifElse(isNonEmptyArray, dispatch, stubUndefined);
+const dispatch = ifElse(isNonEmptyArray, dispatchImpl, stubUndefined);
+
+export default dispatch;
diff --git a/src/divideNum.js b/src/divideNum.js
new file mode 100644
index 0000000000..0621d18507
--- /dev/null
+++ b/src/divideNum.js
@@ -0,0 +1,20 @@
+import { divide, flip } from 'ramda';
+
+/**
+ * Divides two numbers, where the second number is divided by the first number.
+ *
+ * @func divideNum
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @category Math
+ * @sig Number -> Number -> Number
+ * @param {number} divisor the number to divide by
+ * @param {number} dividend the number to divide
+ * @return {number} A number representing the quotient of dividing the dividend by the divisor
+ * @example
+ *
+ * RA.divideNum(2, 1); //=> 0.5
+ */
+const divideNum = flip(divide);
+
+export default divideNum;
diff --git a/src/index.js b/src/index.js
index 7a78c1179c..9a3f6b4ab7 100644
--- a/src/index.js
+++ b/src/index.js
@@ -92,6 +92,7 @@ export { default as weaveLazy } from './weaveLazy';
 export { default as curryRightN } from './curryRightN';
 export { default as curryRight } from './curryRight';
 export { default as allP } from './allP';
+export { default as noneP } from './noneP';
 export { default as resolveP } from './resolveP';
 export { default as rejectP } from './rejectP';
 export { default as thenP } from './thenP';
@@ -102,6 +103,7 @@ export { default as seq } from './seq';
 export { default as sequencing } from './seq';
 export { default as dispatch } from './dispatch';
 export { default as async } from './async';
+export { default as anyP } from './anyP';
 // List
 export { default as mapIndexed } from './mapIndexed';
 export { default as reduceIndexed } from './reduceIndexed';
@@ -132,6 +134,7 @@ export { default as allIdentical } from './allIdentical';
 export { default as allIdenticalTo } from './allIdenticalTo';
 export { default as allEqualTo } from './allEqualTo';
 export { default as flattenDepth } from './flattenDepth';
+export { default as toArray } from './toArray';
 // Object
 export { default as paths } from './paths';
 export { default as renameKeys } from './renameKeys';
@@ -144,6 +147,7 @@ export { default as mergePaths } from './mergePaths';
 export { default as mergeProp } from './mergeProp';
 export { default as mergePath } from './mergePath';
 export { default as omitBy } from './omitBy';
+export { default as pathOrLazy } from './pathOrLazy';
 export { default as viewOr } from './viewOr';
 export { default as hasPath } from './hasPath';
 export { default as spreadProp } from './spreadProp';
@@ -174,9 +178,11 @@ export { default as dropArgs } from './dropArgs';
 // Math
 export { default as round } from './round';
 export { default as ceil } from './ceil';
+export { default as divideNum } from './divideNum';
 export { default as floor } from './floor';
 export { default as trunc } from './trunc';
 export { default as sign } from './sign';
+export { default as subtractNum } from './subtractNum';
 // String
 export { default as replaceAll } from './replaceAll';
 export { default as escapeRegExp } from './escapeRegExp';
diff --git a/src/internal/polyfills/Array.from.js b/src/internal/polyfills/Array.from.js
new file mode 100644
index 0000000000..103499f4e1
--- /dev/null
+++ b/src/internal/polyfills/Array.from.js
@@ -0,0 +1,34 @@
+import { bind } from 'ramda';
+
+import isIterable from '../../isIterable';
+import isNotUndefined from '../../isNotUndefined';
+import isNotNil from '../../isNotNil';
+import isNotFunction from '../../isNotFunction';
+
+const copyArray = (items, mapFn, thisArg) => {
+  const boundMapFn = isNotUndefined(thisArg) ? bind(mapFn, thisArg) : mapFn;
+
+  return isNotUndefined(mapFn) ? [...items].map(boundMapFn) : [...items];
+};
+
+const fromArray = (items, mapFn, thisArg) => {
+  if (items == null) {
+    throw new TypeError(
+      'Array.from requires an array-like object - not null or undefined'
+    );
+  }
+
+  if (isNotNil(mapFn) && isNotFunction(mapFn)) {
+    throw new TypeError(
+      'Array.from: when provided, the second argument must be a function'
+    );
+  }
+
+  if (isIterable(items)) {
+    return copyArray(items, mapFn, thisArg);
+  }
+
+  return [];
+};
+
+export default fromArray;
diff --git a/src/internal/polyfills/Promise.any.js b/src/internal/polyfills/Promise.any.js
new file mode 100644
index 0000000000..ab26552680
--- /dev/null
+++ b/src/internal/polyfills/Promise.any.js
@@ -0,0 +1,35 @@
+import { map } from 'ramda';
+
+import resolveP from '../../resolveP';
+
+export class AggregatedError extends Error {
+  constructor(errors = [], message) {
+    super(message);
+
+    this.errors = errors;
+  }
+}
+
+const anyPolyfill = iterable => {
+  const exceptions = [];
+
+  return new Promise((resolve, reject) => {
+    const onReject = e => {
+      exceptions.push(e);
+
+      if (exceptions.length === iterable.length) {
+        reject(new AggregatedError(exceptions));
+      }
+    };
+
+    map(
+      p =>
+        resolveP(p)
+          .then(resolve)
+          .catch(onReject),
+      [...iterable]
+    );
+  });
+};
+
+export default anyPolyfill;
diff --git a/src/noneP.js b/src/noneP.js
new file mode 100644
index 0000000000..fe9b0559de
--- /dev/null
+++ b/src/noneP.js
@@ -0,0 +1,35 @@
+import { curryN, map, pipe } from 'ramda';
+
+import allP from './allP';
+import rejectP from './rejectP';
+import resolveP from './resolveP';
+
+/**
+ * Returns a Promise that is resolved with an array of reasons when all of the provided Promises reject, or rejected when any Promise is resolved.
+ * This pattern is like allP, but fulfillments and rejections are transposed - rejections become the fulfillment values and vice versa.
+ *
+ * @func noneP
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @category Function
+ * @sig [Promise a] -> Promise [a]
+ * @param {Iterable.<*>} iterable An iterable object such as an Array or String
+ * @return {Promise} A Promise that is resolved with a list of rejection reasons if all Promises are rejected, or a Promise that is rejected with the fulfillment value of the first Promise that resolves.
+ * @see {@link RA.allP|allP}
+ * @example
+ *
+ * RA.noneP([Promise.reject('hello'), Promise.reject('world')]); //=> Promise(['hello', 'world'])
+ * RA.noneP([]); //=> Promise([])
+ * RA.noneP([Promise.reject(), Promise.resolve('hello world')]); //=> Promise('hello world')
+ * RA.noneP([Promise.reject(), 'hello world']); //=> Promise('hello world')
+ */
+const noneP = curryN(
+  1,
+  pipe(
+    map(resolveP),
+    map(p => p.then(rejectP, resolveP)),
+    allP
+  )
+);
+
+export default noneP;
diff --git a/src/pathOrLazy.js b/src/pathOrLazy.js
new file mode 100644
index 0000000000..fdc403c521
--- /dev/null
+++ b/src/pathOrLazy.js
@@ -0,0 +1,30 @@
+import { curryN, identical, partial, pathOr, unary, when } from 'ramda';
+
+/**
+ * If the given, non-null object has a value at the given path, returns the value at that path.
+ * Otherwise returns the result of invoking the provided function with the object.
+ *
+ * @func pathOrLazy
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @category Object
+ * @typedef Idx = String | Int
+ * @sig ({a} -> a) -> [Idx] -> {a} -> a
+ * @param {Function} defaultFn The function that will return the default value.
+ * @param {Array} path The path to use.
+ * @param {Object} obj The object to retrieve the nested property from.
+ * @return {*} The data at `path` of the supplied object or the default value.
+ * @example
+ *
+ * RA.pathOrLazy(() => 'N/A', ['a', 'b'], {a: {b: 2}}); //=> 2
+ * RA.pathOrLazy(() => 'N/A', ['a', 'b'], {c: {b: 2}}); //=> "N/A"
+ */
+const pathOrLazy = curryN(3, function pathOrLazy(defaultFn, path, obj) {
+  return when(
+    identical(defaultFn),
+    partial(unary(defaultFn), [obj]),
+    pathOr(defaultFn, path, obj)
+  );
+});
+
+export default pathOrLazy;
diff --git a/src/subtractNum.js b/src/subtractNum.js
new file mode 100644
index 0000000000..fdf9631811
--- /dev/null
+++ b/src/subtractNum.js
@@ -0,0 +1,20 @@
+import { flip, subtract } from 'ramda';
+
+/**
+ * Subtracts its first argument from its second argument.
+ *
+ * @func subtractNum
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @category Math
+ * @sig Number -> Number -> Number
+ * @param {number} subtrahend the number to subtract
+ * @param {number} minuend the number to subtract from
+ * @return {number} A number representing the difference of subtracting the subtrahend from the minuend
+ * @example
+ *
+ * RA.subtractNum(3, 5); //=> 2
+ */
+const subtractNum = flip(subtract);
+
+export default subtractNum;
diff --git a/src/toArray.js b/src/toArray.js
new file mode 100644
index 0000000000..fe09e1edf8
--- /dev/null
+++ b/src/toArray.js
@@ -0,0 +1,33 @@
+import { ifElse, values } from 'ramda';
+import curry1 from 'ramda/src/internal/_curry1';
+
+import isIterable from './isIterable';
+import isFunction from './isFunction';
+import polyfill from './internal/polyfills/Array.from';
+
+export const fromPolyfill = curry1(polyfill);
+
+const fromArray = isFunction(Array.from) ? curry1(Array.from) : fromPolyfill;
+
+/**
+ * Converts value to an array.
+ *
+ * @func toArray
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.22.0|v2.22.0}
+ * @category List
+ * @sig * -> [a]
+ * @param {*} val The value to convert
+ * @return {Array}
+ * @example
+ *
+ * RA.toArray([1, 2]); //=> [1, 2]
+ * RA.toArray({'foo': 1, 'bar': 2}); //=> [1, 2]
+ * RA.toArray('abc'); //=> ['a', 'b', 'c']
+ * RA.toArray(1); //=> []
+ * RA.toArray(null); //=> []
+ */
+
+const toArray = ifElse(isIterable, fromArray, values);
+
+export default toArray;
diff --git a/types/index.d.ts b/types/index.d.ts
index 4cec88cde7..cb46ee5521 100644
--- a/types/index.d.ts
+++ b/types/index.d.ts
@@ -35,6 +35,8 @@ declare namespace RamdaAdjunct {
 
     type Variadic<T1, T2> = (...args: T1[]) => T2;
 
+    type Pred = (...a: any[]) => boolean;
+
     interface Dictionary<T> { [key: string]: T; }
 
     type DictPred<T> = (value: T, key: string) => boolean;
@@ -445,6 +447,26 @@ declare namespace RamdaAdjunct {
         paths(ps: Array<Array<string | number>>, obj: object): any[];
         paths(ps: Array<Array<string | number>>): (obj: object) => any[];
 
+        /**
+         * If the given, non-null object has a value at the given path, returns the value at that path.
+         * Otherwise returns the result of invoking the provided function with the object.
+         */
+        pathOrLazy<T>(
+            defaultValueFn: () => T,
+            path: Array<number | string>,
+            obj: object
+        ): T;
+        pathOrLazy<T>(
+            defaultValueFn: () => T,
+            path: Array<number | string>
+        ): (obj: object) => T;
+        pathOrLazy<T>(
+            defaultValueFn: () => T
+        ): {
+            (path: Array<number | string>, obj: object): T;
+            (path: Array<number | string>): (obj: object) => T;
+        };
+
         /**
          * "lifts" a function to be the specified arity, so that it may "map over" objects that satisfy
          * the Apply spec of fantasy land.
@@ -782,6 +804,12 @@ declare namespace RamdaAdjunct {
          */
         allP<T>(iterable: Iterable<T>): Promise<T[]>;
 
+        /**
+         * Returns a Promise that is resolved with an array of reasons when all of the provided Promises reject, or rejected when any Promise is resolved.
+         * This pattern is like allP, but fulfillments and rejections are transposed - rejections become the fulfillment values and vice versa.
+         */
+        noneP<T>(iterable: Iterable<T | Promise<T>>): Promise<T[]>;
+
        /**
         * allSettledP returns a promise that is fulfilled with an array of promise state snapshots,
         * but only after all the original promises have settled, i.e. become either fulfilled or rejected.
@@ -789,6 +817,12 @@ declare namespace RamdaAdjunct {
         */
         allSettledP<T>(iterable: Iterable<T>): Promise<Array<SettledPromise<T>>>;
 
+        /**
+         * Returns a promise that is fulfilled by the first given promise to be fulfilled,
+         * or rejected with an array of rejection reasons if all of the given promises are rejected.
+         */
+        anyP<T>(iterable: Iterable<T>): Promise<T>;
+
         /**
          * Composable shortcut for `Promise.resolve`.
          *
@@ -1043,8 +1077,8 @@ declare namespace RamdaAdjunct {
          * more arguments than functions, any remaining arguments are passed in to the combining
          * predicate untouched.
          */
-        argsPass(combiningPredicate: Function, predicates: Function[]): Function;
-        argsPass(combiningPredicate: Function): (predicates: Function[]) => Function;
+        argsPass<T>(combiningPredicate: (fn: (a: T) => boolean) => (list: T[]) => boolean, predicates: Pred[]): Pred;
+        argsPass<T>(combiningPredicate: (fn: (a: T) => boolean) => (list: T[]) => boolean): (predicates: Pred[]) => Pred;
 
         /**
          * Accepts a function with any arity and returns a function with arity of zero.
@@ -1108,6 +1142,12 @@ declare namespace RamdaAdjunct {
          */
         round(val: number): number;
 
+        /**
+         * Subtracts its first argument from its second argument.
+         */
+        subtractNum(subtrahend: number, minuend: number): number;
+        subtractNum(subtrahend: number): (minuend: number) => number;
+
         /**
          * Returns the smallest integer greater than or equal to a given number.
          *
@@ -1155,12 +1195,22 @@ declare namespace RamdaAdjunct {
          * Escapes the RegExp special characters.
          */
         escapeRegExp(val: string): string;
-        escapeRegExp<T>(val: T): T;
+
+        /**
+         * Divides two numbers, where the second number is divided by the first number.
+         */
+        divideNum(divisor: number, dividend: number): number;
+        divideNum(divisor: number): (dividend: number) => number;
 
         /**
          * Identity type.
          */
         Identity: Function;
+
+        /**
+         * Converts value to an array.
+         */
+        toArray<T>(iterable: Iterable<T> | T): any[];
     }
 }
 


Test patch:
diff --git a/test/anyP.js b/test/anyP.js
new file mode 100644
index 0000000000..f21c2ef4f7
--- /dev/null
+++ b/test/anyP.js
@@ -0,0 +1,191 @@
+import * as R from 'ramda';
+import { assert } from 'chai';
+
+import * as RA from '../src';
+import { anyPPolyfill, AggregatedError } from '../src/anyP';
+
+describe('anyP', function() {
+  context('given list of fulfilled promises', function() {
+    specify('should return first of fulfilled values', async function() {
+      const p1 = RA.resolveP(1);
+      const p2 = RA.resolveP(2);
+      const p3 = RA.resolveP(3);
+      const actual = [p1, p2, p3];
+      const expected = 1;
+
+      assert.strictEqual(await RA.anyP(actual), expected);
+    });
+  });
+
+  context('given list of rejected promises', function() {
+    specify(
+      'should fail with AggregatedError that contains a list of rejected reasons',
+      async function() {
+        const p1 = RA.rejectP(1);
+        const p2 = RA.rejectP(2);
+        const p3 = RA.rejectP(3);
+        const actual = [p1, p2, p3];
+        const expected = [1, 2, 3];
+
+        try {
+          await RA.anyP(actual);
+          throw new Error('resolving should fail');
+        } catch (e) {
+          assert.notStrictEqual(e.message, 'resolving should fail');
+          assert.instanceOf(e, AggregatedError);
+          assert.deepEqual(e.errors, expected);
+        }
+      }
+    );
+  });
+
+  context('given list of fulfilled and rejected promises', function() {
+    specify('should return first of fulfilled values', async function() {
+      const p1 = RA.rejectP(1);
+      const p2 = RA.resolveP(2);
+      const p3 = RA.rejectP(3);
+      const actual = [p1, p2, p3];
+      const expected = 2;
+
+      assert.strictEqual(await RA.anyP(actual), expected);
+    });
+  });
+
+  context('given list of values', function() {
+    specify('should return first of fulfilled values', async function() {
+      const v1 = 1;
+      const v2 = 2;
+      const v3 = 3;
+      const actual = [v1, v2, v3];
+      const expected = 1;
+
+      assert.strictEqual(await RA.anyP(actual), expected);
+    });
+  });
+
+  context('given list of values and promises', function() {
+    specify('should return first of fulfilled values', async function() {
+      const p1 = RA.resolveP(1);
+      const v2 = 2;
+      const p3 = RA.resolveP(3);
+      const actual = [p1, v2, p3];
+      const expected = 1;
+
+      assert.strictEqual(await RA.anyP(actual), expected);
+    });
+  });
+
+  context('given large number of promises', function() {
+    specify('should handle them properly', async function() {
+      const list = R.range(1, 1000);
+      const actual = list.map(RA.resolveP);
+      const expected = list[0];
+
+      assert.strictEqual(await RA.anyP(actual), expected);
+    });
+  });
+
+  it('should support placeholder to specify "gaps"', async function() {
+    const anyP = RA.anyP(R.__);
+    const p1 = RA.resolveP(1);
+    const v2 = 2;
+    const p3 = RA.resolveP(3);
+    const actual = [p1, v2, p3];
+    const expected = 1;
+
+    assert.strictEqual(await anyP(actual), expected);
+  });
+
+  context('anyPPolyfill', function() {
+    context('given list of fulfilled promises', function() {
+      specify('should return first of fulfilled values', async function() {
+        const p1 = RA.resolveP(1);
+        const p2 = RA.resolveP(2);
+        const p3 = RA.resolveP(3);
+        const actual = [p1, p2, p3];
+        const expected = 1;
+
+        assert.strictEqual(await anyPPolyfill(actual), expected);
+      });
+    });
+
+    context('given list of rejected promises', function() {
+      specify(
+        'should fail with AggregatedError that contains a list of rejected reasons',
+        async function() {
+          const p1 = RA.rejectP(1);
+          const p2 = RA.rejectP(2);
+          const p3 = RA.rejectP(3);
+          const actual = [p1, p2, p3];
+          const expected = [1, 2, 3];
+
+          try {
+            await anyPPolyfill(actual);
+            throw new Error('resolving should fail');
+          } catch (e) {
+            assert.notStrictEqual(e.message, 'resolving should fail');
+            assert.instanceOf(e, AggregatedError);
+            assert.deepEqual(e.errors, expected);
+          }
+        }
+      );
+    });
+
+    context('given list of fulfilled and rejected promises', function() {
+      specify('should return first of fulfilled values', async function() {
+        const p1 = RA.rejectP(1);
+        const p2 = RA.resolveP(2);
+        const p3 = RA.rejectP(3);
+        const actual = [p1, p2, p3];
+        const expected = 2;
+
+        assert.strictEqual(await anyPPolyfill(actual), expected);
+      });
+    });
+
+    context('given list of values', function() {
+      specify('should return first of fulfilled values', async function() {
+        const v1 = 1;
+        const v2 = 2;
+        const v3 = 3;
+        const actual = [v1, v2, v3];
+        const expected = 1;
+
+        assert.strictEqual(await anyPPolyfill(actual), expected);
+      });
+    });
+
+    context('given list of values and promises', function() {
+      specify('should return first of fulfilled values', async function() {
+        const p1 = RA.resolveP(1);
+        const v2 = 2;
+        const p3 = RA.resolveP(3);
+        const actual = [p1, v2, p3];
+        const expected = 1;
+
+        assert.strictEqual(await anyPPolyfill(actual), expected);
+      });
+    });
+
+    context('given large number of promises', function() {
+      specify('should handle them properly', async function() {
+        const list = R.range(1, 1000);
+        const actual = list.map(RA.resolveP);
+        const expected = list[0];
+
+        assert.strictEqual(await anyPPolyfill(actual), expected);
+      });
+    });
+
+    it('should support placeholder to specify "gaps"', async function() {
+      const anyP = anyPPolyfill(R.__);
+      const p1 = RA.resolveP(1);
+      const v2 = 2;
+      const p3 = RA.resolveP(3);
+      const actual = [p1, v2, p3];
+      const expected = 1;
+
+      assert.strictEqual(await anyP(actual), expected);
+    });
+  });
+});
diff --git a/test/divideNum.js b/test/divideNum.js
new file mode 100644
index 0000000000..1277b8baa2
--- /dev/null
+++ b/test/divideNum.js
@@ -0,0 +1,17 @@
+import * as RA from '../src';
+import eq from './shared/eq';
+
+describe('divideNum', function() {
+  it('should divide the second number by the first number', function() {
+    eq(RA.divideNum(2, 1), 0.5);
+    eq(RA.divideNum(2.0, 1.0), 0.5);
+    eq(RA.divideNum(0, 2.0), Infinity);
+    eq(RA.divideNum(0.0, 2.0), Infinity);
+    eq(RA.divideNum(-0.0, 2.0), -Infinity);
+  });
+
+  it('should curry', function() {
+    eq(RA.divideNum(2)(1), 0.5);
+    eq(RA.divideNum(2, 1), 0.5);
+  });
+});
diff --git a/test/noneP.js b/test/noneP.js
new file mode 100644
index 0000000000..63c58af52e
--- /dev/null
+++ b/test/noneP.js
@@ -0,0 +1,92 @@
+import * as R from 'ramda';
+
+import * as RA from '../src';
+import eq from './shared/eq';
+
+const delay = (ms = 0) => new Promise(res => setTimeout(res, ms));
+
+describe('noneP', function() {
+  context('given all promises reject', function() {
+    specify('should resolve with the reasons', async function() {
+      const reasons = await RA.noneP([
+        RA.rejectP(1),
+        RA.rejectP('b'),
+        RA.rejectP(),
+      ]);
+
+      eq(reasons, [1, 'b', undefined]);
+    });
+  });
+
+  context('given one promise resolves', function() {
+    specify('should reject with the fulfillment value', async function() {
+      const value = await RA.noneP([
+        RA.rejectP(),
+        RA.rejectP(),
+        RA.resolveP('oops'),
+      ]).then(RA.rejectP, R.identity);
+
+      eq(value, 'oops');
+    });
+  });
+
+  context('given multiple promises resolve', function() {
+    specify(
+      'should reject with the fulfillment value of the first resolved promise',
+      async function() {
+        const value = await RA.noneP([
+          RA.rejectP(),
+          delay(500).then(() => RA.resolveP('slow')),
+          delay(10).then(() => RA.resolveP('fast')),
+        ]).then(RA.rejectP, R.identity);
+
+        eq(value, 'fast');
+      }
+    );
+  });
+
+  context('given all promises resolve', function() {
+    specify(
+      'should reject with the fulfillment value of the first resolved promise',
+      async function() {
+        const value = await RA.noneP([
+          RA.resolveP(1),
+          RA.resolveP(2),
+          RA.resolveP(3),
+        ]).then(RA.rejectP, R.identity);
+
+        eq(value, 1);
+      }
+    );
+  });
+
+  context('given a value that is not a promise', function() {
+    specify('should reject with the non-promise value', async function() {
+      const value = await RA.noneP([RA.rejectP(1), 2, RA.rejectP(3)]).then(
+        RA.rejectP,
+        R.identity
+      );
+
+      eq(value, 2);
+    });
+  });
+
+  context('given an empty list', function() {
+    specify('should resolve with empty reasons', async function() {
+      const value = await RA.noneP([]);
+
+      eq(value, []);
+    });
+  });
+
+  it('should support placeholder to specify "gaps"', async function() {
+    const noneP = RA.noneP(R.__);
+    const p1 = RA.rejectP(1);
+    const v2 = RA.rejectP(2);
+    const p3 = RA.rejectP(3);
+    const actual = [p1, v2, p3];
+    const expected = [1, 2, 3];
+
+    eq(await noneP(actual), expected);
+  });
+});
diff --git a/test/pathOrLazy.js b/test/pathOrLazy.js
new file mode 100644
index 0000000000..c919a87cb1
--- /dev/null
+++ b/test/pathOrLazy.js
@@ -0,0 +1,65 @@
+import sinon from 'sinon';
+
+import * as RA from '../src';
+import eq from './shared/eq';
+
+describe('pathOrLazy', function() {
+  const obj = {
+    a: { b: { c: 1, d: ['x', 'y', 'z'] } },
+    e: NaN,
+    f: null,
+    g: undefined,
+  };
+
+  context('given requested path exists', function() {
+    specify('should return value at path', function() {
+      eq(RA.pathOrLazy(() => {}, ['a', 'b', 'c'], obj), 1);
+    });
+
+    specify('should not invoke lazy function', function() {
+      const fn = sinon.spy();
+      RA.pathOrLazy(fn, ['a', 'b', 'c'], obj);
+      eq(fn.notCalled, true);
+    });
+  });
+
+  context('given requested path does not exist', function() {
+    context('and the value is missing', function() {
+      specify('should return default value', function() {
+        eq(RA.pathOrLazy(() => 7, ['nonexistent'], obj), 7);
+      });
+    });
+
+    context('and the value is NaN', function() {
+      specify('should return default value', function() {
+        eq(RA.pathOrLazy(() => 7, ['e'], obj), 7);
+      });
+    });
+
+    context('and the value is null', function() {
+      specify('should return default value', function() {
+        eq(RA.pathOrLazy(() => 7, ['f'], obj), 7);
+      });
+    });
+
+    context('and the value is undefined', function() {
+      specify('should return default value', function() {
+        eq(RA.pathOrLazy(() => 7, ['g'], obj), 7);
+      });
+    });
+
+    specify('should pass object to lazy function as only argument', function() {
+      const fn = sinon.spy();
+      RA.pathOrLazy(fn, ['nonexistent'], obj);
+      eq(fn.calledOnceWithExactly(obj), true);
+    });
+  });
+
+  it('should curry', function() {
+    const fn = () => 7;
+    eq(RA.pathOrLazy(fn, ['a', 'b', 'd', 1], obj), 'y');
+    eq(RA.pathOrLazy(fn)(['a', 'b', 'd', 1], obj), 'y');
+    eq(RA.pathOrLazy(fn, ['a', 'b', 'd', 1])(obj), 'y');
+    eq(RA.pathOrLazy(fn)(['a', 'b', 'd', 1])(obj), 'y');
+  });
+});
diff --git a/test/subtractNum.js b/test/subtractNum.js
new file mode 100644
index 0000000000..a71dec408f
--- /dev/null
+++ b/test/subtractNum.js
@@ -0,0 +1,15 @@
+import * as RA from '../src';
+import eq from './shared/eq';
+
+describe('subtractNum', function() {
+  it('should subtract the first number from the second number', function() {
+    eq(RA.subtractNum(3, 5), 2);
+    eq(RA.subtractNum(5, 3), -2);
+    eq(RA.subtractNum(3, 'foo'), NaN);
+  });
+
+  it('should curry', function() {
+    eq(RA.subtractNum(3)(5), 2);
+    eq(RA.subtractNum(3, 5), 2);
+  });
+});
diff --git a/test/toArray.js b/test/toArray.js
new file mode 100644
index 0000000000..f2d33e2b9f
--- /dev/null
+++ b/test/toArray.js
@@ -0,0 +1,122 @@
+import { assert } from 'chai';
+import * as R from 'ramda';
+
+import * as RA from '../src';
+import { fromPolyfill } from '../src/toArray';
+
+describe('toArray', function() {
+  it('should support placeholder to specify "gaps"', function() {
+    const toArray = RA.toArray(R.__);
+
+    assert.sameOrderedMembers(toArray([1, 2, 3]), [1, 2, 3]);
+  });
+
+  context('given an object', function() {
+    specify('should return values', function() {
+      const actual = RA.toArray({ foo: 1, bar: 2 });
+
+      assert.sameOrderedMembers(actual, [1, 2]);
+    });
+  });
+
+  context('given an iterable', function() {
+    specify('should convert a map into an array of arrays', function() {
+      const map = new Map();
+      map.set('0', 'foo');
+      map.set(1, 'bar');
+
+      const actual = RA.toArray(map);
+
+      assert.sameDeepOrderedMembers(actual, [['0', 'foo'], [1, 'bar']]);
+    });
+
+    specify('should convert a set into an array', function() {
+      const set = new Set([1, 2, 3]);
+
+      const actual = RA.toArray(set);
+
+      assert.sameOrderedMembers(actual, [1, 2, 3]);
+    });
+
+    specify('should convert an iterator into an array', function() {
+      const object = { '0': 'a', length: 1 };
+      object[Symbol.iterator] = Array.prototype[Symbol.iterator];
+
+      const actual = RA.toArray(object);
+
+      assert.sameOrderedMembers(actual, ['a']);
+    });
+
+    specify('should return shallow copy of array', function() {
+      const array = [1, 2];
+      const actual = RA.toArray(array);
+
+      assert.sameOrderedMembers(actual, [1, 2]);
+      assert.notStrictEqual(actual, array);
+    });
+  });
+
+  context('given non object types', function() {
+    const assertIsEmptyArray = val => {
+      assert.isArray(val);
+      assert.isEmpty(val);
+    };
+
+    specify('should return an empty array', function() {
+      assertIsEmptyArray(RA.toArray(1));
+      assertIsEmptyArray(RA.toArray(undefined));
+      assertIsEmptyArray(RA.toArray(null));
+      assertIsEmptyArray(RA.toArray(true));
+    });
+  });
+
+  context('fromPolyfill', function() {
+    it('should support placeholder to specify "gaps"', function() {
+      const polyfill = fromPolyfill(R.__);
+
+      assert.sameOrderedMembers(polyfill([1, 2, 3]), [1, 2, 3]);
+    });
+
+    specify('should convert a map into an array of arrays', function() {
+      const map = new Map();
+      map.set('0', 'foo');
+      map.set(1, 'bar');
+
+      const actual = fromPolyfill(map);
+
+      assert.sameDeepOrderedMembers(actual, [['0', 'foo'], [1, 'bar']]);
+    });
+
+    specify('should convert a set into an array', function() {
+      const set = new Set([1, 2, 3]);
+
+      const actual = fromPolyfill(set);
+
+      assert.sameOrderedMembers(actual, [1, 2, 3]);
+    });
+
+    specify('should convert an iterator into an array', function() {
+      const object = { '0': 'a', length: 1 };
+      object[Symbol.iterator] = Array.prototype[Symbol.iterator];
+
+      const actual = fromPolyfill(object);
+
+      assert.sameOrderedMembers(actual, ['a']);
+    });
+
+    specify('should return a shallow copy of array', function() {
+      const array = [1, 2];
+      const actual = fromPolyfill(array);
+
+      assert.sameOrderedMembers(actual, [1, 2]);
+      assert.notStrictEqual(actual, array);
+    });
+
+    specify('should return an empty array', function() {
+      assert.sameOrderedMembers(fromPolyfill(1), []);
+      assert.sameOrderedMembers(fromPolyfill(false), []);
+      assert.sameOrderedMembers(fromPolyfill(x => x + 1), []);
+      assert.sameOrderedMembers(fromPolyfill({ a: 1 }), []);
+    });
+  });
+});
diff --git a/types/test/allEqual.ts b/types/test/allEqual.ts
index a7c1b244e2..9066cd6773 100644
--- a/types/test/allEqual.ts
+++ b/types/test/allEqual.ts
@@ -1,4 +1,12 @@
 import * as RA from 'ramda-adjunct';
 
+import { customIterable } from './helpers';
+
 RA.allEqual([1, 2, 3, 4]); // $ExpectType boolean
+RA.allEqual(['a', 'b', 'c', 'd']); // $ExpectType boolean
+RA.allEqual([1, 'b', 2, 'd']); // $ExpectType boolean
 RA.allEqual([]); // $ExpectType boolean
+
+RA.allEqual(1); // $ExpectError
+RA.allEqual({}); // $ExpectError
+RA.allEqual(customIterable); // $ExpectError
diff --git a/types/test/allEqualTo.ts b/types/test/allEqualTo.ts
index adf9999476..0ecee6a8da 100644
--- a/types/test/allEqualTo.ts
+++ b/types/test/allEqualTo.ts
@@ -1,6 +1,12 @@
 import * as RA from "ramda-adjunct";
 
+import { customIterable } from './helpers';
+
 RA.allEqualTo(1, [1, 2, 3, 4]); // $ExpectType boolean
 RA.allEqualTo(1, []); // $ExpectType boolean
 RA.allEqualTo(1)([1, 2, 3, 4]); // $ExpectType boolean
 RA.allEqualTo(1)([]); // $ExpectType boolean
+
+RA.allEqualTo(1, {}); // $ExpectError
+RA.allEqualTo(1, 'a'); // $ExpectError
+RA.allEqualTo(1, customIterable); // $ExpectError
diff --git a/types/test/allIdentical.ts b/types/test/allIdentical.ts
index 8c1dbb1283..05c14ca5b4 100644
--- a/types/test/allIdentical.ts
+++ b/types/test/allIdentical.ts
@@ -1,4 +1,10 @@
 import * as RA from "ramda-adjunct";
 
+import { customIterable } from './helpers';
+
 RA.allIdentical([1, 2, 3, 4]); // $ExpectType boolean
 RA.allIdentical([]); // $ExpectType boolean
+
+RA.allIdentical({}); // $ExpectError
+RA.allIdentical('a'); // $ExpectError
+RA.allIdentical(customIterable); // $ExpectError
diff --git a/types/test/allIdenticalTo.ts b/types/test/allIdenticalTo.ts
index afc213a29b..d140f05fec 100644
--- a/types/test/allIdenticalTo.ts
+++ b/types/test/allIdenticalTo.ts
@@ -1,4 +1,10 @@
 import * as RA from "ramda-adjunct";
 
+import { customIterable } from './helpers';
+
 RA.allIdenticalTo(1, [1, 2, 3, 4]); // $ExpectType boolean
 RA.allIdenticalTo(1, []); // $ExpectType boolean
+RA.allIdenticalTo(1)([]); // $ExpectType boolean
+
+RA.allIdenticalTo('a', [1, 2]); // $ExpectError
+RA.allIdenticalTo(1, customIterable); // $ExpectError
diff --git a/types/test/allP.ts b/types/test/allP.ts
index a479a8d71b..9d180261df 100644
--- a/types/test/allP.ts
+++ b/types/test/allP.ts
@@ -1,23 +1,13 @@
 import * as RA from 'ramda-adjunct';
 
-/**
- * Helpers.
- */
-
-const customIterable = {
-    *[Symbol.iterator](): IterableIterator<number> {
-        yield 1;
-        yield 2;
-        yield 3;
-    },
-};
-
-/**
- * Tests.
- */
+import { customIterable } from './helpers';
 
 RA.allP([1, 2]); // $ExpectType Promise<number[]>
 RA.allP(['a', 'b']); // $ExpectType Promise<string[]>
 RA.allP([1, 'a']); // $ExpectType Promise<(string | number)[]>
 RA.allP([]); // $ExpectType Promise<never[]>
 RA.allP(customIterable); // $ExpectType Promise<number[]>
+RA.allP('abc'); // $ExpectType Promise<string[]>
+
+RA.allP({}); // $ExpectError
+RA.allP(1); // $ExpectError
diff --git a/types/test/allSettledP.ts b/types/test/allSettledP.ts
index a9dbdd5d79..f29481b9b3 100644
--- a/types/test/allSettledP.ts
+++ b/types/test/allSettledP.ts
@@ -1,23 +1,13 @@
 import * as RA from 'ramda-adjunct';
 
-/**
- * Helpers.
- */
-
-const customIterable = {
-    *[Symbol.iterator](): IterableIterator<number> {
-        yield 1;
-        yield 2;
-        yield 3;
-    },
-};
-
-/**
- * Tests.
- */
+import { customIterable } from './helpers';
 
 RA.allSettledP([1, 2]); // $ExpectType Promise<SettledPromise<number>[]>
 RA.allSettledP(['a', 'b']); // $ExpectType Promise<SettledPromise<string>[]>
 RA.allSettledP([1, 'a']); // $ExpectType Promise<SettledPromise<string | number>[]>
 RA.allSettledP([]); // $ExpectType Promise<SettledPromise<never>[]>
 RA.allSettledP(customIterable); // $ExpectType Promise<SettledPromise<number>[]>
+RA.allSettledP('abc'); // $ExpectType Promise<SettledPromise<string>[]>
+
+RA.allSettledP({}); // $ExpectError
+RA.allSettledP(1); // $ExpectError
diff --git a/types/test/anyP.ts b/types/test/anyP.ts
new file mode 100644
index 0000000000..73d289df86
--- /dev/null
+++ b/types/test/anyP.ts
@@ -0,0 +1,12 @@
+import * as RA from 'ramda-adjunct';
+
+import { customIterable } from './helpers';
+
+RA.anyP([1, 2]); // $ExpectType Promise<number>
+RA.anyP(['a', 'b']); // $ExpectType Promise<string>
+RA.anyP([1, 'a']); // $ExpectType Promise<string | number>
+RA.anyP([]); // $ExpectType Promise<never>
+RA.anyP(customIterable); // $ExpectType Promise<number>
+
+RA.anyP({}); // $ExpectError
+RA.anyP(1); // $ExpectError
diff --git a/types/test/appendFlipped.ts b/types/test/appendFlipped.ts
new file mode 100644
index 0000000000..7a17ed09ed
--- /dev/null
+++ b/types/test/appendFlipped.ts
@@ -0,0 +1,16 @@
+import * as RA from 'ramda-adjunct';
+
+import { customIterable } from './helpers';
+
+RA.appendFlipped([1, 2], 3); // $ExpectType number[]
+RA.appendFlipped(['a', 'b'], 'c'); // $ExpectType string[]
+RA.appendFlipped(['a', 2], 3); // $ExpectType (string | number)[]
+RA.appendFlipped<number>([1, 2], 3); // $ExpectType number[]
+RA.appendFlipped<string>(['a', 'b'], 'c'); // $ExpectType string[]
+
+RA.appendFlipped<string>([1, 'b'], 'c'); // $ExpectError
+RA.appendFlipped<string>([1, 'b'])('c'); // $ExpectError
+RA.appendFlipped(1, 'c'); // $ExpectError
+RA.appendFlipped(1)('c'); // $ExpectError
+RA.appendFlipped(customIterable, 'c'); // $ExpectError
+RA.appendFlipped(customIterable)('c'); // $ExpectError
diff --git a/types/test/argsPass.ts b/types/test/argsPass.ts
new file mode 100644
index 0000000000..e59919ab5f
--- /dev/null
+++ b/types/test/argsPass.ts
@@ -0,0 +1,31 @@
+import * as RA from 'ramda-adjunct';
+
+/**
+ * Helpers.
+ */
+
+const combiningPredicate = <T>(predicateFn: Function) => (iterable: T[]): boolean =>
+    iterable.reduce((acc: boolean, val: T) => acc && predicateFn(val), true);
+
+const nonBoolPredicate = (val: string): string => val;
+
+const nonCurriedCombiningPredicate = <T>(predicateFn: Function, iterable: T[]): boolean =>
+    iterable.reduce((acc: boolean, val: T) => acc && predicateFn(val), true);
+
+/**
+ * Tests.
+ */
+
+RA.argsPass(combiningPredicate, [Boolean, Boolean])(1, 2); // $ExpectType boolean
+RA.argsPass(combiningPredicate)([Boolean, Boolean])(1, 2); // $ExpectType boolean
+RA.argsPass(combiningPredicate, [Boolean, Boolean])('a', 'b'); // $ExpectType boolean
+RA.argsPass(combiningPredicate)([Boolean, Boolean])('a', 'b'); // $ExpectType boolean
+RA.argsPass(combiningPredicate, [Boolean, Boolean])('a', 2); // $ExpectType boolean
+RA.argsPass(combiningPredicate)([Boolean, Boolean])('a', 2); // $ExpectType boolean
+RA.argsPass(combiningPredicate, [Boolean, Boolean])(); // $ExpectType boolean
+
+RA.argsPass(combiningPredicate)([Boolean, Boolean])(); // $ExpectType boolean
+
+RA.argsPass(nonCurriedCombiningPredicate, [Boolean, Boolean])(1, 2); // $ExpectError
+
+RA.argsPass(combiningPredicate, [nonBoolPredicate])(1, 2); // $ExpectError
diff --git a/types/test/ceil.ts b/types/test/ceil.ts
new file mode 100644
index 0000000000..3b04f825f4
--- /dev/null
+++ b/types/test/ceil.ts
@@ -0,0 +1,12 @@
+import * as RA from 'ramda-adjunct';
+
+RA.ceil(.95); // $ExpectType number
+RA.ceil(4); // $ExpectType number
+RA.ceil(7.004); // $ExpectType number
+RA.ceil(-0.95); // $ExpectType number
+RA.ceil(-4); // $ExpectType number
+RA.ceil(-7.004); // $ExpectType number
+
+RA.ceil(null); // $ExpectError
+RA.ceil(undefined); // $ExpectError
+RA.ceil('a'); // $ExpectError
diff --git a/types/test/divideNum.ts b/types/test/divideNum.ts
new file mode 100644
index 0000000000..6cbdbc0d13
--- /dev/null
+++ b/types/test/divideNum.ts
@@ -0,0 +1,22 @@
+import * as RA from 'ramda-adjunct';
+
+RA.divideNum(2, 1); // $ExpectType number
+RA.divideNum(2.0, 1.0); // $ExpectType number
+RA.divideNum(0, 2.0); // $ExpectType number
+RA.divideNum(0.0, 2.0); // $ExpectType number
+RA.divideNum(-0.0, 2.0); // $ExpectType number
+
+RA.divideNum(2)(1); // $ExpectType number
+RA.divideNum(2.0)(1.0); // $ExpectType number
+RA.divideNum(0)(2.0); // $ExpectType number
+RA.divideNum(0.0)(2.0); // $ExpectType number
+RA.divideNum(-0.0)(2.0); // $ExpectType number
+
+RA.divideNum('a', 'b'); // $ExpectError
+RA.divideNum('a')('b'); // $ExpectError
+RA.divideNum(1, undefined); // $ExpectError
+RA.divideNum(1)(undefined); // $ExpectError
+RA.divideNum(1, {}); // $ExpectError
+RA.divideNum(1)({}); // $ExpectError
+RA.divideNum({}, 1); // $ExpectError
+RA.divideNum({})(1); // $ExpectError
diff --git a/types/test/escapeRegExp.ts b/types/test/escapeRegExp.ts
index 7106e6ce24..dbe7f25797 100644
--- a/types/test/escapeRegExp.ts
+++ b/types/test/escapeRegExp.ts
@@ -1,8 +1,12 @@
 import * as RA from 'ramda-adjunct';
 
 RA.escapeRegExp('abc'); // $ExpectType string
-RA.escapeRegExp(1); // $ExpectType 1
-RA.escapeRegExp({}); // $ExpectType {}
-RA.escapeRegExp<number>(1); // $ExpectType number
-RA.escapeRegExp<null>(null); // $ExpectType null
-RA.escapeRegExp<undefined>(undefined); // $ExpectType undefined
+RA.escapeRegExp(''); // $ExpectType string
+
+// tslint:disable-next-line:no-construct
+RA.escapeRegExp(new String('')); // $ExpectError
+RA.escapeRegExp(1); // $ExpectError
+RA.escapeRegExp({}); // $ExpectError
+RA.escapeRegExp(null); // $ExpectError
+RA.escapeRegExp(undefined); // $ExpectError
+RA.escapeRegExp([]); // $ExpectError
diff --git a/types/test/helpers/index.ts b/types/test/helpers/index.ts
new file mode 100644
index 0000000000..bf3e77ae64
--- /dev/null
+++ b/types/test/helpers/index.ts
@@ -0,0 +1,7 @@
+export const customIterable: Iterable<number> = {
+    *[Symbol.iterator](): IterableIterator<number> {
+        yield 1;
+        yield 2;
+        yield 3;
+    },
+};
diff --git a/types/test/isSparseArray.ts b/types/test/isSparseArray.ts
index d713dbcdf9..06864906c6 100644
--- a/types/test/isSparseArray.ts
+++ b/types/test/isSparseArray.ts
@@ -1,11 +1,8 @@
 import * as RA from 'ramda-adjunct';
 
-/**
- * Tests.
- */
-
 RA.isSparseArray(new Array(3)); // $ExpectType boolean
-RA.isSparseArray([1, , 3]); // tslint:disable-line no-sparse-arrays
+// tslint:disable-next-line:no-sparse-arrays
+RA.isSparseArray([1, , 3]); // $ExpectType boolean
 
 RA.isSparseArray([1, 2, 3]); // $ExpectType boolean
 RA.isSparseArray(new Array()); // $ExpectType boolean
diff --git a/types/test/noneP.ts b/types/test/noneP.ts
new file mode 100644
index 0000000000..a176da7830
--- /dev/null
+++ b/types/test/noneP.ts
@@ -0,0 +1,14 @@
+import * as RA from 'ramda-adjunct';
+
+import { customIterable } from './helpers';
+
+RA.noneP([Promise.resolve(1), 2, RA.resolveP(3)]); // $ExpectType Promise<number[]>
+RA.noneP([Promise.reject<number>(1)]); // $ExpectType Promise<number[]>
+RA.noneP(['a', 'b']); // $ExpectType Promise<string[]>
+RA.noneP([1, 'a']); // $ExpectType Promise<(string | number)[]>
+RA.noneP([]); // $ExpectType Promise<never[]>
+RA.noneP(customIterable); // $ExpectType Promise<number[]>
+RA.noneP('abc'); // $ExpectType Promise<string[]>
+
+RA.noneP({}); // $ExpectError
+RA.noneP(1); // $ExpectError
diff --git a/types/test/pathOrLazy.ts b/types/test/pathOrLazy.ts
new file mode 100644
index 0000000000..bf6422d112
--- /dev/null
+++ b/types/test/pathOrLazy.ts
@@ -0,0 +1,6 @@
+import * as RA from 'ramda-adjunct';
+
+RA.pathOrLazy(() => 7, ['a', 1, 'b'], {}); // $ExpectType number
+RA.pathOrLazy(() => 7, ['a', 1, 'b'])({}); // $ExpectType number
+RA.pathOrLazy(() => 7)(['a', 1, 'b'], {}); // $ExpectType number
+RA.pathOrLazy(() => 7)(['a', 1, 'b'])({}); // $ExpectType number
diff --git a/types/test/subtractValue.ts b/types/test/subtractValue.ts
new file mode 100644
index 0000000000..0669919869
--- /dev/null
+++ b/types/test/subtractValue.ts
@@ -0,0 +1,16 @@
+import * as RA from 'ramda-adjunct';
+
+RA.subtractNum(3, 5); // $ExpectType number
+RA.subtractNum(5, 3); // $ExpectType number
+
+RA.subtractNum(3)(5); // $ExpectType number
+RA.subtractNum(5)(3); // $ExpectType number
+
+RA.subtractNum('a', 'b'); // $ExpectError
+RA.subtractNum('a')('b'); // $ExpectError
+RA.subtractNum(1, undefined); // $ExpectError
+RA.subtractNum(1)(undefined); // $ExpectError
+RA.subtractNum(1, {}); // $ExpectError
+RA.subtractNum(1)({}); // $ExpectError
+RA.subtractNum({}, 1); // $ExpectError
+RA.subtractNum({})(1); // $ExpectError
diff --git a/types/test/toArray.ts b/types/test/toArray.ts
new file mode 100644
index 0000000000..954b581f43
--- /dev/null
+++ b/types/test/toArray.ts
@@ -0,0 +1,7 @@
+import * as RA from 'ramda-adjunct';
+
+RA.toArray([1, 2, 3]); // $ExpectType any[]
+RA.toArray(null); // $ExpectType any[]
+RA.toArray(undefined); // $ExpectType any[]
+RA.toArray(1); // $ExpectType any[]
+RA.toArray({}); // $ExpectType any[]