diff --git a/package-lock.json b/package-lock.json index bb6e967..e7ec152 100644 --- a/package-lock.json +++ b/package-lock.json @@ -534,9 +534,9 @@ } }, "@octokit/core": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-2.4.1.tgz", - "integrity": "sha512-cpMyyiD5R0jDoYwtSKcbZYn4xFOw5f72jq/NcnOHt8DV584ff4C1t4whPI8jhXqaSu5vUGVvoke/mUdtO/T2Fg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-2.4.2.tgz", + "integrity": "sha512-fUx/Qt774cgiPhb3HRKfdl6iufVL/ltECkwkCg373I4lIPYvAPY4cbidVZqyVqHI+ThAIlFlTW8FT4QHChv3Sg==", "dev": true, "requires": { "@octokit/auth-token": "^2.4.0", @@ -544,18 +544,18 @@ "@octokit/request": "^5.3.1", "@octokit/types": "^2.0.0", "before-after-hook": "^2.1.0", - "universal-user-agent": "^4.0.0" + "universal-user-agent": "^5.0.0" } }, "@octokit/endpoint": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.2.tgz", - "integrity": "sha512-ICDcRA0C2vtTZZGud1nXRrBLXZqFayodXAKZfo3dkdcLNqcHsgaz3YSTupbURusYeucSVRjjG+RTcQhx6HPPcg==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.3.tgz", + "integrity": "sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ==", "dev": true, "requires": { "@octokit/types": "^2.0.0", "is-plain-object": "^3.0.0", - "universal-user-agent": "^4.0.0" + "universal-user-agent": "^5.0.0" }, "dependencies": { "is-plain-object": { @@ -584,6 +584,17 @@ "@octokit/request": "^5.3.0", "@octokit/types": "^2.0.0", "universal-user-agent": "^4.0.0" + }, + "dependencies": { + "universal-user-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", + "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + } } }, "@octokit/plugin-paginate-rest": { @@ -602,9 +613,9 @@ "dev": true }, "@octokit/plugin-rest-endpoint-methods": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.1.1.tgz", - "integrity": "sha512-mQT+6FL4dqOaUpzLbi6HW38DkLuOf4b303ryvMsciMbAMLLJr6iWsShWjCUFUsc9NXz49sZNuOMGTNym94Krag==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.2.0.tgz", + "integrity": "sha512-k+RLsegQn4s0wvAFYuk3R18FVKRg3ktvzIGW6MkmrSiSXBwYfaEsv4CuPysyef0DL+74DRj/X9MLJYlbleUO+Q==", "dev": true, "requires": { "@octokit/types": "^2.0.1", @@ -612,9 +623,9 @@ } }, "@octokit/request": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.1.tgz", - "integrity": "sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.2.tgz", + "integrity": "sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g==", "dev": true, "requires": { "@octokit/endpoint": "^5.5.0", @@ -624,7 +635,7 @@ "is-plain-object": "^3.0.0", "node-fetch": "^2.3.0", "once": "^1.4.0", - "universal-user-agent": "^4.0.0" + "universal-user-agent": "^5.0.0" }, "dependencies": { "is-plain-object": { @@ -668,9 +679,9 @@ } }, "@octokit/types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.1.1.tgz", - "integrity": "sha512-89LOYH+d/vsbDX785NOfLxTW88GjNd0lWRz1DVPVsZgg9Yett5O+3MOvwo7iHgvUwbFz0mf/yPIjBkUbs4kxoQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.3.1.tgz", + "integrity": "sha512-rvJP1Y9A/+Cky2C3var1vsw3Lf5Rjn/0sojNl2AjCX+WbpIHYccaJ46abrZoIxMYnOToul6S9tPytUVkFI7CXQ==", "dev": true, "requires": { "@types/node": ">= 8" @@ -905,9 +916,9 @@ } }, "@semantic-release/release-notes-generator": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.0.tgz", - "integrity": "sha512-fhMUC5gAYZ1tNUDarB85PdY2xQtrPJH1wkXfvLJuhNa3BLn2geMRwdX+BtyHUloQj5KXVB8OXIq5xXz0IGvhYA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.1.tgz", + "integrity": "sha512-bOoTiH6SiiR0x2uywSNR7uZcRDl22IpZhj+Q5Bn0v+98MFtOMhCxFhbrKQjhbYoZw7vps1mvMRmFkp/g6R9cvQ==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", @@ -942,6 +953,12 @@ "type-detect": "4.0.8" } }, + "@tootallnate/once": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz", + "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==", + "dev": true + }, "@types/babel__core": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", @@ -1040,9 +1057,9 @@ } }, "@types/node": { - "version": "13.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.4.tgz", - "integrity": "sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw==", + "version": "13.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", + "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==", "dev": true }, "@types/normalize-package-data": { @@ -1907,19 +1924,6 @@ } } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -2323,19 +2327,6 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escodegen": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.13.0.tgz", - "integrity": "sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -2379,6 +2370,21 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } } }, "exit": { @@ -2549,6 +2555,16 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "fast-check": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-1.22.2.tgz", + "integrity": "sha512-c5TzJXjw9q9BpUsszLvHHN1J/7kwPYbBvCuoc9+pGeF0DaKWBtK/htEHohz5Tfz4lDPI42oOla1HYeEndfYHKw==", + "dev": true, + "requires": { + "pure-rand": "^2.0.0", + "tslib": "^1.10.0" + } + }, "fast-deep-equal": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", @@ -2556,9 +2572,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.1.tgz", - "integrity": "sha512-XObtOQLTl4EptWcBbO9O6wd17VlVf9YXYY/zuzuu7nZfTsv4BL3KupMAMUVzH88CUwWkI3uNHBfxtfU8PveVTQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -2582,12 +2598,12 @@ "dev": true }, "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", + "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", "dev": true, "requires": { - "reusify": "^1.0.0" + "reusify": "^1.0.4" } }, "fb-watchman": { @@ -2959,9 +2975,9 @@ "dev": true }, "hosted-git-info": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.2.tgz", - "integrity": "sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", + "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", "dev": true, "requires": { "lru-cache": "^5.1.1" @@ -2983,11 +2999,12 @@ "dev": true }, "http-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.0.tgz", - "integrity": "sha512-GX0FA6+IcDf4Oxc/FBWgYj4zKgo/DnZrksaG9jyuQLExs6xlX+uI5lcA8ymM3JaZTRrF/4s2UX19wJolyo7OBA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { + "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } @@ -4255,6 +4272,21 @@ "whatwg-url": "^7.0.0", "ws": "^7.0.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "escodegen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + } } }, "jsesc": { @@ -4885,9 +4917,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "resolve": { @@ -4914,9 +4946,9 @@ "dev": true }, "npm": { - "version": "6.13.7", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.7.tgz", - "integrity": "sha512-X967EKTT407CvgrWFjXusnPh0VLERcmR9hZFSVgkEquOomZkvpwLJ5zrQ3qrG9SpPLKJE4bPLUu76exKQ4a3Cg==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.2.tgz", + "integrity": "sha512-eBVjzvGJ9v2/jRJZFtIkvUVKmJ0sCJNNwc9Z1gI6llwaT7EBYWJe5o61Ipc1QR0FaDCKM3l1GizI09Ro3STJEw==", "dev": true, "requires": { "JSONStream": "^1.3.5", @@ -4930,7 +4962,7 @@ "byte-size": "^5.0.1", "cacache": "^12.0.3", "call-limit": "^1.1.1", - "chownr": "^1.1.3", + "chownr": "^1.1.4", "ci-info": "^2.0.0", "cli-columns": "^3.1.2", "cli-table3": "^0.5.1", @@ -4947,10 +4979,10 @@ "fs-vacuum": "~1.2.10", "fs-write-stream-atomic": "~1.0.10", "gentle-fs": "^2.3.0", - "glob": "^7.1.4", + "glob": "^7.1.6", "graceful-fs": "^4.2.3", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.5", + "hosted-git-info": "^2.8.8", "iferr": "^1.0.2", "imurmurhash": "*", "infer-owner": "^1.0.4", @@ -4987,7 +5019,7 @@ "mississippi": "^3.0.0", "mkdirp": "~0.5.1", "move-concurrently": "^1.0.1", - "node-gyp": "^5.0.7", + "node-gyp": "^5.1.0", "nopt": "~4.0.1", "normalize-package-data": "^2.5.0", "npm-audit-report": "^1.3.2", @@ -4995,10 +5027,10 @@ "npm-install-checks": "^3.0.2", "npm-lifecycle": "^3.1.4", "npm-package-arg": "^6.1.1", - "npm-packlist": "^1.4.7", + "npm-packlist": "^1.4.8", "npm-pick-manifest": "^3.0.2", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.2", + "npm-profile": "^4.0.4", + "npm-registry-fetch": "^4.0.3", "npm-user-validate": "~1.0.0", "npmlog": "~4.1.2", "once": "~1.4.0", @@ -5015,7 +5047,7 @@ "read-installed": "~4.0.3", "read-package-json": "^2.1.1", "read-package-tree": "^5.3.1", - "readable-stream": "^3.4.0", + "readable-stream": "^3.6.0", "readdir-scoped-modules": "^1.1.0", "request": "^2.88.0", "retry": "^0.12.0", @@ -5320,7 +5352,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "dev": true }, @@ -6125,7 +6157,7 @@ } }, "glob": { - "version": "7.1.4", + "version": "7.1.6", "bundled": true, "dev": true, "requires": { @@ -6213,7 +6245,7 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.5", + "version": "2.8.8", "bundled": true, "dev": true }, @@ -6992,7 +7024,7 @@ } }, "node-gyp": { - "version": "5.0.7", + "version": "5.1.0", "bundled": true, "dev": true, "requires": { @@ -7106,12 +7138,13 @@ } }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "dev": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { @@ -7125,7 +7158,7 @@ } }, "npm-profile": { - "version": "4.0.2", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { @@ -7135,7 +7168,7 @@ } }, "npm-registry-fetch": { - "version": "4.0.2", + "version": "4.0.3", "bundled": true, "dev": true, "requires": { @@ -7640,7 +7673,7 @@ } }, "readable-stream": { - "version": "3.4.0", + "version": "3.6.0", "bundled": true, "dev": true, "requires": { @@ -8024,11 +8057,18 @@ } }, "string_decoder": { - "version": "1.2.0", + "version": "1.3.0", "bundled": true, "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true, + "dev": true + } } }, "stringify-package": { @@ -8910,6 +8950,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "pure-rand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-2.0.0.tgz", + "integrity": "sha512-mk98aayyd00xbfHgE3uEmAUGzz3jCdm8Mkf5DUXUhc7egmOaGG2D7qhVlynGenNe9VaNJZvzO9hkc8myuTkDgw==", + "dev": true + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -9241,9 +9287,9 @@ } }, "rollup": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.31.1.tgz", - "integrity": "sha512-2JREN1YdrS/kpPzEd33ZjtuNbOuBC3ePfuZBdKEybvqcEcszW1ckyVqzcEiEe0nE8sqHK+pbJg+PsAgRJ8+1dg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.0.tgz", + "integrity": "sha512-ab2tF5pdDqm2zuI8j02ceyrJSScl9V2C24FgWQ1v1kTFTu1UrG5H0hpP++mDZlEFyZX4k0chtGEHU2i+pAzBgA==", "dev": true, "requires": { "@types/estree": "*", @@ -9263,6 +9309,15 @@ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", "dev": true }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -10492,6 +10547,15 @@ "requires": { "has-flag": "^3.0.0" } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } } } }, @@ -10606,9 +10670,9 @@ } }, "universal-user-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", - "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", + "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", "dev": true, "requires": { "os-name": "^3.1.0" diff --git a/package.json b/package.json index e132083..2867011 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,13 @@ "@types/jest": "^25.1.3", "@types/node": "^13.7.4", "codecov": "^3.6.5", + "fast-check": "^1.22.2", "fs-extra": "^8.1.0", "istanbul": "^0.4.5", "jest": "25.1.0", "jest-junit": "^10.0.0", "rollup": "^1.31.1", + "rxjs": "^6.5.4", "semantic-release": "^17.0.4", "terser": "^4.6.3", "ts-jest": "^25.2.1", @@ -53,7 +55,8 @@ "typescript": "^3.7.5" }, "peerDependencies": { - "tslib": "^1.11.0" + "tslib": "^1.11.0", + "rxjs": "^6.0" }, "jest": { "testURL": "http://localhost", diff --git a/rollup.config.js b/rollup.config.js index 63b79be..9aee483 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -8,8 +8,16 @@ export default [ name: 'monads', file: `dist/${pkg.main}`, format: 'umd', + globals: { + rxjs: 'rxjs', + 'rxjs/operators': 'rxjs/operators' + }, sourcemap: true }, + external: [ + 'rxjs', + 'rxjs/operators' + ] }, { input: 'src/index.ts', @@ -17,5 +25,9 @@ export default [ { file: `dist/${pkg.module}`, format: 'es', sourcemap: true }, { file: `dist/${pkg.commonJs}`, format: 'cjs', sourcemap: true } ], + external: [ + 'rxjs', + 'rxjs/operators' + ], plugins: [typescript()] }] diff --git a/src/index.ts b/src/index.ts index 12e5b38..a72fb33 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,5 @@ export * from './monads/index' export * from './interfaces/index' +export { + maybeToObservable +} from './util/index' diff --git a/src/util/index.ts b/src/util/index.ts index 0e6ba39..3a101b4 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -6,4 +6,7 @@ export { curry5, curry6, curry7 -} from './curry' \ No newline at end of file +} from './curry' +export { + maybeToObservable +} from './maybe/maybe-to-observable' diff --git a/src/util/maybe-env.ts b/src/util/maybe-env.ts index a1c22e2..cca4c5a 100644 --- a/src/util/maybe-env.ts +++ b/src/util/maybe-env.ts @@ -1,4 +1,4 @@ -import { reader, maybe } from '..' +import { reader, maybe } from '../monads/index' export interface GetFromEnvironmentReader { readEnv(key: string): string | undefined @@ -15,4 +15,4 @@ const maybeFromEnvReader = (key: string) => (reader: GetFromEnvironmentReader) = export function maybeEnv(key: string, config?: GetFromEnvironmentReader) { return reader(maybeFromEnvReader(key)) .run(maybe(config).valueOr(DEFAULT_NODE_ENV_READER)) -} \ No newline at end of file +} diff --git a/src/util/maybe/maybe-to-observable.ts b/src/util/maybe/maybe-to-observable.ts new file mode 100644 index 0000000..2befbf9 --- /dev/null +++ b/src/util/maybe/maybe-to-observable.ts @@ -0,0 +1,28 @@ +import { IMaybe } from '../../interfaces' +import { EMPTY, Observable, of } from 'rxjs' +import { take } from 'rxjs/operators' + +/** + * Convert a Maybe into an observable + * + * If the Maybe is empty, the observable will immediately complete without emitting a value, otherwise it will emit + * the value contained and complete. + * + * @requires rxjs@^6.0 + * @example + * of(maybe(5)).pipe( + * flatMap(maybeToObservable) + * ).subscribe(a => console.log(a)) + * // prints 5 and completes + * + * of(maybe()).pipe( + * flatMap(maybeToObservable) + * ).subscribe(a => console.log(a)) + * // immediately completes with no emitted value + */ +export const maybeToObservable = (m: IMaybe): Observable => { + return m.isNone() + ? EMPTY + : of(m.valueOrThrow('isNone returned false for empty IMaybe.')) + .pipe(take(1)) +} diff --git a/test/util/maybe/maybe-to-observable.spec.ts b/test/util/maybe/maybe-to-observable.spec.ts new file mode 100644 index 0000000..d122ee3 --- /dev/null +++ b/test/util/maybe/maybe-to-observable.spec.ts @@ -0,0 +1,38 @@ +import { assert, integer, property } from 'fast-check' +import { maybe } from '../../../src/monads' +import { maybeToObservable } from '../../../src/util' +import { merge, of } from 'rxjs' +import { count } from 'rxjs/operators' + +describe('maybeToObservable', () => { + const numRuns = 100 + it('emits a value when containing a value', () => { + expect.assertions(numRuns) + assert( + property( + integer(), + a => { + const m = maybe(a) + const o = maybeToObservable(m) + o.subscribe(val => expect(val).toBe(a)) + } + ), { + numRuns + } + ) + }) + + it('immediately completes if there is no contained value', done => { + + const m = maybe() + const o = maybeToObservable(m) + const c = of(1) + + merge(o, c) + .pipe(count()) + .subscribe(count => { + expect(count).toBe(1) + done() + }) + }) +})