From 8ade367b3fc6502091c6271773b8d87af0763476 Mon Sep 17 00:00:00 2001 From: Vu Nguyen Date: Fri, 22 Jan 2021 16:37:59 -0800 Subject: [PATCH] Redux toolkit (#115) * add @redux/toolkit * bump react version to allow for hooks * add remote-redux devtools to help track extension state * add remote-redux server to allow for remote state viewing * setup react-redux for current user * setup watch mode for running redux remote dev watch to options * move screenshots --- .prettierignore | 3 +- DEVELOPMENT.md | 8 + package-lock.json | 1714 ++++++++++++++++++++++++- package.json | 16 +- screenshots/remote-redux-devtools.png | Bin 0 -> 96900 bytes screenshots/xrun-autocomplete.png | Bin 0 -> 28844 bytes src/components/Alert.tsx | 2 +- src/{ => config}/config.test.ts | 0 src/{ => config}/config.ts | 0 src/core/WakaTimeCore.ts | 2 +- src/popup.tsx | 11 +- src/reducers/currentUser.ts | 37 + src/stores/createStore.ts | 41 + src/utils/changeExtensionIcon.ts | 2 +- src/utils/changeExtensionState.ts | 2 +- src/utils/changeExtensionTooltip.ts | 2 +- src/utils/checkCurrentUser.ts | 16 + src/utils/isProd.ts | 1 + webpack.config.ts | 11 +- xclap.ts | 13 +- 20 files changed, 1859 insertions(+), 22 deletions(-) create mode 100644 screenshots/remote-redux-devtools.png create mode 100644 screenshots/xrun-autocomplete.png rename src/{ => config}/config.test.ts (100%) rename src/{ => config}/config.ts (100%) create mode 100644 src/reducers/currentUser.ts create mode 100644 src/stores/createStore.ts create mode 100644 src/utils/checkCurrentUser.ts create mode 100644 src/utils/isProd.ts diff --git a/.prettierignore b/.prettierignore index 445d61d..9b58816 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ coverage public vendor -assets/less \ No newline at end of file +assets/less +dist \ No newline at end of file diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 04e4412..ddd3740 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -4,3 +4,11 @@ - npm 6.7.0 It is suggested you use [nvm](https://github.com/nvm-sh/nvm) to manage your node version + +It is suggested to install this globally[@xarc/run-cli](https://www.npmjs.com/package/@xarc/run-cli) + +This will allow you to run varios tasks +![xrun auto complete](./screenshots/xrun-autocomplete.png) + +In devmode you can open [local remote devtools](http://localhost:8000) +![remote redux devtools](./screenshots/remote-redux-devtools.png) diff --git a/package-lock.json b/package-lock.json index 70ac50a..a2e2613 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6579,6 +6579,11 @@ } } }, + "@manaflair/redux-batch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@manaflair/redux-batch/-/redux-batch-1.0.0.tgz", + "integrity": "sha512-99bfmZ7xX3c8CWQ4C9iFm7Pte0pDfW/XJ3p1KEmjlJjf8nDUbW22n+FhO3buZKhgjoKKB2XGM46SaZFvNeL3QA==" + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -6605,6 +6610,17 @@ "fastq": "^1.6.0" } }, + "@reduxjs/toolkit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.5.0.tgz", + "integrity": "sha512-E/FUraRx+8guw9Hlg/Ja8jI/hwCrmIKed8Annt9YsZw3BQp+F24t5I5b2OWR6pkEHY4hn1BgP08FrTZFRKsdaQ==", + "requires": { + "immer": "^8.0.0", + "redux": "^4.0.0", + "redux-thunk": "^2.3.0", + "reselect": "^4.0.0" + } + }, "@sinonjs/commons": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", @@ -7028,6 +7044,16 @@ "integrity": "sha512-IG8AE1m2pWtPqQ7wXhFhy6Q59bwwnLwO36v5Rit2FrbXCIp8Sk8E2PfUCreyrdo17STwFSKDAkitVuVYbpEHvQ==", "dev": true }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dev": true, + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -7231,6 +7257,36 @@ "@types/react": "*" } }, + "@types/react-redux": { + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.15.tgz", + "integrity": "sha512-+piY42tUflPfI7y9Vy3UkG6MEMuJlrxfdtgeUcWmd5Z0qB57NXAPG6smkqu1DNXluo/KDyXPeRYhcFzMwt1BEA==", + "dev": true, + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/redux-logger": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.8.tgz", + "integrity": "sha512-zM+cxiSw6nZtRbxpVp9SE3x/X77Z7e7YAfHD1NkxJyJbAGSXJGF0E9aqajZfPOa/sTYnuwutmlCldveExuCeLw==", + "dev": true, + "requires": { + "redux": "^4.0.0" + } + }, + "@types/remote-redux-devtools": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/remote-redux-devtools/-/remote-redux-devtools-0.5.4.tgz", + "integrity": "sha512-OFbLVB30yemU46Qbx/s3qqSG2nkuSBQlOqf88y1U+hGiO2koz2pRYzZkB9hayTootHJWVdG4NGizlooQg7xFyA==", + "dev": true, + "requires": { + "redux": "^4.0.0" + } + }, "@types/shelljs": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.8.tgz", @@ -7738,6 +7794,15 @@ "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==", "dev": true }, + "@wry/equality": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", + "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", + "dev": true, + "requires": { + "tslib": "^1.9.3" + } + }, "@xarc/run": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@xarc/run/-/run-1.0.4.tgz", @@ -7936,6 +8001,16 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, "accord": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/accord/-/accord-0.28.0.tgz", @@ -8469,6 +8544,75 @@ } } }, + "apollo-cache-control": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz", + "integrity": "sha512-XJQs167e9u+e5ybSi51nGYr70NPBbswdvTEHtbtXbwkZ+n9t0SLPvUcoqceayOSwjK1XYOdU/EKPawNdb3rLQA==", + "dev": true, + "requires": { + "graphql-extensions": "^0.0.x" + } + }, + "apollo-link": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", + "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", + "dev": true, + "requires": { + "apollo-utilities": "^1.3.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.21" + } + }, + "apollo-server-core": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-1.4.0.tgz", + "integrity": "sha512-BP1Vh39krgEjkQxbjTdBURUjLHbFq1zeOChDJgaRsMxGtlhzuLWwwC6lLdPatN8jEPbeHq8Tndp9QZ3iQZOKKA==", + "dev": true, + "requires": { + "apollo-cache-control": "^0.1.0", + "apollo-tracing": "^0.1.0", + "graphql-extensions": "^0.0.x" + } + }, + "apollo-server-express": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-1.4.0.tgz", + "integrity": "sha512-zkH00nxhLnJfO0HgnNPBTfZw8qI5ILaPZ5TecMCI9+Y9Ssr2b0bFr9pBRsXy9eudPhI+/O4yqegSUsnLdF/CPw==", + "dev": true, + "requires": { + "apollo-server-core": "^1.4.0", + "apollo-server-module-graphiql": "^1.4.0" + } + }, + "apollo-server-module-graphiql": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz", + "integrity": "sha512-GmkOcb5he2x5gat+TuiTvabnBf1m4jzdecal3XbXBh/Jg+kx4hcvO3TTDFQ9CuTprtzdcVyA11iqG7iOMOt7vA==", + "dev": true + }, + "apollo-tracing": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.1.4.tgz", + "integrity": "sha512-Uv+1nh5AsNmC3m130i2u3IqbS+nrxyVV3KYimH5QKsdPjxxIQB3JAT+jJmpeDxBel8gDVstNmCh82QSLxLSIdQ==", + "dev": true, + "requires": { + "graphql-extensions": "~0.0.9" + } + }, + "apollo-utilities": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", + "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", + "dev": true, + "requires": { + "@wry/equality": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.10.0" + } + }, "append-transform": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", @@ -8608,6 +8752,12 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, "array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", @@ -9856,6 +10006,21 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -9950,6 +10115,32 @@ "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -10383,6 +10574,12 @@ "isarray": "^1.0.0" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -10407,6 +10604,12 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -10623,6 +10826,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -10753,6 +10962,12 @@ } } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "chrome-trace-event": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", @@ -11113,6 +11328,12 @@ "marked-terminal": "^3.3.0" } }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -11424,6 +11645,21 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -11433,6 +11669,18 @@ "safe-buffer": "~5.1.1" } }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -11577,6 +11825,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -11887,6 +12145,11 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -11896,6 +12159,12 @@ "type-detect": "^4.0.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -12037,12 +12306,24 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "deprecated": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", "dev": true }, + "deprecated-decorator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", + "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=", + "dev": true + }, "deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", @@ -12065,6 +12346,12 @@ "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -12080,6 +12367,12 @@ "repeating": "^2.0.0" } }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -12305,6 +12598,27 @@ "safer-buffer": "^2.1.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, "electron-to-chromium": { "version": "1.3.634", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", @@ -12352,6 +12666,12 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, "end-of-stream": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", @@ -12463,6 +12783,12 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -13508,6 +13834,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, "events": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", @@ -13606,6 +13938,64 @@ } } }, + "expirymanager": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/expirymanager/-/expirymanager-0.9.4.tgz", + "integrity": "sha512-bKcLuZPTs9mFxQ2VJPYJCMuGVAM9Ah6KfezbDA3IegbGeqR39WdPi+T7GgDGVuBPjYDFsSP/va5csiNVCGT1Mw==", + "dev": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -13633,6 +14023,17 @@ } } }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -13926,6 +14327,21 @@ "repeat-string": "^1.5.2" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -14371,6 +14787,12 @@ "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, + "fleximap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fleximap/-/fleximap-1.0.0.tgz", + "integrity": "sha512-zg/PthjBzESYKomTw/wivo8Id6B+obVkWriIzDuRfuw4wxEIV2/0D/NIGf+LKcGTTifHRfw73+oAAQozZ9MAhA==", + "dev": true + }, "follow-redirects": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", @@ -14426,6 +14848,12 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -14435,6 +14863,12 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, "fs-extra": { "version": "0.16.5", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz", @@ -14466,6 +14900,15 @@ } } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -14630,6 +15073,12 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-params": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/get-params/-/get-params-0.1.2.tgz", + "integrity": "sha1-uuDfq6WIoMYNeDTA2Nwv9g7u8v4=", + "dev": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -14657,6 +15106,12 @@ "assert-plus": "^1.0.0" } }, + "getport": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getport/-/getport-0.1.0.tgz", + "integrity": "sha1-q93z1dHnfdlnzPorA2oKH7Jv1/c=", + "dev": true + }, "git-hooks-list": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", @@ -15093,6 +15548,47 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, + "graphql": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", + "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", + "dev": true, + "requires": { + "iterall": "^1.2.1" + } + }, + "graphql-extensions": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.0.10.tgz", + "integrity": "sha512-TnQueqUDCYzOSrpQb3q1ngDSP2otJSF+9yNLrQGPzkMsvnQ+v6e2d5tl+B35D4y+XpmvVnAn4T3ZK28mkILveA==", + "dev": true, + "requires": { + "core-js": "^2.5.3", + "source-map-support": "^0.5.1" + } + }, + "graphql-server-express": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/graphql-server-express/-/graphql-server-express-1.4.1.tgz", + "integrity": "sha512-7HEIz2USTCXgk4YMKIcOVUdVZQT429nZnPQr4Gqp5pydZ08KJM9Y2sl9+VU+3a91HGKyrtF04eUumuYeS2fDcg==", + "dev": true, + "requires": { + "apollo-server-express": "^1.4.0" + } + }, + "graphql-tools": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz", + "integrity": "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==", + "dev": true, + "requires": { + "apollo-link": "^1.2.14", + "apollo-utilities": "^1.0.1", + "deprecated-decorator": "^0.1.6", + "iterall": "^1.1.3", + "uuid": "^3.1.0" + } + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -16102,6 +16598,14 @@ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -16161,6 +16665,27 @@ "readable-stream": "1.1" } }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -16338,6 +16863,15 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -16345,6 +16879,11 @@ "dev": true, "optional": true }, + "immer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.0.tgz", + "integrity": "sha512-jm87NNBAIG4fHwouilCHIecFXp5rMGkiFrAuhVO685UnMAlOneEAnOyzPt8OnP47TC11q/E7vpzZe0WvwepFTg==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16437,6 +16976,125 @@ "source-map": "~0.5.3" } }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } + } + }, "insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", @@ -16537,6 +17195,12 @@ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, "is": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", @@ -17094,6 +17758,12 @@ "handlebars": "^4.0.3" } }, + "iterall": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", + "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", + "dev": true + }, "jaro-winkler": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/jaro-winkler/-/jaro-winkler-0.2.8.tgz", @@ -19619,6 +20289,12 @@ "esprima": "^4.0.0" } }, + "jsan": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/jsan/-/jsan-3.1.13.tgz", + "integrity": "sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g==", + "dev": true + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -19786,6 +20462,32 @@ "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", "dev": true }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -19882,6 +20584,27 @@ "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==", "dev": true }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kew": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", @@ -19912,6 +20635,91 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "knex": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.15.2.tgz", + "integrity": "sha1-YFm4dIlgX0zIdZmm0qnSZXCek0A=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "bluebird": "^3.5.1", + "chalk": "2.3.2", + "commander": "^2.16.0", + "debug": "3.1.0", + "inherits": "~2.0.3", + "interpret": "^1.1.0", + "liftoff": "2.5.0", + "lodash": "^4.17.10", + "minimist": "1.2.0", + "mkdirp": "^0.5.1", + "pg-connection-string": "2.0.0", + "tarn": "^1.1.4", + "tildify": "1.2.0", + "uuid": "^3.3.2", + "v8flags": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + } + } + }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -20489,6 +21297,12 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linked-list": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/linked-list/-/linked-list-0.1.0.tgz", + "integrity": "sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78=", + "dev": true + }, "lint-staged": { "version": "10.5.3", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.3.tgz", @@ -21011,6 +21825,12 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -21023,6 +21843,36 @@ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", @@ -21046,6 +21896,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, "lodash.partialright": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", @@ -21445,6 +22301,12 @@ "safe-buffer": "^5.1.2" } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -21484,6 +22346,12 @@ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -21525,6 +22393,12 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -21568,8 +22442,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true + "dev": true }, "mime-db": { "version": "1.45.0", @@ -21625,6 +22498,33 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -21839,6 +22739,27 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -21854,12 +22775,24 @@ "duplexer2": "0.0.2" } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true }, + "nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -21917,6 +22850,49 @@ "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", "dev": true }, + "ncom": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ncom/-/ncom-1.0.3.tgz", + "integrity": "sha512-PfA7rjxxMAItsGo2qXrGn2GvKJIwN0bUTa3GehsblrKRVdCCEwB0QG2ymM6/DppQGUt7YqbfxQB7LaMWMiHHWQ==", + "dev": true, + "requires": { + "sc-formatter": "~3.0.1" + } + }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -22222,6 +23198,66 @@ "which": "^1.3.0" } }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "dev": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, "node-releases": { "version": "1.1.69", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", @@ -22341,6 +23377,32 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -22666,6 +23728,21 @@ } } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -22926,6 +24003,12 @@ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, "partialify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/partialify/-/partialify-3.1.6.tgz", @@ -23074,6 +24157,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "pg-connection-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.0.0.tgz", + "integrity": "sha1-Pu/lmX4G2Ugh5NUC5CtqHHP434I=", + "dev": true + }, "phantomjs": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-2.1.7.tgz", @@ -23561,6 +24650,16 @@ "react-is": "^16.8.1" } }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -23696,6 +24795,44 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, "react": { "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", @@ -23722,6 +24859,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-redux": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.2.tgz", + "integrity": "sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==", + "requires": { + "@babel/runtime": "^7.12.1", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + } + }, "react-transition-group": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz", @@ -24199,6 +25348,51 @@ "esprima": "~4.0.0" } }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-devtools-core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/redux-devtools-core/-/redux-devtools-core-0.2.1.tgz", + "integrity": "sha512-RAGOxtUFdr/1USAvxrWd+Gq/Euzgw7quCZlO5TgFpDfG7rB5tMhZUrNyBjpzgzL2yMk0eHnPYIGm7NkIfRzHxQ==", + "dev": true, + "requires": { + "get-params": "^0.1.2", + "jsan": "^3.1.13", + "lodash": "^4.17.11", + "nanoid": "^2.0.0", + "remotedev-serialize": "^0.1.8" + } + }, + "redux-devtools-instrument": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/redux-devtools-instrument/-/redux-devtools-instrument-1.10.0.tgz", + "integrity": "sha512-X8JRBCzX2ADSMp+iiV7YQ8uoTNyEm0VPFPd4T854coz6lvRiBrFSqAr9YAS2n8Kzxx8CJQotR0QF9wsMM+3DvA==", + "dev": true, + "requires": { + "lodash": "^4.17.19", + "symbol-observable": "^1.2.0" + } + }, + "redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "requires": { + "deep-diff": "^0.3.5" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -24299,6 +25493,54 @@ } } }, + "remote-redux-devtools": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/remote-redux-devtools/-/remote-redux-devtools-0.5.16.tgz", + "integrity": "sha512-xZ2D1VRIWzat5nsvcraT6fKEX9Cfi+HbQBCwzNnUAM8Uicm/anOc60XGalcaDPrVmLug7nhDl2nimEa3bL3K9w==", + "dev": true, + "requires": { + "jsan": "^3.1.13", + "querystring": "^0.2.0", + "redux-devtools-core": "^0.2.1", + "redux-devtools-instrument": "^1.9.4", + "rn-host-detect": "^1.1.5", + "socketcluster-client": "^14.2.1" + } + }, + "remotedev-serialize": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/remotedev-serialize/-/remotedev-serialize-0.1.9.tgz", + "integrity": "sha512-5tFdZg9mSaAWTv6xmQ7HtHjKMLSFQFExEZOtJe10PLsv1wb7cy7kYHtBvTYRro27/3fRGEcQBRNKSaixOpb69w==", + "dev": true, + "requires": { + "jsan": "^3.1.13" + } + }, + "remotedev-server": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/remotedev-server/-/remotedev-server-0.3.1.tgz", + "integrity": "sha512-EXgfeTEem2BJOZOkuU/uPiLumgSy1BkXtk0tnvJTeA91TuQ1Q0ipCWZsqBYxSq6CdH4BseuLvLQSbKgrvzzs6w==", + "dev": true, + "requires": { + "body-parser": "^1.15.0", + "chalk": "^1.1.3", + "cors": "^2.7.1", + "ejs": "^2.4.1", + "express": "^4.13.3", + "getport": "^0.1.0", + "graphql": "^0.13.0", + "graphql-server-express": "^1.4.0", + "graphql-tools": "^4.0.3", + "knex": "^0.15.2", + "lodash": "^4.15.0", + "minimist": "^1.2.0", + "morgan": "^1.7.0", + "semver": "^5.3.0", + "socketcluster": "^14.3.3", + "sqlite3": "^4.0.4", + "uuid": "^3.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -24425,6 +25667,11 @@ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, + "reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", + "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" + }, "resolve": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", @@ -24531,12 +25778,24 @@ "inherits": "^2.0.1" } }, + "rn-host-detect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rn-host-detect/-/rn-host-detect-1.2.0.tgz", + "integrity": "sha512-btNg5kzHcjZZ7t7mvvV/4wNJ9e3MPgrWivkRgWURzXL0JJ0pwWlU4zrbmdlz3HHzHOxhBhHB4D+/dbMFfu4/4A==", + "dev": true + }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", "dev": true }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-parallel": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", @@ -25069,6 +26328,126 @@ "xmlchars": "^2.2.0" } }, + "sc-auth": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/sc-auth/-/sc-auth-5.0.2.tgz", + "integrity": "sha512-Le3YBsFjzv5g6wIH6Y+vD+KFkK0HDXiaWy1Gm4nXtYebMQUyNYSf1cS83MtHrYzVEMlhYElRva1b0bvZ0hBqQw==", + "dev": true, + "requires": { + "jsonwebtoken": "^8.3.0", + "sc-errors": "^1.4.1" + }, + "dependencies": { + "sc-errors": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-1.4.1.tgz", + "integrity": "sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ==", + "dev": true + } + } + }, + "sc-broker": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/sc-broker/-/sc-broker-6.0.0.tgz", + "integrity": "sha512-c1mFIllUdPnEXDDFxTiX3obYW+cT0hb56fdNM5k+Xo5DI3+3Q9MYxTc8jD23qBIXOHokt4+d/CHocmZQPlAjAQ==", + "dev": true, + "requires": { + "async": "^2.6.1", + "expirymanager": "^0.9.3", + "fleximap": "^1.0.0", + "ncom": "^1.0.2", + "sc-errors": "^1.4.1", + "uuid": "3.1.0" + }, + "dependencies": { + "sc-errors": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-1.4.1.tgz", + "integrity": "sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ==", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + } + } + }, + "sc-broker-cluster": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/sc-broker-cluster/-/sc-broker-cluster-7.0.0.tgz", + "integrity": "sha512-DNG8sxiFwmRSMS0sUXA25UvDV8QTwEfYnzrutqbp4HlMU9JP65FBcs6GuNFPhjQN4s9VtwAE8BBaCNK5BjNV0g==", + "dev": true, + "requires": { + "async": "2.0.0", + "sc-broker": "^6.0.0", + "sc-channel": "^1.2.0", + "sc-errors": "^1.4.1", + "sc-hasher": "^1.0.1" + }, + "dependencies": { + "async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.0.tgz", + "integrity": "sha1-0JAK04WvE4BFQKEJxCFm4657K50=", + "dev": true, + "requires": { + "lodash": "^4.8.0" + } + }, + "sc-errors": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-1.4.1.tgz", + "integrity": "sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ==", + "dev": true + } + } + }, + "sc-channel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sc-channel/-/sc-channel-1.2.0.tgz", + "integrity": "sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + } + } + }, + "sc-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-2.0.1.tgz", + "integrity": "sha512-JoVhq3Ud+3Ujv2SIG7W0XtjRHsrNgl6iXuHHsh0s+Kdt5NwI6N2EGAZD4iteitdDv68ENBkpjtSvN597/wxPSQ==", + "dev": true + }, + "sc-formatter": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sc-formatter/-/sc-formatter-3.0.2.tgz", + "integrity": "sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A==", + "dev": true + }, + "sc-hasher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sc-hasher/-/sc-hasher-1.0.1.tgz", + "integrity": "sha512-whZWw70Gp5ibXXMcz6+Tulmk8xkwWMs42gG70p12hGscdUg8BICBvihS3pX2T3dWTw+yeZuGKiULr3MwL37SOQ==", + "dev": true + }, + "sc-simple-broker": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sc-simple-broker/-/sc-simple-broker-2.1.3.tgz", + "integrity": "sha512-ldt0ybOS5fVZSMea5Z8qVu7lmDBTy0qO9BD6TseJjRuPx+g+stfSqmPAb0RsCsQUXRH8A1koCbwsuUnI9BOxvw==", + "dev": true, + "requires": { + "sc-channel": "^1.2.0" + } + }, "scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", @@ -25128,6 +26507,35 @@ "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", "dev": true }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "sequencify": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", @@ -25143,6 +26551,18 @@ "randombytes": "^2.1.0" } }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -25178,6 +26598,12 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -25515,6 +26941,183 @@ "hoek": "2.x.x" } }, + "socketcluster": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/socketcluster/-/socketcluster-14.4.2.tgz", + "integrity": "sha512-Z45tSQ6K/XUEyftrID1hyBXSdaK/gDeq6BMqhNR3XvjnUQ6HkkeTrxZUoXIn/In/J8KLl1WRVtvZAB0Zf9pEjA==", + "dev": true, + "requires": { + "async": "2.3.0", + "fs-extra": "6.0.1", + "inquirer": "5.2.0", + "minimist": "1.2.0", + "sc-auth": "^5.0.2", + "sc-broker-cluster": "^7.0.0", + "sc-errors": "^1.4.1", + "socketcluster-server": "^14.7.0", + "uid-number": "0.0.6", + "uuid": "3.2.1" + }, + "dependencies": { + "async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.3.0.tgz", + "integrity": "sha1-EBPRBRBH3TIP4k5JTVxm7K9hR9k=", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "sc-errors": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-1.4.1.tgz", + "integrity": "sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ==", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + } + } + }, + "socketcluster-client": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-14.3.1.tgz", + "integrity": "sha512-Sd/T0K/9UlqTfz+HUuFq90dshA5OBJPQbdkRzGtcKIOm52fkdsBTt0FYpiuzzxv5VrU7PWpRm6KIfNXyPwlLpw==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "clone": "2.1.1", + "component-emitter": "1.2.1", + "linked-list": "0.1.0", + "querystring": "0.2.0", + "sc-channel": "^1.2.0", + "sc-errors": "^2.0.1", + "sc-formatter": "^3.0.1", + "uuid": "3.2.1", + "ws": "7.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "ws": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", + "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } + } + }, + "socketcluster-server": { + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/socketcluster-server/-/socketcluster-server-14.7.1.tgz", + "integrity": "sha512-KhZ1c6BKOtGaUWAA9Jdvvs+qSzMq/rBzB8O1Jpq4EpX4+zbq2B4igH6yxnflZw2EamAcAX06XokX+nre5PY+vA==", + "dev": true, + "requires": { + "async": "^3.1.0", + "base64id": "1.0.0", + "component-emitter": "1.2.1", + "lodash.clonedeep": "4.5.0", + "sc-auth": "^5.0.2", + "sc-errors": "^2.0.1", + "sc-formatter": "^3.0.2", + "sc-simple-broker": "^2.1.3", + "uuid": "3.2.1", + "ws": "7.1.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "ws": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", + "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -25700,6 +27303,16 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sqlite3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "dev": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -25755,6 +27368,12 @@ } } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, "stdout-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", @@ -26259,6 +27878,11 @@ } } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -26355,6 +27979,12 @@ "inherits": "2" } }, + "tarn": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.5.tgz", + "integrity": "sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g==", + "dev": true + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -26598,6 +28228,15 @@ "process": "~0.11.0" } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -26658,6 +28297,12 @@ } } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -26822,6 +28467,15 @@ "glob": "^7.1.2" } }, + "ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "dev": true, + "requires": { + "tslib": "^1.9.3" + } + }, "ts-jest": { "version": "26.4.4", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", @@ -27305,6 +28959,16 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -27345,6 +29009,12 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", @@ -27422,6 +29092,18 @@ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", "dev": true }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -27569,6 +29251,12 @@ "object.getownpropertydescriptors": "^2.1.0" } }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -27619,6 +29307,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -28773,6 +30467,22 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", + "dev": true + }, + "zen-observable-ts": { + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", + "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", + "dev": true, + "requires": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } } } } diff --git a/package.json b/package.json index 953cadf..296dd5c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "lint": "clap lint", "start": "clap build", "test": "clap test", - "validate": "npm ls" + "validate": "npm ls", + "watch": "clap watch" }, "husky": { "hooks": { @@ -25,15 +26,19 @@ ] }, "dependencies": { + "@manaflair/redux-batch": "^1.0.0", + "@reduxjs/toolkit": "^1.5.0", "bootstrap": "3.4.1", "classnames": "^2.2.5", "create-react-class": "^15.6.3", "font-awesome": "4.6.3", "jquery": "^3.0.0", "moment": "^2.13.0", - "react": "^16.2.0", - "react-dom": "^16.2.0", + "react": "^16.14.0", + "react-dom": "^16.14.0", + "react-redux": "^7.2.2", "react-transition-group": "^1.0.0", + "redux-logger": "^3.0.6", "webextension-polyfill-ts": "^0.22.0" }, "devDependencies": { @@ -54,6 +59,9 @@ "@types/node": "^14.14.20", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", + "@types/react-redux": "^7.1.15", + "@types/redux-logger": "^3.0.8", + "@types/remote-redux-devtools": "^0.5.4", "@types/shelljs": "^0.8.8", "@typescript-eslint/eslint-plugin": "^4.13.0", "@typescript-eslint/parser": "^4.13.0", @@ -94,6 +102,8 @@ "prettier": "^2.2.1", "prettier-plugin-packagejson": "^2.2.9", "prettier-plugin-sort-json": "0.0.1", + "remote-redux-devtools": "^0.5.16", + "remotedev-server": "^0.3.1", "rimraf": "^3.0.2", "shelljs": "^0.8.4", "sinon": "^4.2.2", diff --git a/screenshots/remote-redux-devtools.png b/screenshots/remote-redux-devtools.png new file mode 100644 index 0000000000000000000000000000000000000000..133e570cb0dd67b5727265a9fb5c65dea6c05ae3 GIT binary patch literal 96900 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 literal 0 HcmV?d00001 diff --git a/screenshots/xrun-autocomplete.png b/screenshots/xrun-autocomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..d75cefebda994116d175ca0f0df6aeb091d9973f GIT binary patch literal 28844 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 literal 0 HcmV?d00001 diff --git a/src/components/Alert.tsx b/src/components/Alert.tsx index 52b76e9..668f8c0 100644 --- a/src/components/Alert.tsx +++ b/src/components/Alert.tsx @@ -1,6 +1,6 @@ import React from 'react'; import classNames from 'classnames'; -import { SuccessOrFailType } from '../config'; +import { SuccessOrFailType } from '../config/config'; interface AlertProps { text: string; type: SuccessOrFailType; diff --git a/src/config.test.ts b/src/config/config.test.ts similarity index 100% rename from src/config.test.ts rename to src/config/config.test.ts diff --git a/src/config.ts b/src/config/config.ts similarity index 100% rename from src/config.ts rename to src/config/config.ts diff --git a/src/core/WakaTimeCore.ts b/src/core/WakaTimeCore.ts index 6402e2e..371a667 100644 --- a/src/core/WakaTimeCore.ts +++ b/src/core/WakaTimeCore.ts @@ -2,7 +2,7 @@ import axios, { AxiosResponse } from 'axios'; import moment from 'moment'; import { Tabs } from 'webextension-polyfill-ts'; import { User } from '../types/user'; -import config from '../config'; +import config from '../config/config'; import { SummariesPayload, GrandTotal } from '../types/summaries'; class WakaTimeCore { diff --git a/src/popup.tsx b/src/popup.tsx index 65e78c8..82ce831 100644 --- a/src/popup.tsx +++ b/src/popup.tsx @@ -1,14 +1,21 @@ import React from 'react'; import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import createStore from './stores/createStore'; +import checkCurrentUser from './utils/checkCurrentUser'; const container = document.getElementById('wakatime'); +const store = createStore('WakaTime-Options'); +checkCurrentUser(store)(30 * 1000); + const openOptions = async (): Promise => { await browser.runtime.openOptionsPage(); }; + ReactDOM.render( - <> +

POPUP GO HERE

Open options
- , +
, container, ); diff --git a/src/reducers/currentUser.ts b/src/reducers/currentUser.ts new file mode 100644 index 0000000..6d3a1e0 --- /dev/null +++ b/src/reducers/currentUser.ts @@ -0,0 +1,37 @@ +import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'; +import axios, { AxiosResponse } from 'axios'; +import { User, UserPayload } from '../types/user'; +import config from '../config/config'; + +type NameType = 'currentUser'; +export const name: NameType = 'currentUser'; + +export const fetchCurrentUser = createAsyncThunk(`[${name}]`, async () => { + const userPayload: AxiosResponse = await axios.get(config.currentUserApiUrl); + return userPayload.data.data; +}); + +export interface CurrentUser { + error?: unknown; + pending?: boolean; + user?: User; +} +export const initialState: CurrentUser = {}; + +const currentUser = createSlice({ + extraReducers: (builder) => { + builder.addCase(fetchCurrentUser.fulfilled, (state, { payload }) => { + state.user = payload; + }); + builder.addCase(fetchCurrentUser.rejected, (state, { error }) => { + state.user = undefined; + state.error = error; + }); + }, + initialState, + name, + reducers: {}, +}); + +export const actions = currentUser.actions; +export default currentUser.reducer; diff --git a/src/stores/createStore.ts b/src/stores/createStore.ts new file mode 100644 index 0000000..e5f9769 --- /dev/null +++ b/src/stores/createStore.ts @@ -0,0 +1,41 @@ +import { configureStore, Store } from '@reduxjs/toolkit'; +import logger from 'redux-logger'; +import { reduxBatch } from '@manaflair/redux-batch'; +import devToolsEnhancer from 'remote-redux-devtools'; +import currentUserReducer, { + initialState as InitalCurrentUser, + CurrentUser, +} from '../reducers/currentUser'; +import isProd from '../utils/isProd'; + +export interface RootState { + currentUser: CurrentUser; +} + +const preloadedState: RootState = { + currentUser: InitalCurrentUser, +}; + +export type RootStore = Store; +export default (appName: string): RootStore => { + const enhancers = [reduxBatch]; + if (!isProd()) { + enhancers.push( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + devToolsEnhancer({ hostname: 'localhost', name: appName, port: 8000, realtime: true }), + ); + } + const store = configureStore({ + devTools: true, + enhancers, + middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger), + preloadedState, + reducer: { + currentUser: currentUserReducer, + }, + }); + + return store; +}; diff --git a/src/utils/changeExtensionIcon.ts b/src/utils/changeExtensionIcon.ts index 5fdee48..0ea34c2 100644 --- a/src/utils/changeExtensionIcon.ts +++ b/src/utils/changeExtensionIcon.ts @@ -1,5 +1,5 @@ import { browser } from 'webextension-polyfill-ts'; -import config from '../config'; +import config from '../config/config'; type ColorIconTypes = 'gray' | 'red' | 'white' | ''; diff --git a/src/utils/changeExtensionState.ts b/src/utils/changeExtensionState.ts index 79400b7..b414822 100644 --- a/src/utils/changeExtensionState.ts +++ b/src/utils/changeExtensionState.ts @@ -1,4 +1,4 @@ -import config, { ApiStates } from '../config'; +import config, { ApiStates } from '../config/config'; import changeExtensionIcon from './changeExtensionIcon'; import changeExtensionTooltip from './changeExtensionTooltip'; diff --git a/src/utils/changeExtensionTooltip.ts b/src/utils/changeExtensionTooltip.ts index a30e13d..a01798e 100644 --- a/src/utils/changeExtensionTooltip.ts +++ b/src/utils/changeExtensionTooltip.ts @@ -1,5 +1,5 @@ import { browser } from 'webextension-polyfill-ts'; -import config from '../config'; +import config from '../config/config'; /** * It changes the extension title diff --git a/src/utils/checkCurrentUser.ts b/src/utils/checkCurrentUser.ts new file mode 100644 index 0000000..4821215 --- /dev/null +++ b/src/utils/checkCurrentUser.ts @@ -0,0 +1,16 @@ +import { RootStore } from '../stores/createStore'; +import { fetchCurrentUser } from '../reducers/currentUser'; + +type unsub = () => void; +export default (store: RootStore) => (time: number): unsub => { + const fetchUser = () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + store.dispatch(fetchCurrentUser()); + }; + fetchUser(); + const timeout = setInterval(fetchUser, time); + return () => { + clearInterval(timeout); + }; +}; diff --git a/src/utils/isProd.ts b/src/utils/isProd.ts new file mode 100644 index 0000000..30f0930 --- /dev/null +++ b/src/utils/isProd.ts @@ -0,0 +1 @@ +export default (): boolean => process.env.NODE_ENV !== 'development'; diff --git a/webpack.config.ts b/webpack.config.ts index f1e9651..307c9ce 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -19,14 +19,14 @@ const browserPolyfill = join( ); const getConfigByBrowser = (isProd: boolean, browser: BrowserTypes): webpack.Configuration => { const cfg: webpack.Configuration = { - devtool: isProd ? 'none' : 'inline-source-map', + devtool: 'inline-source-map', entry: { background: [join(srcFolder, 'background.ts')], devtools: [join(srcFolder, 'devtools.ts')], options: [join(srcFolder, 'options.tsx')], popup: [join(srcFolder, 'popup.tsx')], }, - mode: isProd ? 'production' : 'development', + // mode: isProd ? 'production' : 'development', module: { rules: [ { @@ -75,7 +75,10 @@ const getConfigByBrowser = (isProd: boolean, browser: BrowserTypes): webpack.Con }; return cfg; }; -export default (env: Record): webpack.Configuration[] => { - const isProd = env.mode === 'production'; +export default ( + env: Record, + arv: Record, +): webpack.Configuration[] => { + const isProd = arv.mode !== 'development'; return [getConfigByBrowser(isProd, 'chrome'), getConfigByBrowser(isProd, 'firefox')]; }; diff --git a/xclap.ts b/xclap.ts index 669558b..caaab16 100644 --- a/xclap.ts +++ b/xclap.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { join } from 'path'; import * as shelljs from 'shelljs'; -const { load, exec, serial } = require('@xarc/run'); +const { load, exec, serial, concurrent } = require('@xarc/run'); const makePublicFolder = () => { if (!fs.existsSync('public/js')) { @@ -31,18 +31,21 @@ const copyFromNodeModules = () => { }; load({ build: [serial('postinstall', exec('gulp')), 'webpack'], - clean: exec('rimraf public coverage vendor'), + clean: [exec('rimraf public coverage vendor'), 'clean:webpack'], + 'clean:webpack': exec('rimraf dist'), eslint: exec('eslint src . --fix'), less: exec('lessc assets/less/app.less public/css/app.css'), lint: ['prettier', 'eslint'], postinstall: ['clean', makePublicFolder, copyFromNodeModules, 'less'], prettier: [exec('prettier --write .')], + 'remotedev-server': exec('remotedev --hostname=localhost --port=8000'), test: ['build', 'lint', 'test-jest', 'test-js'], 'test-jest': [exec('jest --clearCache'), exec('jest --verbose --coverage')], 'test-jest-update': exec('jest -u'), 'test-js': 'phantomjs tests/run.js', + watch: concurrent('watch-jest', 'webpack:watch', 'remotedev-server'), 'watch-jest': exec('jest --watch'), - webpack: [exec('webpack --mode production')], - 'webpack:dev': [exec('webpack --mode development')], - 'webpack:watch': exec('webpack --mode development --watch'), + webpack: ['clean:webpack', exec('webpack --mode production')], + 'webpack:dev': ['clean:webpack', exec('webpack --mode development')], + 'webpack:watch': ['clean:webpack', exec('webpack --mode development --watch')], });