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()
+ })
+ })
+})