diff --git a/.corenode b/.corenode new file mode 100755 index 00000000..bedde2c0 --- /dev/null +++ b/.corenode @@ -0,0 +1,3 @@ +{ + "version": "0.13.0" +} diff --git a/.editorconfig b/.editorconfig deleted file mode 100755 index 7e3649ac..00000000 --- a/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab diff --git a/.env b/.env deleted file mode 100755 index 8637115c..00000000 --- a/.env +++ /dev/null @@ -1,2 +0,0 @@ -UMI_UI=false -NODE_ENV=development \ No newline at end of file diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 3efaa1b0..32dd8b43 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,29 @@ -# dependencies -/node_modules -/npm-debug.log* -/yarn-error.log -/yarn.lock +# Secrets +/**/**/.env +/**/**/origin.server +/**/**/server.manifest +/**/**/server.registry -# production -/build -/dist -/out +# Trash +/**/**/.crash.log +/**/**/.tmp +/**/**/.cache +/**/**/out +/**/**/.out +/**/**/dist +/**/**/node_modules +/**/**/corenode_modules +/**/**/.DS_Store +/**/**/package-lock.json +/**/**/yarn.lock +/**/**/.evite +/**/**/d_data -# umi -/packages/**/src/.umi -/packages/**/src/.umi-production -/packages/**/src/.umi-test -/packages/**/.env.local +# Logs +/**/**/npm-debug.log* +/**/**/yarn-error.log +/**/**/dumps.log +/**/**/corenode.log -/packages/*/src/.umi -/packages/*/src/.umi-production -/packages/*/src/.umi-test -/packages/*/.env.local - -/.env.local - -/packages/*/node_modules -/packages/**/node_modules \ No newline at end of file +# Temporal configurations +/**/**/.aliaser \ No newline at end of file diff --git a/.nodecore b/.nodecore deleted file mode 100755 index 8c0786d5..00000000 --- a/.nodecore +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.12.8", - "devRuntime": { - "headPackage": "ragestudio" - }, - "runtime": { - "src": "/src", - "UUID": "C8mVSr-4nmPp2-pr5Vrz-CU4kg4", - "stage": "alpha" - } -} \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100755 index 0d4222f5..00000000 --- a/.prettierignore +++ /dev/null @@ -1,8 +0,0 @@ -**/*.md -**/*.svg -**/*.ejs -**/*.html -package.json -.umi -.umi-production -.umi-test diff --git a/.prettierrc b/.prettierrc deleted file mode 100755 index 94beb148..00000000 --- a/.prettierrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "printWidth": 80, - "overrides": [ - { - "files": ".prettierrc", - "options": { "parser": "json" } - } - ] -} diff --git a/callback_codes.md b/callback_codes.md deleted file mode 100755 index d4353b54..00000000 --- a/callback_codes.md +++ /dev/null @@ -1,40 +0,0 @@ -# Callback Codes - -## 000 - 100 > Runtime - -| code | type | -|--|--| -| | | - - -## 100 - 200 > Operations results - -| code | type | description -|--|--|--| -| 100 | successful operation | | -| 110 | failed operation | unhandled | -| 115 | invalid operation | | -> API/WS Requests callbacks codes - -| | | | -|--|--|--| -| 130 | needs auth | | -| 131 | no user send | | -| 132 | no id_user send | | -| 133 | no password send | | -| 134 | no token send | | -| 135 | no server_key send | | -| 136 | no payload send | | -> API/WS Invalid requests - -| | | | -|--|--|--| -| 140 | invalid auth | -| 141 | invalid/notfound user | -| 142 | invalid/notfound id_user | -| 143 | invalid password | -| 144 | invalid/notfound token | -| 145 | invalid server_key | fails when the sended server_key is not valid | -| 146 | invalid payload | bad typeof / missing parameter / bad parameter | - -## 200 - 300 > Permissions diff --git a/dumps.log b/dumps.log new file mode 100644 index 00000000..0f05f56f --- /dev/null +++ b/dumps.log @@ -0,0 +1,4 @@ +> 2021-11-16T16:47:12.984Z (anonymous)[info] : sync versions on package.json [/home/srgooglo/repos/comty/packages/comty] > /home/srgooglo/repos/comty/packages/comty/package.json +> 2021-11-16T16:47:12.985Z (anonymous)[info] : sync versions on package.json [/home/srgooglo/repos/comty/packages/server] > /home/srgooglo/repos/comty/packages/server/package.json +> 2021-11-16T16:47:12.985Z (anonymous)[info] : sync versions on package.json [/home/srgooglo/repos/comty/packages/wrapper] > /home/srgooglo/repos/comty/packages/wrapper/package.json +> 2021-11-16T16:47:12.986Z (anonymous)[info] : sync versions on package.json [/home/srgooglo/repos/comty] > /home/srgooglo/repos/comty/package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d3657738..00000000 --- a/package-lock.json +++ /dev/null @@ -1,4170 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==" - }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" - }, - "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", - "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==" - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-do-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.12.1.tgz", - "integrity": "sha512-bpJ6Bfrzvdzb0vG6zBSNh3HLgFKh+S2CBpNmaLRjg2u7cNkzRPIqBjVURCmpG6pvPfKyxkizwbrXwpYtW3a9cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-do-expressions": "^7.12.1" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz", - "integrity": "sha512-z5Q4Ke7j0AexQRfgUvnD+BdCSgpTEKnqQ3kskk2jWtOBulxICzd1X9BGt7kmWftxZ2W3++OZdt5gtmC8KLxdRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-default-from": "^7.12.1" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-do-expressions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.12.1.tgz", - "integrity": "sha512-a9TknRXkzfetNjOWSWnPIG/Y7x+elzcmKng2Qpvh8QaqdPo0OABizTjco8YO8r5xZNQfE58YHq7lWR+PKwHyxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.1.tgz", - "integrity": "sha512-dP5eGg6tHEkhnRD2/vRG/KJKRSg8gtxu2i+P/8/yFPJn/CfPU5G0/7Gks2i3M6IOVAPQekmsLN9LPsmXFFL4Uw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", - "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", - "requires": { - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz", - "integrity": "sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-transform-typescript": "^7.12.1" - } - }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@nodecorejs/builder": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@nodecorejs/builder/-/builder-0.15.1.tgz", - "integrity": "sha512-XGhjU082rimBucHVUYcRqD3SDFUQfnIQae65A/49ssVCE2vFxhtozkfV3Zu9tPq+DteqjGuopm1NlcDk5npzfw==", - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-do-expressions": "^7.12.1", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-typescript": "^7.12.7", - "@babel/runtime": "^7.12.5", - "@nodecorejs/utils": "0.15.1", - "rimraf": "^3.0.2", - "slash2": "^2.0.0", - "through2": "^4.0.2", - "vinyl-fs": "^3.0.3" - } - }, - "@nodecorejs/cli": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@nodecorejs/cli/-/cli-0.15.1.tgz", - "integrity": "sha512-jEpsvtHlsOvYO7cby7MMaxYt4V8Z4AIxjwVZ2yVKT5O/8aUqC/1aWXp6mOjZVEFt0g8oVqatolbjXsLVvS6WiA==", - "requires": { - "7zip-bin": "^5.0.3", - "@nodecorejs/builder": "0.15.1", - "@nodecorejs/dot-runtime": "0.15.1", - "@nodecorejs/utils": "0.15.1", - "axios": "^0.21.0", - "chalk": "^4.1.0", - "cli-spinners": "^2.5.0", - "escape-goat": "^3.0.0", - "execa": "^4.1.0", - "inquirer": "^7.3.3", - "listr": "^0.14.3", - "log4js": "^6.3.0", - "new-github-release-url": "^1.0.0", - "node-7z": "^2.1.2", - "node-fetch": "^2.6.1", - "open": "^7.3.0", - "ora": "^5.1.0", - "prompt": "^1.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@nodecorejs/dot-runtime": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@nodecorejs/dot-runtime/-/dot-runtime-0.15.1.tgz", - "integrity": "sha512-KdCM24ha3jG07eMqUvJYXBzt3D726agDapDN3GWPPxBXSGU15p75dcnpM7YDQPUi72F4kP5jORVInLkYAUqYnA==", - "requires": { - "@nodecorejs/utils": "0.15.1" - } - }, - "@nodecorejs/utils": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@nodecorejs/utils/-/utils-0.15.1.tgz", - "integrity": "sha512-mZeNA/jFQWJZk/M4zRM7m7JTZ6fTul33D1HS1X20gaPI9nGVungfnBcAR19L29AdIzKhJDsgg6le8Pc43JpzEg==", - "requires": { - "@babel/core": "^7.12.9", - "chalk": "^4.1.0", - "color": "^3.1.3", - "lodash": "^4.17.15", - "stack-trace": "^0.0.10" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@ragestudio/nodecorejs": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@ragestudio/nodecorejs/-/nodecorejs-0.15.1.tgz", - "integrity": "sha512-xpvxEsZYTAI3DW3uacpiyihkJYXd+qqURv/t/Ysao4N6RNhPO+gVyNmzOb2Kvf9FT/1PWLMP1YTHpzw/4q6kWQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/runtime": "^7.12.5", - "@nodecorejs/builder": "0.15.1", - "@nodecorejs/cli": "0.15.1", - "@nodecorejs/dot-runtime": "0.15.1", - "@nodecorejs/utils": "0.15.1", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - } - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "requires": { - "any-observable": "^0.3.0" - } - }, - "@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.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 - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browserslist": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", - "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", - "requires": { - "caniuse-lite": "^1.0.30001173", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.634", - "escalade": "^3.1.1", - "node-releases": "^1.1.69" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" - }, - "call-bind": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz", - "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001173", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", - "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==" - }, - "catharsis": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", - "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==" - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concurrently": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "date-fns": "^2.0.1", - "lodash": "^4.17.15", - "read-pkg": "^4.0.1", - "rxjs": "^6.5.2", - "spawn-command": "^0.0.2-1", - "supports-color": "^6.1.0", - "tree-kill": "^1.2.2", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js-compat": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", - "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", - "requires": { - "browserslist": "^4.16.0", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, - "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==", - "dev": true - }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-equal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", - "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "electron-to-chromium": { - "version": "1.3.635", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.635.tgz", - "integrity": "sha512-RRriZOLs9CpW6KTLmgBqyUdnY0QNqqWs0HOtuQGGEMizOTNNn1P7sGRBxARnUeLejOsgwjDyRqT3E/CSst02ZQ==" - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", - "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js2xmlparser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", - "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", - "dev": true, - "requires": { - "xmlcreate": "^2.0.3" - } - }, - "jsdoc": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.6.tgz", - "integrity": "sha512-znR99e1BHeyEkSvgDDpX0sTiTu+8aQyDl9DawrkOGZTTW8hv0deIFXx87114zJ7gRaDZKVQD/4tr1ifmJp9xhQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.9.4", - "bluebird": "^3.7.2", - "catharsis": "^0.8.11", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^0.8.2", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.10.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "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=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "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=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" - }, - "lodash.defaultto": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/lodash.defaultto/-/lodash.defaultto-4.14.0.tgz", - "integrity": "sha1-OL09QlrO5zPg4ru9TkspcRzC7hE=" - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" - }, - "lodash.negate": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.negate/-/lodash.negate-3.0.2.tgz", - "integrity": "sha1-nIl7C/YQAZ4LQ7j/Pwr+89e2bzQ=" - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "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=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "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=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - } - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", - "dev": true - }, - "marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "ncp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", - "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" - }, - "new-github-release-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-1.0.0.tgz", - "integrity": "sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==", - "requires": { - "type-fest": "^0.4.1" - }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==" - } - } - }, - "node-7z": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-7z/-/node-7z-2.1.2.tgz", - "integrity": "sha512-mSmn90OIYKYIkuRwH1YRJl2sMwB9OlYhCQS4SPTOfxlzWwomoC1G9j4tsvAsv7vJPwvK7B76Z0a2dH5Mvwo91Q==", - "requires": { - "cross-spawn": "^7.0.2", - "debug": "^4.1.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.defaultto": "^4.14.0", - "lodash.flattendeep": "^4.4.0", - "lodash.isempty": "^4.4.0", - "lodash.negate": "^3.0.2", - "normalize-path": "^3.0.0" - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-releases": { - "version": "1.1.69", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", - "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "requires": { - "once": "^1.3.2" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz", - "integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "ora": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.2.0.tgz", - "integrity": "sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ==", - "requires": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "requires": { - "chalk": "^4.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "prompt": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.1.0.tgz", - "integrity": "sha512-ec1vUPXCplDBDUVD8uPa3XGA+OzLrO40Vxv3F1uxoiZGkZhdctlK2JotcHq5X6ExjocDOGwGdCSXloGNyU5L1Q==", - "requires": { - "colors": "^1.1.2", - "read": "1.0.x", - "revalidator": "0.1.x", - "utile": "0.3.x", - "winston": "2.x" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "requires": { - "value-or-function": "^3.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" - }, - "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "slash2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash2/-/slash2-2.0.0.tgz", - "integrity": "sha512-7ElvBydJPi3MHU/KEOblFSbO/skl4Z69jKkFCpYIYVOMSIZsKi4gYU43HGeZPmjxCXrHekoDAAewphPQNnsqtA==" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" - } - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "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==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "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==" - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "requires": { - "through2": "^2.0.3" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utile": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", - "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", - "requires": { - "async": "~0.9.0", - "deep-equal": "~0.2.1", - "i": "0.3.x", - "mkdirp": "0.x.x", - "ncp": "1.0.x", - "rimraf": "2.x.x" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "winston": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", - "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmlcreate": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", - "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - } - } -} diff --git a/package.json b/package.json index d39bc211..6c8e0fd2 100644 --- a/package.json +++ b/package.json @@ -6,27 +6,8 @@ "workspaces": [ "packages" ], - "lint-staged": { - "*.{js,jsx,less,md,json}": [ - "prettier --write" - ], - "*.ts?(x)": [ - "prettier --parser=typescript --write" - ] - }, - "scripts": { - "postinstall": "cd ./packages/comty && npm i", - "start": "cd ./packages/comty && npm start", - "update:deps": "yarn upgrade-interactive --latest" - }, - "devDependencies": { - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@types/node": "^14.14.20", - "concurrently": "^5.3.0", - "cross-env": "^7.0.3", - "jsdoc": "^3.6.5" - }, "dependencies": { - "@ragestudio/nodecorejs": "^0.15.1" - } + "corenode": "^0.28.26" + }, + "version": "0.13.0" } diff --git a/packages/app/.config.js b/packages/app/.config.js new file mode 100644 index 00000000..daabef03 --- /dev/null +++ b/packages/app/.config.js @@ -0,0 +1,69 @@ +const path = require("path") +const { builtinModules } = require("module") +const { node } = require("../desktop/.electron-vendors.cache.json") + +const aliases = { + "~/": `${path.resolve(__dirname, "src")}/`, + "__": __dirname, + "@src": path.resolve(__dirname, "src"), + schemas: path.resolve(__dirname, "constants"), + config: path.join(__dirname, "config"), + extensions: path.resolve(__dirname, "src/extensions"), + pages: path.join(__dirname, "src/pages"), + theme: path.join(__dirname, "src/theme"), + components: path.join(__dirname, "src/components"), + models: path.join(__dirname, "src/models"), + utils: path.join(__dirname, "src/utils"), +} + +module.exports = (config = {}) => { + if (!config.resolve) { + config.resolve = {} + } + if (!config.server) { + config.server = {} + } + + config.resolve.alias = aliases + config.server.port = process.env.listenPort ?? 8000 + config.server.host = "0.0.0.0" + config.server.fs = { + allow: [".."] + } + + config.envDir = path.join(__dirname, "environments") + + config.css = { + preprocessorOptions: { + less: { + javascriptEnabled: true, + } + } + } + + config.build = { + sourcemap: "inline", + target: `node${node}`, + outDir: "dist", + assetsDir: ".", + minify: process.env.MODE !== "development", + lib: { + entry: "src/index.ts", + formats: ["cjs"], + }, + rollupOptions: { + external: [ + "electron", + "electron-devtools-installer", + ...builtinModules.flatMap(p => [p, `node:${p}`]), + ], + output: { + entryFileNames: "[name].cjs", + }, + }, + emptyOutDir: true, + brotliSize: false, + } + + return config +} \ No newline at end of file diff --git a/packages/app/.gitignore b/packages/app/.gitignore new file mode 100644 index 00000000..d54f00b3 --- /dev/null +++ b/packages/app/.gitignore @@ -0,0 +1,8 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.vscode +yarn-error.log +ios/**/** \ No newline at end of file diff --git a/packages/app/capacitor.config.json b/packages/app/capacitor.config.json new file mode 100644 index 00000000..35900907 --- /dev/null +++ b/packages/app/capacitor.config.json @@ -0,0 +1,7 @@ +{ + "appId": "com.ragestudio.comty", + "appName": "Comty", + "bundledWebRuntime": true, + "overrideUserAgent": "capacitor", + "webDir": "dist" +} \ No newline at end of file diff --git a/packages/app/config/index.js b/packages/app/config/index.js new file mode 100644 index 00000000..32bfae3d --- /dev/null +++ b/packages/app/config/index.js @@ -0,0 +1,46 @@ +import packagejson from "../package.json" +import defaultTheme from "../constants/defaultTheme.json" +import defaultSoundPack from "../constants/defaultSoundPack.json" +import defaultRemotesOrigins from "../constants/defaultRemotesOrigins.json" + +export default { + package: packagejson, + defaultTheme: defaultTheme, + defaultSoundPack: defaultSoundPack, + author: "RageStudio© 2022", + logo: { + alt: "/logo_alt.svg", + full: "/logo_full.svg", + }, + api: { + address: defaultRemotesOrigins.http_api,//process.env.NODE_ENV !== "production" ? `http://${window.location.hostname}:3000` : defaultRemotesOrigins.http_api, + }, + ws: { + address: defaultRemotesOrigins.ws_api, //process.env.NODE_ENV !== "production" ? `ws://${window.location.hostname}:3001` : defaultRemotesOrigins.ws_api, + }, + app: { + title: packagejson.name, + siteName: "Comty", + mainPath: "/main", + storage: { + basics: "user", + token: "token", + session_frame: "session", + signkey: "certified", + settings: "app_settings" + }, + }, + i18n: { + languages: [ + { + locale: "en", + name: "English" + }, + { + locale: "es", + name: "Español" + } + ], + defaultLocale: "es", + } +} \ No newline at end of file diff --git a/packages/app/constants/defaultRemotesOrigins.json b/packages/app/constants/defaultRemotesOrigins.json new file mode 100644 index 00000000..82f6b81a --- /dev/null +++ b/packages/app/constants/defaultRemotesOrigins.json @@ -0,0 +1,4 @@ +{ + "http_api": "https://indev_api.comty.pw", + "ws_api": "wss://indev_ws.comty.pw" +} \ No newline at end of file diff --git a/packages/app/constants/defaultSettings.json b/packages/app/constants/defaultSettings.json new file mode 100644 index 00000000..5b8190b3 --- /dev/null +++ b/packages/app/constants/defaultSettings.json @@ -0,0 +1,18 @@ +{ + "forceMobileMode": false, + "notifications_sound": true, + "notifications_vibrate": true, + "notifications_sound_volume": 50, + "selection_longPress_timeout": 600, + "autoCollapseDelay": 500, + "autoCollapseDelayEnabled": true, + "haptic_feedback": false, + "collapseOnLooseFocus": true, + "language": "en", + "sidebarKeys": [ + "main", + "explore", + "saved", + "marketplace" + ] +} \ No newline at end of file diff --git a/packages/app/constants/defaultSoundPack.json b/packages/app/constants/defaultSoundPack.json new file mode 100644 index 00000000..467a491d --- /dev/null +++ b/packages/app/constants/defaultSoundPack.json @@ -0,0 +1,5 @@ +{ + "crash": "/sounds/crash.wav", + "error": "/sounds/error.wav", + "notification": "/sounds/notification.wav" +} \ No newline at end of file diff --git a/packages/app/constants/defaultTheme.json b/packages/app/constants/defaultTheme.json new file mode 100644 index 00000000..d17f94fb --- /dev/null +++ b/packages/app/constants/defaultTheme.json @@ -0,0 +1,37 @@ +{ + "staticVars": { + "primaryColor": "#ff6064", + "fontFamily": "'Varela Round', sans-serif" + }, + "defaultVariant": "light", + "variants": { + "light": { + "appColor": "#ff6064", + "background-color-primary": "#ffffff", + "background-color-primary2": "#f0f0f0", + "shadow-color": "#4b4b4b7c", + "background-color-accent": "#f0f2f5", + "background-color-contrast": "#4b4b4b", + "border-color": "#4b4b4b2a", + "sidebar-background-color": "var(--background-color-accent)", + "sidedrawer-background-color": "var(--background-color-accent)" + }, + "dark": { + "appColor": "#ff6064", + "text-color": "#d2d2d2", + "svg-color": "var(--text-color)", + "shadow-color": "#3535357c", + "background-color-primary": "#262626", + "background-color-primary2": "#2c2c2c", + "background-color-accent": "#353535", + "background_disabled": "#0A0A0A", + "background-color-contrast": "#ffffff", + "border-color": "#4b4b4b2a", + "header-text-color": "#d2d2d2", + "button-background-color": "var(--primaryColor)", + "button-text-color": "var(--background-color-contrast)", + "sidebar-background-color": "var(--background-color-accent)", + "sidedrawer-background-color": "var(--background-color-accent)" + } + } +} \ No newline at end of file diff --git a/packages/app/constants/pathDecorators.json b/packages/app/constants/pathDecorators.json new file mode 100644 index 00000000..665b6772 --- /dev/null +++ b/packages/app/constants/pathDecorators.json @@ -0,0 +1,14 @@ +{ + "main": { + "icon": "Home", + "title": "Main" + }, + "account": { + "icon": "User", + "title": "Account" + }, + "users": { + "icon": "Users", + "title": "Users" + } +} \ No newline at end of file diff --git a/packages/app/constants/routes.json b/packages/app/constants/routes.json new file mode 100644 index 00000000..8232575e --- /dev/null +++ b/packages/app/constants/routes.json @@ -0,0 +1,22 @@ +[ + { + "id": "main", + "title": "Dashboard", + "icon": "Home" + }, + { + "id": "explore", + "title": "Explore", + "icon": "Compass" + }, + { + "id": "saved", + "title": "Saved", + "icon": "Archive" + }, + { + "id": "marketplace", + "title": "Marketplace", + "icon": "Package" + } +] \ No newline at end of file diff --git a/packages/app/constants/settings/account.jsx b/packages/app/constants/settings/account.jsx new file mode 100644 index 00000000..2324a982 --- /dev/null +++ b/packages/app/constants/settings/account.jsx @@ -0,0 +1,103 @@ +import React from "react" +import { User } from "models" + +export default [ + { + "id": "username", + "group": "account.basicInfo", + "type": "Button", + "icon": "AtSign", + "title": "Username", + "description": "Your username is the name you use to log in to your account.", + "props": { + "disabled": true, + "children": "Change username", + }, + }, + { + "id": "fullName", + "group": "account.basicInfo", + "type": "Input", + "icon": "Edit3", + "title": "Name", + "description": "Change your public name", + "props": { + "placeholder": "Enter your name. e.g. John Doe", + }, + "defaultValue": async () => { + const userData = await User.data() + return userData.fullName + }, + "onUpdate": async (value) => { + const selfId = await User.selfUserId() + + const result = window.app.request.post.updateUser({ + _id: selfId, + update: { + fullName: value + } + }) + + if (result) { + return result + } + }, + "extraActions": [ + { + "id": "unset", + "icon": "Delete", + "title": "Unset", + "onClick": async () => { + window.app.request.post.unsetPublicName() + } + } + ], + "debounced": true, + }, + { + "id": "email", + "group": "account.basicInfo", + "type": "Input", + "icon": "Mail", + "title": "Email", + "description": "Change your email address", + "props": { + "placeholder": "Enter your email address", + }, + "defaultValue": async () => { + const userData = await User.data() + return userData.email + }, + "onUpdate": async (value) => { + const selfId = await User.selfUserId() + + const result = window.app.request.post.updateUser({ + _id: selfId, + update: { + email: value + } + }) + + if (result) { + return result + } + }, + "debounced": true, + }, + { + "id": "Avatar", + "group": "account.basicInfo", + "type": "ImageUpload", + "icon": "Image", + "title": "Avatar", + "description": "Change your avatar", + }, + { + "id": "primaryBadge", + "group": "account.basicInfo", + "type": "Select", + "icon": "Tag", + "title": "Primary badge", + "description": "Change your primary badge", + }, +] \ No newline at end of file diff --git a/packages/app/constants/settings/app.jsx b/packages/app/constants/settings/app.jsx new file mode 100644 index 00000000..9924605d --- /dev/null +++ b/packages/app/constants/settings/app.jsx @@ -0,0 +1,185 @@ +import React from "react" +import config from "config" +import { Select } from "antd" + +export default [ + { + "id": "language", + "storaged": true, + "group": "general", + "type": "Select", + "icon": "MdTranslate", + "title": "Language", + "description": "Choose a language for the application", + "props": { + children: config.i18n.languages.map((language) => { + return {language.name} + }) + }, + "emitEvent": "changeLanguage" + }, + { + "id": "forceMobileMode", + "storaged": true, + "group": "general", + "type": "Switch", + "icon": "MdSmartphone", + "title": "Force Mobile Mode", + "description": "Force the application to run in mobile mode.", + "emitEvent": "forceMobileMode" + }, + { + "id": "haptic_feedback", + "storaged": true, + "group": "general", + "type": "Switch", + "icon": "MdVibration", + "title": "Haptic Feedback", + "description": "Enable haptic feedback on touch events.", + }, + { + "id": "selection_longPress_timeout", + "storaged": true, + "group": "general", + "type": "Slider", + "icon": "MdTimer", + "title": "Selection press delay", + "description": "Set the delay before the selection trigger is activated.", + "props": { + min: 300, + max: 2000, + step: 100, + marks: { + 300: "0.3s", + 600: "0.6s", + 1000: "1s", + 1500: "1.5s", + 2000: "2s", + } + } + }, + { + "id": "notifications_sound", + "storaged": true, + "group": "notifications", + "type": "Switch", + "icon": "MdVolumeUp", + "title": "Notifications Sound", + "description": "Play a sound when a notification is received.", + }, + { + "id": "notifications_vibrate", + "storaged": true, + "group": "notifications", + "type": "Switch", + "icon": "MdVibration", + "title": "Vibration", + "description": "Vibrate the device when a notification is received.", + "emitEvent": "changeNotificationsVibrate" + }, + { + "id": "notifications_sound_volume", + "storaged": true, + "group": "notifications", + "type": "Slider", + "icon": "MdVolumeUp", + "title": "Sound Volume", + "description": "Set the volume of the sound when a notification is received.", + "props": { + tipFormatter: (value) => { + return `${value}%` + } + }, + "emitEvent": "changeNotificationsSoundVolume" + }, + { + "id": "edit_sidebar", + "storaged": true, + "group": "sidebar", + "type": "Button", + "icon": "Edit", + "title": "Edit Sidebar", + "emitEvent": "edit_sidebar", + "noStorage": true + }, + { + "id": "collapseOnLooseFocus", + "storaged": true, + "group": "sidebar", + "type": "Switch", + "icon": "Columns", + "title": "Auto Collapse", + "description": "Collapse the sidebar when loose focus", + "emitEvent": "settingChanged.sidebar_collapse", + }, + { + "id": "autoCollapseDelay", + "storaged": true, + "group": "sidebar", + "type": "Slider", + "icon": "Wh", + "dependsOn": { + "collapseOnLooseFocus": true + }, + "title": "Auto Collapse timeout", + "description": "Set the delay before the sidebar is collapsed", + "props": { + min: 0, + max: 2000, + step: 100, + marks: { + 0: "No delay", + 600: "0.6s", + 1000: "1s", + 1500: "1.5s", + 2000: "2s", + } + } + }, + { + "id": "reduceAnimations", + "storaged": true, + "group": "aspect", + "type": "Switch", + "icon": "MdOutlineAnimation", + "title": "Reduce animation", + "experimental": true + }, + { + "id": "darkMode", + "storaged": true, + "group": "aspect", + "type": "Switch", + "icon": "Moon", + "title": "Dark mode", + "emitEvent": "darkMode", + "experimental": true + }, + { + "id": "primaryColor", + "storaged": true, + "group": "aspect", + "type": "SliderColorPicker", + "title": "Primary color", + "description": "Change primary color of the application.", + "emitEvent": "modifyTheme", + "reloadValueOnUpdateEvent": "resetTheme", + "emissionValueUpdate": (value) => { + return { + primaryColor: value + } + } + }, + { + "id": "resetTheme", + "storaged": true, + "group": "aspect", + "type": "Button", + "title": "Reset theme", + "props": { + "children": "Default Theme" + }, + "emitEvent": "resetTheme", + "noUpdate": true, + } +] \ No newline at end of file diff --git a/packages/app/constants/settingsGroupsDecorator.json b/packages/app/constants/settingsGroupsDecorator.json new file mode 100644 index 00000000..4ae53ad4 --- /dev/null +++ b/packages/app/constants/settingsGroupsDecorator.json @@ -0,0 +1,22 @@ +{ + "general": { + "title": "General", + "icon": "Settings" + }, + "notifications": { + "title": "Notifications", + "icon": "Bell" + }, + "sidebar": { + "title": "Sidebar", + "icon": "Layout" + }, + "aspect": { + "title": "Aspect", + "icon": "Eye" + }, + "account.basicInfo": { + "title": "Basic Information", + "icon": "Info" + } +} \ No newline at end of file diff --git a/packages/app/index.html b/packages/app/index.html new file mode 100644 index 00000000..88cbff65 --- /dev/null +++ b/packages/app/index.html @@ -0,0 +1,12 @@ + + + + + + + + +
+ + + \ No newline at end of file diff --git a/packages/app/package.json b/packages/app/package.json new file mode 100644 index 00000000..e5517400 --- /dev/null +++ b/packages/app/package.json @@ -0,0 +1,101 @@ +{ + "name": "comty", + "version": "0.15.0", + "license": "MIT", + "scripts": { + "dev": "vite", + "dev:ssr": "vite-ssr", + "sync": "capacitor sync ios && capacitor sync android", + "build": "cross-env NODE_ENV=production vite build && yarn sync", + "build:dist": "cross-env NODE_ENV=production vite build", + "build:preview": "cross-env NODE_ENV=preview vite build && yarn sync", + "build:ssr": "cross-env NODE_ENV=production vite-ssr build && ./scripts/move-dist.sh", + "preview": "vite preview", + "capacitor": "capacitor" + }, + "peerDependencies": { + "react": "^16.8.6" + }, + "dependencies": { + "@ant-design/icons": "4.7.0", + "@capacitor/android": "^3.4.0", + "@capacitor/haptics": "^1.1.4", + "@capacitor/push-notifications": "^1.0.9", + "@capacitor/status-bar": "1.0.7", + "@capacitor/storage": "1.2.4", + "@corenode/utils": "0.28.26", + "@emotion/css": "11.0.0", + "@foxify/events": "2.0.1", + "@loadable/component": "5.15.2", + "antd": "^4.19.1", + "antd-mobile": "^5.0.0-rc.17", + "chart.js": "3.7.0", + "classnames": "2.3.1", + "evite": "0.9.5", + "faye": "1.4.0", + "feather-reactjs": "2.0.13", + "fuse.js": "6.5.3", + "global": "4.4.0", + "history": "5.2.0", + "hls.js": "^1.1.5", + "howler": "2.2.3", + "i18next": "21.6.6", + "js-cookie": "3.0.1", + "jwt-decode": "3.1.2", + "less": "4.1.2", + "linebridge": "0.10.13", + "moment": "2.29.1", + "mpegts.js": "^1.6.10", + "nprogress": "^0.2.0", + "plyr": "^3.6.12", + "prop-types": "^15.8.1", + "qrcode": "1.5.0", + "rc-animate": "^3.1.1", + "rc-util": "^5.19.3", + "rc-virtual-list": "^3.4.4", + "react": "17.0.2", + "react-beautiful-dnd": "13.1.0", + "react-chartjs-2": "4.0.1", + "react-color": "2.19.3", + "react-contexify": "5.0.0", + "react-dom": "17.0.2", + "react-draggable": "4.4.4", + "react-helmet": "6.1.0", + "react-i18next": "11.15.3", + "react-icons": "4.3.1", + "react-intersection-observer": "8.33.1", + "react-json-view": "1.21.3", + "react-lazy-load-image-component": "^1.5.1", + "react-motion": "0.5.2", + "react-reveal": "1.2.2", + "react-rnd": "10.3.5", + "react-router": "6.2.1", + "react-router-config": "^5.1.1", + "react-router-dom": "6.2.1", + "react-virtualized": "^9.22.3", + "store": "^2.0.12", + "styled-components": "^5.3.3", + "vite-ssr": "0.15.0" + }, + "devDependencies": { + "@capacitor/cli": "3.2.2", + "@capacitor/core": "3.2.2", + "@capacitor/ios": "3.0.2", + "@capacitor/project": "1.0.28", + "@types/jest": "^26.0.24", + "@types/node": "^16.4.10", + "@types/react": "^17.0.15", + "@types/react-dom": "^17.0.9", + "@types/react-router-config": "^5.0.3", + "@types/react-router-dom": "^5.1.8", + "@typescript-eslint/eslint-plugin": "^4.29.0", + "@vitejs/plugin-react-refresh": "^1.3.6", + "corenode": "0.28.26", + "cross-env": "^7.0.3", + "express": "^4.17.1", + "typescript": "^4.3.5", + "vite": "2.7.13", + "vite-plugin-next-react-router": "^0.6.2", + "vite-plugin-pages": "0.12.x" + } +} diff --git a/packages/app/public/broken-image.svg b/packages/app/public/broken-image.svg new file mode 100644 index 00000000..3dc703ef --- /dev/null +++ b/packages/app/public/broken-image.svg @@ -0,0 +1,8 @@ + diff --git a/packages/app/public/favicon.ico b/packages/app/public/favicon.ico new file mode 100644 index 00000000..3fab6a0d Binary files /dev/null and b/packages/app/public/favicon.ico differ diff --git a/packages/app/public/logo_alt.svg b/packages/app/public/logo_alt.svg new file mode 100644 index 00000000..e4096219 --- /dev/null +++ b/packages/app/public/logo_alt.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/app/public/logo_full.svg b/packages/app/public/logo_full.svg new file mode 100644 index 00000000..385188c1 --- /dev/null +++ b/packages/app/public/logo_full.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/app/public/sounds/crash.wav b/packages/app/public/sounds/crash.wav new file mode 100644 index 00000000..7bd8f8f1 Binary files /dev/null and b/packages/app/public/sounds/crash.wav differ diff --git a/packages/app/public/sounds/error.wav b/packages/app/public/sounds/error.wav new file mode 100644 index 00000000..9ec4325d Binary files /dev/null and b/packages/app/public/sounds/error.wav differ diff --git a/packages/app/public/sounds/notification.wav b/packages/app/public/sounds/notification.wav new file mode 100644 index 00000000..c32e396e Binary files /dev/null and b/packages/app/public/sounds/notification.wav differ diff --git a/packages/app/src/App.jsx b/packages/app/src/App.jsx new file mode 100644 index 00000000..0050920d --- /dev/null +++ b/packages/app/src/App.jsx @@ -0,0 +1,430 @@ +// Patch global prototypes +Array.prototype.findAndUpdateObject = function (discriminator, obj) { + let index = this.findIndex(item => item[discriminator] === obj[discriminator]) + if (index !== -1) { + this[index] = obj + } + + return index +} + +Array.prototype.move = function (from, to) { + this.splice(to, 0, this.splice(from, 1)[0]) + return this +} + +String.prototype.toTitleCase = function () { + return this.replace(/\w\S*/g, function (txt) { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() + }) +} + +Promise.tasked = function (promises) { + return new Promise(async (resolve, reject) => { + let rejected = false + + for await (let promise of promises) { + if (rejected) { + return + } + + try { + await promise() + } catch (error) { + rejected = true + return reject(error) + } + } + + if (!rejected) { + return resolve() + } + }) +} + +import React from "react" +import { CreateEviteApp, BindPropsProvider } from "evite" +import { Helmet } from "react-helmet" +import * as antd from "antd" +import { ActionSheet, Toast } from "antd-mobile" +import { StatusBar, Style } from "@capacitor/status-bar" +import { Translation } from "react-i18next" + +import { Session, User } from "models" +import { API, SettingsController, Render, Splash, Theme, Sound, Notifications, i18n, Debug, Shortcuts } from "extensions" +import config from "config" + +import { NotFound, RenderError, Crash, Settings, Navigation } from "components" +import { Icons } from "components/Icons" + +import Layout from "./layout" +import "theme/index.less" + +const SplashExtension = Splash.extension({ + logo: config.logo.alt, + preset: "fadeOut", + velocity: 1000, + props: { + logo: { + style: { + marginBottom: "10%", + stroke: "black", + }, + }, + }, +}) + +class App { + static initialize() { + window.app.version = config.package.version + + this.mainSocket = this.contexts.app.WSInterface.sockets.main + this.loadingMessage = false + this.isAppCapacitor = () => navigator.userAgent === "capacitor" + } + + static eventsHandlers = { + "new_session": async function () { + await this.flushState() + await this.initialization() + + if (window.location.pathname == "/login") { + window.app.setLocation(this.beforeLoginLocation ?? "/main") + this.beforeLoginLocation = null + } + }, + "destroyed_session": async function () { + await this.flushState() + this.eventBus.emit("forceToLogin") + }, + "forceToLogin": function () { + if (window.location.pathname !== "/login") { + this.beforeLoginLocation = window.location.pathname + } + + window.app.setLocation("/login") + }, + "invalid_session": async function (error) { + await this.sessionController.forgetLocalSession() + await this.flushState() + + if (window.location.pathname !== "/login") { + this.eventBus.emit("forceToLogin") + + antd.notification.open({ + message: + {(t) => t("Invalid Session")} + , + description: + {(t) => t(error)} + , + icon: , + }) + } + }, + "clearAllOverlays": function () { + window.app.DrawerController.closeAll() + }, + "websocket_connected": function () { + if (this.wsReconnecting) { + this.wsReconnectingTry = 0 + this.wsReconnecting = false + this.initialization() + + setTimeout(() => { + Toast.show({ + icon: "success", + content: "Connected", + }) + }, 500) + } + }, + "websocket_connection_error": function () { + if (!this.wsReconnecting) { + this.latencyWarning = null + this.wsReconnectingTry = 0 + this.wsReconnecting = true + + Toast.show({ + icon: "loading", + content: "Connecting...", + duration: 0, + }) + } + + this.wsReconnectingTry = this.wsReconnectingTry + 1 + + if (this.wsReconnectingTry > 3) { + window.location.reload() + } + }, + "websocket_latency_too_high": function () { + if (!this.latencyWarning) { + this.latencyWarning = true + Toast.show({ + icon: "loading", + content: "Slow connection...", + duration: 0, + }) + } + }, + "websocket_latency_normal": function () { + if (this.latencyWarning) { + this.latencyWarning = null + Toast.show({ + icon: "success", + content: "Connection restored", + }) + } + }, + "appLoadError": function (error) { + + }, + } + + static windowContext() { + return { + // TODO: Open with popup controller instead drawer controller + openNavigationMenu: () => window.app.DrawerController.open("navigation", Navigation), + openSettings: App.publicMethods.openSettings, + goMain: () => { + return window.app.setLocation(config.app.mainPath) + }, + goToAccount: (username) => { + return window.app.setLocation(`/account`, { username }) + }, + setStatusBarStyleDark: async () => { + if (!this.isAppCapacitor()) { + console.warn("[App] setStatusBarStyleDark is only available on capacitor") + return false + } + return await StatusBar.setStyle({ style: Style.Dark }) + }, + setStatusBarStyleLight: async () => { + if (!this.isAppCapacitor()) { + console.warn("[App] setStatusBarStyleLight is not supported on this platform") + return false + } + return await StatusBar.setStyle({ style: Style.Light }) + }, + hideStatusBar: async () => { + if (!this.isAppCapacitor()) { + console.warn("[App] hideStatusBar is not supported on this platform") + return false + } + return await StatusBar.hide() + }, + showStatusBar: async () => { + if (!this.isAppCapacitor()) { + console.warn("[App] showStatusBar is not supported on this platform") + return false + } + return await StatusBar.show() + }, + isAppCapacitor: this.isAppCapacitor, + } + } + + static appContext() { + return { + renderRef: this.renderRef, + sessionController: this.sessionController, + userController: this.userController, + } + } + + static staticRenders = { + NotFound: (props) => { + return + }, + RenderError: (props) => { + return + }, + Crash: Crash, + initialization: () => { + return + } + } + + static publicMethods = { + "openSettings": (goTo) => { + window.app.DrawerController.open("settings", Settings, { + props: { + width: "fit-content", + }, + componentProps: { + goTo, + } + }) + } + } + + sessionController = new Session() + userController = new User() + state = { + session: null, + user: null, + } + + flushState = async () => { + await this.setState({ session: null, user: null }) + } + + componentDidMount = async () => { + if (this.isAppCapacitor()) { + window.addEventListener("statusTap", () => { + this.eventBus.emit("statusTap") + }) + + StatusBar.setOverlaysWebView({ overlay: true }) + window.app.hideStatusBar() + } + + const userAgentPlatform = window.navigator.userAgent.toLowerCase() + + if (userAgentPlatform.includes("mac")) { + window.app.ShortcutsController.register({ + key: ",", + meta: true, + }, (...args) => { + App.publicMethods.openSettings(...args) + }) + } else { + window.app.ShortcutsController.register({ + key: ",", + ctrl: true, + }, (...args) => { + App.publicMethods.openSettings(...args) + }) + } + + this.eventBus.emit("render_initialization") + + await this.initialization() + + this.eventBus.emit("render_initialization_done") + } + + initialization = async () => { + console.debug(`[App] Initializing app`) + + const initializationTasks = [ + async () => { + try { + await this.contexts.app.attachAPIConnection() + } catch (error) { + throw { + cause: "Cannot connect to API", + details: error.message, + } + } + }, + async () => { + try { + await this.__SessionInit() + } catch (error) { + throw { + cause: "Cannot initialize session", + details: error.message, + } + } + }, + async () => { + try { + await this.__UserInit() + } catch (error) { + throw { + cause: "Cannot initialize user data", + details: error.message, + } + } + }, + async () => { + try { + await this.__WSInit() + } catch (error) { + throw { + cause: "Cannot connect to WebSocket", + details: error.message, + } + } + }, + ] + + await Promise.tasked(initializationTasks).catch((reason) => { + console.error(`[App] Initialization failed: ${reason.cause}`) + window.app.eventBus.emit("appLoadError", reason.cause, reason.details) + }) + } + + __SessionInit = async () => { + const token = await Session.token + + if (!token || token == null) { + window.app.eventBus.emit("forceToLogin") + return false + } + + const session = await this.sessionController.getCurrentSession().catch((error) => { + console.error(`[App] Cannot get current session: ${error.message}`) + return false + }) + + await this.setState({ session }) + } + + __WSInit = async () => { + if (!this.state.session) { + return false + } + + const token = await Session.token + await this.contexts.app.attachWSConnection() + + this.mainSocket.emit("authenticate", token) + } + + __UserInit = async () => { + if (!this.state.session) { + return false + } + + const user = await User.data() + await this.setState({ user }) + } + + render() { + return ( + + + {config.app.siteName} + + + + + + + + + + ) + } +} + +export default CreateEviteApp(App, { + extensions: [ + Shortcuts, + SettingsController, + i18n.extension, + Sound.extension, + Notifications.extension, + API, + Render.extension, + Theme.extension, + SplashExtension, + Debug, + ], +}) \ No newline at end of file diff --git a/packages/app/src/components/AboutApp/index.jsx b/packages/app/src/components/AboutApp/index.jsx new file mode 100644 index 00000000..b845dad4 --- /dev/null +++ b/packages/app/src/components/AboutApp/index.jsx @@ -0,0 +1,80 @@ +import React from "react" +import ReactDOM from "react-dom" +import * as antd from "antd" +import { Card, Mask } from "antd-mobile" + +import { Icons } from "components/Icons" +import { DiReact } from "react-icons/di" + +import config from "config" + +import "./index.less" + +export const AboutCard = (props) => { + const [visible, setVisible] = React.useState(false) + + React.useEffect(() => { + setVisible(true) + }, []) + + const close = () => { + setVisible(false) + setTimeout(() => { + props.onClose() + }, 150) + } + + const isProduction = import.meta.env.PROD + const isWSMainConnected = window.app.ws.mainSocketConnected + const WSMainOrigin = app.ws.sockets.main.io.uri + + return close()}> +
+ +
+

{config.app.siteName}

+ {config.author} +
+
+ v{window.app.version ?? "experimental"} + + {isProduction ? : } + {String(import.meta.env.MODE)} + +
+
+ } + > +
+

Server information

+
+ {WSMainOrigin} +
+
+
+

Versions

+
+ eVite v{window.__eviteVersion ?? "experimental"} + v{React.version ?? "experimental"} +
+
+ + +
+} + +export function openModal() { + const component = document.createElement("div") + document.body.appendChild(component) + + const onClose = () => { + ReactDOM.unmountComponentAtNode(component) + document.body.removeChild(component) + } + + ReactDOM.render(, component) +} \ No newline at end of file diff --git a/packages/app/src/components/AboutApp/index.less b/packages/app/src/components/AboutApp/index.less new file mode 100644 index 00000000..689fedfa --- /dev/null +++ b/packages/app/src/components/AboutApp/index.less @@ -0,0 +1,75 @@ +.aboutApp_wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + width: 100vw; + height: 100vh; +} + +.aboutApp_card { + height: fit-content; + width: 80vw; + + svg { + margin: 0; + } + + .ant-tag { + display: inline-flex; + align-items: center; + } + + .group { + width: 100%; + display: inline-flex; + flex-direction: column; + justify-content: center; + + > div { + display: inline-flex; + margin-left: 10px; + } + + margin-bottom: 10px; + } + + +} + +.aboutApp_card_header { + .adm-card-header-title { + width: 100%; + } + + .content { + width: 100%; + + display: inline-flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + + h1,h2,h3 { + margin: 0; + } + + .branding { + display: flex; + flex-direction: column; + + h1,h2,h3 { + height: fit-content; + line-height: 24px; + } + + span { + height: fit-content; + color: var(--background-color-contrast); + font-size: 10px; + } + } + + } +} \ No newline at end of file diff --git a/packages/app/src/components/ActionsBar/index.jsx b/packages/app/src/components/ActionsBar/index.jsx new file mode 100644 index 00000000..e064d824 --- /dev/null +++ b/packages/app/src/components/ActionsBar/index.jsx @@ -0,0 +1,27 @@ +import React from "react" +import classnames from "classnames" +import "./index.less" + +export default (props) => { + const { children } = props + + return
+
+ {children} +
+
+} \ No newline at end of file diff --git a/packages/app/src/components/ActionsBar/index.less b/packages/app/src/components/ActionsBar/index.less new file mode 100644 index 00000000..4612d359 --- /dev/null +++ b/packages/app/src/components/ActionsBar/index.less @@ -0,0 +1,100 @@ +@actionsBar_height: fit-content; + +.actionsBar { + --ignore-dragger: true; + display: inline-block; + white-space: nowrap; + + overflow-x: overlay; + + padding: 15px; + + width: 100%; + height: @actionsBar_height; + + border: 1px solid #e0e0e0; + border-radius: 8px; + + background-color: #0c0c0c15; + + backdrop-filter: blur(10px); + --webkit-backdrop-filter: blur(10px); + + transition: all 200ms ease-in-out; + + ::-webkit-scrollbar { + position: absolute; + display: none; + + width: 0; + height: 0; + z-index: 0; + } + + .wrapper { + display: flex; + flex-direction: row; + align-items: center; + + height: 100%; + transition: all 200ms ease-in-out; + + > div { + margin: 0 5px; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + --ignore-dragger: true; + + span { + height: fit-content; + } + } + } + + &.float { + z-index: 1000; + position: sticky; + bottom: 0; + top: 0; + right: 0; + width: 100%; + } + + &.fixedBottom { + z-index: 1000; + position: fixed; + bottom: 0; + right: 0; + left: 0; + width: 100%; + margin-bottom: 10px; + } + + &.fixedTop { + z-index: 1000; + position: fixed; + top: 0; + right: 0; + left: 0; + width: 100%; + margin-bottom: 10px; + } + + &.transparent { + background-color: transparent; + border: none; + backdrop-filter: none; + --webkit-backdrop-filter: none; + } + + &.spaced { + .wrapper { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + } +} diff --git a/packages/app/src/components/AddableSelectList/index.jsx b/packages/app/src/components/AddableSelectList/index.jsx new file mode 100644 index 00000000..4f664c4f --- /dev/null +++ b/packages/app/src/components/AddableSelectList/index.jsx @@ -0,0 +1,258 @@ +import React from "react" +import * as antd from "antd" +import { PullToRefresh } from "antd-mobile" +import { Icons } from "components/Icons" +import { SelectableList, SwipeItem, Skeleton } from "components" +import { debounce } from "lodash" +import fuse from "fuse.js" + +import "./index.less" + +const statusRecord = { + pulling: "Slide down to refresh", + canRelease: "Release", + refreshing: , + complete: , +} + +export const AddableSelectListSelector = (props = {}) => { + const [loading, setLoading] = React.useState(true) + const [data, setData] = React.useState([]) + const [searchValue, setSearchValue] = React.useState(null) + + React.useEffect(async () => { + await fetchData() + }, []) + + const fetchData = async () => { + setLoading(true) + + if (typeof props.loadData === "function") { + const result = await props.loadData() + + setData(result) + } + + setLoading(false) + } + + const search = (value) => { + if (typeof value !== "string") { + if (typeof value.target?.value === "string") { + value = value.target.value + } + } + + if (value === "") { + return setSearchValue(null) + } + + const searcher = new fuse(data, { + includeScore: true, + keys: [...(props.searcherKeys ?? []), "_id", "name"], + }) + + const result = searcher.search(value) + + return setSearchValue(result.map((entry) => { + return entry.item + })) + } + + const debouncedSearch = debounce((value) => search(value), props.debounceSearchWait ?? 500) + + const onSearch = (keyword) => { + if (typeof keyword !== "string") { + keyword = keyword.target.value + } + + if (keyword === "" && searchValue) { + return setSearchValue(null) + } + + debouncedSearch(keyword) + } + + const isExcludedId = (id) => { + if (!props.excludedSelectedKeys) { + return false + } + + if (props.excludedIds) { + return props.excludedIds.includes(id) + } + + return false + } + + const findData = (id) => { + return data.find((item) => { + return item._id === id + }) + } + + if (loading) { + return + } + + return
+
+
+ +
+
+ { + return
{statusRecord[status]}
+ }} + onRefresh={fetchData} + > + + Done +
+ ]} + events={{ + onDone: (ctx, keys) => props.handleDone(keys, keys.map((key) => findData(key))), + }} + disabledKeys={props.excludedIds} + renderItem={(item) => { + return
+
+

{item.label}

+
+ }} + /> + + +} + +export const AddableSelectListItem = (props) => { + const { item, actions, onClick, onDelete } = props + + const handleClick = () => { + if (typeof onClick === "function") { + onClick(item) + } + } + + const handleDelete = () => { + if (typeof onDelete === "function") { + onDelete(item) + } + } + + return + + } + title={item.label} + /> + + +} + +//@evite-components#OperatorsAssignments*mobile/desktop +export default class AddableSelectList extends React.Component { + state = { + selectedKeys: [], + selectedItems: [], + } + + onClickAdd = async () => { + window.app.DrawerController.open("AddableSelectListSelector", AddableSelectListSelector, { + onDone: async (ctx, keys, data) => { + if (keys.length <= 0) { + ctx.close() + return false + } + + let { selectedKeys, selectedItems } = this.state + + selectedKeys = [...selectedKeys, ...keys] + selectedItems = [...selectedItems, ...data] + + await this.setState({ selectedKeys: selectedKeys, selectedItems: selectedItems }) + + if (typeof this.props.onSelectItem === "function") { + await this.props.onSelectItem(keys) + } + + ctx.close() + }, + componentProps: { + loadData: this.props.loadData, + searcherKeys: this.props.searcherKeys, + debounceSearchWait: this.props.debounceSearchWait, + excludedIds: this.state.selectedKeys, + excludedSelectedKeys: this.props.excludedSelectedKeys, + }, + }) + } + + onClickItem = async (item) => { + if (typeof this.props.onClickItem === "function") { + await this.props.onClickItem(item) + } + } + + onDeleteItem = async (item) => { + if (typeof this.props.onDeleteItem === "function") { + await this.props.onDeleteItem(item) + } + + const { selectedKeys, selectedItems } = this.state + + const newSelectedKeys = selectedKeys.filter((key) => { + return key !== item._id + }) + + const newSelectedItems = selectedItems.filter((_item) => { + return _item._id !== item._id + }) + + this.setState({ selectedKeys: newSelectedKeys, selectedItems: newSelectedItems }) + } + + render() { + return
+
+ { + return this.onClickItem(item)} + onDelete={() => { this.onDeleteItem(item) }} + /> + }} + /> +
+
+
+ } + shape="round" + onClick={this.onClickAdd} + > + Add + +
+
+
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/AddableSelectList/index.less b/packages/app/src/components/AddableSelectList/index.less new file mode 100644 index 00000000..5d99bd48 --- /dev/null +++ b/packages/app/src/components/AddableSelectList/index.less @@ -0,0 +1,45 @@ +.addableSelectListSelector { + > div { + margin-bottom: 10px; + } + + .item { + h1 { + margin: 0; + } + + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + + > div { + margin-right: 10px; + } + } +} + +.addableSelectList { + #delete { + border-radius: 4px; + } + + .item { + background-color: var(--background-color-primary); + } + + .actions { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + + > div { + margin-right: 6px; + } + } + + > div { + margin-bottom: 10px; + } +} \ No newline at end of file diff --git a/packages/app/src/components/AdminTools/UserDataManager/index.jsx b/packages/app/src/components/AdminTools/UserDataManager/index.jsx new file mode 100644 index 00000000..8371df59 --- /dev/null +++ b/packages/app/src/components/AdminTools/UserDataManager/index.jsx @@ -0,0 +1,204 @@ +import React from "react" +import * as antd from "antd" +import debounce from "lodash/debounce" +import { Translation } from "react-i18next" + +import { ActionsBar } from "components" +import { Icons } from "components/Icons" + +import "./index.less" + +export const EditAccountField = ({ id, component, props, header, handleChange, delay, defaultValue, allowEmpty }) => { + const [currentValue, setCurrentValue] = React.useState(defaultValue) + const [emittedValue, setEmittedValue] = React.useState(null) + + const debouncedHandleChange = React.useCallback( + debounce((value) => handleChange({ id, value }), delay ?? 300), + [], + ) + + const handleDiscard = (event) => { + if (typeof event !== "undefined") { + event.target.blur() + } + + setCurrentValue(defaultValue) + handleChange({ id, value: defaultValue }) + } + + React.useEffect(() => { + debouncedHandleChange(currentValue) + }, [emittedValue]) + + const onChange = (event) => { + event.persist() + let { value } = event.target + + if (typeof value === "string") { + if (value.length === 0) { + // if is not allowed to be empty, discard modifications + if (!allowEmpty) { + return handleDiscard(event) + } + } + } + + setCurrentValue(value) + setEmittedValue(value) + } + + const handleKeyDown = (event) => { + if (event.keyCode === 27) { + // "escape" pressed, reset to default value + handleDiscard(event) + } + } + + const RenderComponent = component + + return ( +
+ {header ? header : null} + +
+ ) +} + +export default class UserDataManager extends React.Component { + state = { + data: this.props.user, + changes: [], + loading: false, + } + + api = window.app.request + + componentDidMount = async () => { + if (!this.props.user && this.props.userId) { + // TODO: Fetch from API + } + } + + handleSave = async () => { + if (!Array.isArray(this.state.changes)) { + antd.message.error("Something went wrong") + console.error("Changes should be an array") + return false + } + + await this.setState({ loading: true }) + const update = {} + + this.state.changes.forEach((change) => { + update[change.id] = change.value + }) + + const result = await this.api.post.updateUser({ _id: this.state.data._id, update }).catch((err) => { + antd.message.error(err.message) + console.error(err) + return false + }) + + await this.setState({ changes: [], loading: false }) + + if (typeof this.props.onSave === "function") { + await this.props.onSave(this.state.changes) + } + + if (result) { + if (typeof this.props.handleDone === "function") { + this.props.handleDone(result) + } + } + } + + handleChange = (event) => { + const { id, value } = event + let changes = [...this.state.changes] + + changes = changes.filter((change) => change.id !== id) + + if (this.state.data[id] !== value) { + changes.push({ id, value }) + } + + this.setState({ changes }) + } + + render() { + return ( +
+
+
+

+ Account information +

+ + Username +
+ } + component={antd.Input} + props={{ + placeholder: "Username", + disabled: true, + }} + handleChange={this.handleChange} + /> + + Name +
+ } + component={antd.Input} + props={{ + placeholder: "Your full name", + }} + handleChange={this.handleChange} + /> + + Email +
+ } + component={antd.Input} + props={{ + placeholder: "Your email address", + type: "email", + }} + handleChange={this.handleChange} + /> + + + +
+ {this.state.changes.length} + {(t) => t("Changes")} + +
+
+ + + {(t) => t("Save")} + + +
+
+ + ) + } +} diff --git a/packages/app/src/components/AdminTools/UserDataManager/index.less b/packages/app/src/components/AdminTools/UserDataManager/index.less new file mode 100644 index 00000000..08713209 --- /dev/null +++ b/packages/app/src/components/AdminTools/UserDataManager/index.less @@ -0,0 +1,61 @@ +.edit_account{ + overflow: hidden!important; + height: 100%; +} + +.edit_account_wrapper{ + overflow: scroll; + > div { + margin-bottom: 20px; + } +} + +.edit_account_actions { + position: absolute; + bottom: 0; + right: 0; + + flex-direction: row; + align-items: center; + justify-content: center; + + width: 100%; + padding: 20px 0 20px 0; + background-color: rgba(221, 221, 221, 0.5); + backdrop-filter: blur(2px); + --webkit-backdrop-filter: blur(2px); + border-radius: 18px 18px 0 0; + + transition: all 0.3s ease-in-out; + + display: none; + opacity: 0; + + &.show { + display: flex; + opacity: 1; + } + + > div { + margin-left: 20px; + } +} + +.edit_account_actions_indicator{ + position: fixed; + left: 0; + margin-left: 30px; +} + +.edit_account_category{ + > div { + margin-bottom: 20px; + margin-left: 20px; + } +} + +.edit_account_field { + input:not(:focus){ + color:rgba(105, 105, 105, 0.5) + } +} \ No newline at end of file diff --git a/packages/app/src/components/AdminTools/UserRolesManager/index.jsx b/packages/app/src/components/AdminTools/UserRolesManager/index.jsx new file mode 100644 index 00000000..5e411ccc --- /dev/null +++ b/packages/app/src/components/AdminTools/UserRolesManager/index.jsx @@ -0,0 +1,140 @@ +import React from "react" +import * as antd from "antd" + +import { ActionsBar, UserSelector, Skeleton } from "components" +import { Icons } from "components/Icons" + +import "./index.less" + +export default class UserRolesManager extends React.Component { + state = { + users: null, + roles: null, + } + + api = window.app.request + + componentDidMount = async () => { + await this.fetchRoles() + + if (typeof this.props.id !== "undefined") { + const ids = Array.isArray(this.props.id) ? this.props.id : [this.props.id] + await this.fetchUsersData(ids) + } + } + + fetchRoles = async () => { + const result = await this.api.get.roles().catch((err) => { + antd.message.error(err) + console.error(err) + return false + }) + + if (result) { + this.setState({ roles: result }) + } + } + + fetchUsersData = async (users) => { + const result = await this.api.get.users(undefined, { _id: users }).catch((err) => { + antd.message.error(err) + console.error(err) + return false + }) + + if (result) { + this.setState({ + users: result.map((data) => { + return { + _id: data._id, + username: data.username, + roles: data.roles, + } + }) + }) + } + } + + handleSelectUser = async (users) => { + this.fetchUsersData(users) + } + + handleRoleChange = (userId, role, to) => { + let updatedUsers = this.state.users.map((user) => { + if (user._id === userId) { + if (to == true) { + user.roles.push(role) + } else { + user.roles = user.roles.filter((r) => r !== role) + } + } + + return user + }) + + this.setState({ users: updatedUsers }) + } + + handleSubmit = async () => { + const update = this.state.users.map((data) => { + return { + _id: data._id, + roles: data.roles, + } + }) + + const result = await this.api.post.updateUserRoles({ update }).catch((err) => { + antd.message.error(err) + console.error(err) + return false + }) + + if (result) { + this.props.handleDone(result) + if (typeof this.props.close === "function") { + this.props.close() + } + } + } + + renderItem = (item) => { + return
+

+ {item.username} +

+
+ {this.state.roles.map((role) => { + return this.handleRoleChange(item._id, role.name, to.target.checked)} + > + {role.name} + + })} +
+
+ } + + render() { + const { users } = this.state + + if (!users) { + return + } + + return
+ {users.map((data) => { + return this.renderItem(data) + })} + + +
+ } onClick={() => this.handleSubmit()}> + Submit + +
+
+
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/AdminTools/UserRolesManager/index.less b/packages/app/src/components/AdminTools/UserRolesManager/index.less new file mode 100644 index 00000000..bd373174 --- /dev/null +++ b/packages/app/src/components/AdminTools/UserRolesManager/index.less @@ -0,0 +1,19 @@ +.grantRoles_user { + display: flex; + flex-direction: column; + + .roles { + display: inline-flex; + flex-direction: row; + flex-wrap: wrap; + + padding: 10px; + border-radius: 8px; + + background-color: var(--background-color-accent); + } + + > div { + margin-bottom: 10px; + } +} \ No newline at end of file diff --git a/packages/app/src/components/AdminTools/index.js b/packages/app/src/components/AdminTools/index.js new file mode 100644 index 00000000..a570f549 --- /dev/null +++ b/packages/app/src/components/AdminTools/index.js @@ -0,0 +1,41 @@ +import UserDataManager from "./UserDataManager" +import UserRolesManager from "./UserRolesManager" + +export { UserDataManager, UserRolesManager } + +export const open = { + dataManager: (user) => { + return new Promise((resolve, reject) => { + window.app.DrawerController.open("UserDataManager", UserDataManager, { + componentProps: { + user: user, + }, + onDone: (ctx, value) => { + resolve(value) + ctx.close() + }, + onFail: (ctx, value) => { + reject(value) + ctx.close() + } + }) + }) + }, + rolesManager: (id) => { + return new Promise((resolve, reject) => { + window.app.DrawerController.open("UserRolesManager", UserRolesManager, { + componentProps: { + id: id, + }, + onDone: (ctx, value) => { + resolve(value) + ctx.close() + }, + onFail: (ctx, value) => { + reject(value) + ctx.close() + } + }) + }) + } +} \ No newline at end of file diff --git a/packages/app/src/components/AppSearcher/index.jsx b/packages/app/src/components/AppSearcher/index.jsx new file mode 100644 index 00000000..41a6eb39 --- /dev/null +++ b/packages/app/src/components/AppSearcher/index.jsx @@ -0,0 +1,61 @@ +import React from "react" +import * as antd from "antd" +import "./index.less" + +class Results extends React.Component { + state = { + results: this.props.results ?? [] + } + + renderResults = () => { + return this.state.results.map(result => { + return
+ {result.title} +
+ }) + } + + render() { + return
+ {this.renderResults()} +
+ } +} + +export default class AppSearcher extends React.Component { + state = { + loading: false, + searchResult: null, + } + + handleSearch = (value) => { + let results = [] + + // get results + results.push({ id: value, title: value }) + + // storage results + this.setState({ searchResult: results }) + + // open results onlayout drawer + this.openResults() + } + + openResults = () => { + window.app.SidedrawerController.render(() => ) + } + + render() { + return ( +
+ +
+ ) + } +} diff --git a/packages/app/src/components/AppSearcher/index.less b/packages/app/src/components/AppSearcher/index.less new file mode 100644 index 00000000..45519141 --- /dev/null +++ b/packages/app/src/components/AppSearcher/index.less @@ -0,0 +1,34 @@ +@import "theme/index.less"; + +.search_bar { + user-select: none; + --webkit-user-select: none; + + height: fit-content; + border: 0; + border-radius: 7px !important; + vertical-align: middle !important; + + .ant-input { + background-color: var(--background-color-accent) !important; + border-color: var(--background-color-accent) !important; + color: var(--background-color-contrast) !important; + } + + .ant-input-group { + display: flex; + align-items: center; + justify-content: center; + height: fit-content; + } + + .ant-input-group-addon { + width: fit-content; + background-color: transparent; + } + + .ant-btn { + background-color: var(--background-color-primary) !important; + border: 0 !important; + } +} diff --git a/packages/app/src/components/Clock/index.jsx b/packages/app/src/components/Clock/index.jsx new file mode 100644 index 00000000..dbb49d71 --- /dev/null +++ b/packages/app/src/components/Clock/index.jsx @@ -0,0 +1,17 @@ +import React from "react" + +import "./index.less" + +export default () => { + const [time, setTime] = React.useState(new Date()) + + React.useEffect(() => { + const interval = setInterval(() => { + setTime(new Date()) + }, 1000) + + return () => clearInterval(interval) + }, []) + + return
{time.toLocaleTimeString()}
+} \ No newline at end of file diff --git a/packages/comty/src/components/StreamingOverlay/statistics/audience/index.js b/packages/app/src/components/Clock/index.less similarity index 100% rename from packages/comty/src/components/StreamingOverlay/statistics/audience/index.js rename to packages/app/src/components/Clock/index.less diff --git a/packages/app/src/components/Crash/index.jsx b/packages/app/src/components/Crash/index.jsx new file mode 100644 index 00000000..776c6118 --- /dev/null +++ b/packages/app/src/components/Crash/index.jsx @@ -0,0 +1,23 @@ +import React from "react" +import { Result, Button } from "antd" + +export default (props) => { + const { crash } = props + + return
+ window.location.reload()}> + Reload app + + ]} + > +
+ {crash.error} +
+
+
+} \ No newline at end of file diff --git a/packages/app/src/components/DraggableDrawer/helpers.js b/packages/app/src/components/DraggableDrawer/helpers.js new file mode 100644 index 00000000..22b65f42 --- /dev/null +++ b/packages/app/src/components/DraggableDrawer/helpers.js @@ -0,0 +1,15 @@ +export function isDirectionTop(direction) { + return direction === "top"; +} + +export function isDirectionBottom(direction) { + return direction === "bottom"; +} + +export function isDirectionLeft(direction) { + return direction === "left"; +} + +export function isDirectionRight(direction) { + return direction === "right"; +} \ No newline at end of file diff --git a/packages/app/src/components/DraggableDrawer/index.jsx b/packages/app/src/components/DraggableDrawer/index.jsx new file mode 100644 index 00000000..3f3a8e01 --- /dev/null +++ b/packages/app/src/components/DraggableDrawer/index.jsx @@ -0,0 +1,442 @@ +// © Jack Hanford https://github.com/hanford/react-drag-drawer +import React, { Component } from "react"; +import { Motion, spring, presets } from "react-motion"; +import PropTypes from "prop-types"; +import document from "global/document"; +import Observer from "react-intersection-observer"; +import { css } from "@emotion/css"; +import { createPortal } from "react-dom"; + +import { + isDirectionBottom, + isDirectionTop, + isDirectionLeft, + isDirectionRight, +} from "./helpers.js" + +export default class Drawer extends Component { + static propTypes = { + open: PropTypes.bool.isRequired, + children: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.element + ]), + onRequestClose: PropTypes.func, + onDrag: PropTypes.func, + onOpen: PropTypes.func, + inViewportChange: PropTypes.func, + allowClose: PropTypes.bool, + notifyWillClose: PropTypes.func, + direction: PropTypes.string, + modalElementClass: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.string + ]), + containerOpacity: PropTypes.number, + containerElementClass: PropTypes.string, + getContainerRef: PropTypes.func, + getModalRef: PropTypes.func + } + + static defaultProps = { + notifyWillClose: () => { }, + onOpen: () => { }, + onDrag: () => { }, + inViewportChange: () => { }, + onRequestClose: () => { }, + getContainerRef: () => { }, + getModalRef: () => { }, + containerOpacity: 0.6, + direction: "bottom", + parentElement: document.body, + allowClose: true, + dontApplyListeners: false, + containerElementClass: "", + modalElementClass: "" + } + + state = { + ignore: false, + onRange: false, + open: this.props.open, + thumb: 0, + start: 0, + position: 0, + touching: false, + listenersAttached: false + } + + DRAGGER_HEIGHT_SIZE = 100 + MAX_NEGATIVE_SCROLL = 5 + SCROLL_TO_CLOSE = 475 + ALLOW_DRAWER_TRANSFORM = true + + componentDidUpdate(prevProps, nextState) { + // in the process of closing the drawer + if (!this.props.open && prevProps.open) { + this.removeListeners() + + setTimeout(this.setState({ open: false }), 300) + } + + if (this.drawer) { + this.getNegativeScroll(this.drawer) + } + + // in the process of opening the drawer + if (this.props.open && !prevProps.open) { + this.props.onOpen() + + this.setState({ open: true }) + } + } + + componentWillUnmount() { + this.removeListeners() + } + + attachListeners = drawer => { + const { dontApplyListeners, getModalRef, direction } = this.props + const { listenersAttached } = this.state + + // only attach listeners once as this function gets called every re-render + if (!drawer || listenersAttached || dontApplyListeners) return + + this.drawer = drawer + + getModalRef(drawer) + + this.drawer.addEventListener("touchend", this.release) + this.drawer.addEventListener("touchmove", this.drag) + this.drawer.addEventListener("touchstart", this.tap) + + let position = 0 + + if (isDirectionRight(direction)) { + position = drawer.scrollWidth + } + + this.setState({ listenersAttached: true, position }, () => { + setTimeout(() => { + // trigger reflow so webkit browsers calculate height properly 😔 + // https://bugs.webkit.org/show_bug.cgi?id=184905 + this.drawer.style.display = "none" + void this.drawer.offsetHeight + this.drawer.style.display = "" + }, 300) + }) + } + + isThumbInDraggerRange = (event) => { + return (event.touches[0].clientY - this.drawer.getBoundingClientRect().top) < this.DRAGGER_HEIGHT_SIZE + } + + removeListeners = () => { + if (!this.drawer) { + return false + } + + this.drawer.removeEventListener("touchend", this.release) + this.drawer.removeEventListener("touchmove", this.drag) + this.drawer.removeEventListener("touchstart", this.tap) + + this.setState({ listenersAttached: false }) + } + + tap = event => { + const { pageY, pageX } = event.touches[0] + const shouldIgnored = Boolean(event.target.getAttribute("ignore-dragger") || (window.getComputedStyle(event.target).getPropertyValue("--ignore-dragger") !== "")) + + const start = isDirectionBottom(this.props.direction) || isDirectionTop(this.props.direction) ? pageY : pageX + + // reset NEW_POSITION and MOVING_POSITION + this.NEW_POSITION = 0 + this.MOVING_POSITION = 0 + + this.setState({ ignore: shouldIgnored, onRange: this.isThumbInDraggerRange(event), thumb: start, start: start, touching: true }) + } + + drag = event => { + if (this.state.ignore) { + return false + } + + const { direction } = this.props + const { thumb, position } = this.state + const { pageY, pageX } = event.touches[0] + + const movingPosition = isDirectionBottom(direction) || isDirectionTop(direction) ? pageY : pageX + const delta = movingPosition - thumb + const newPosition = isDirectionBottom(direction) ? position + delta : position - delta + + if (newPosition > 0 && this.ALLOW_DRAWER_TRANSFORM) { + // stop android's pull to refresh behavior + event.preventDefault() + + this.props.onDrag({ newPosition }) + + // we set this, so we can access it in shouldWeCloseDrawer. Since setState is async, we're not guranteed we'll have the + // value in time + this.MOVING_POSITION = movingPosition + this.NEW_POSITION = newPosition + + let positionThreshold = 0 + + if (isDirectionRight(direction)) { + positionThreshold = this.drawer.scrollWidth + } + + if (newPosition < positionThreshold && this.shouldWeCloseDrawer()) { + this.props.notifyWillClose(true) + } else { + this.props.notifyWillClose(false) + } + + // not at the bottom + if (this.NEGATIVE_SCROLL < newPosition) { + this.setState({ + thumb: movingPosition, + position: + positionThreshold > 0 + ? Math.min(newPosition, positionThreshold) + : newPosition + }) + } + } + } + + release = (event) => { + const { direction } = this.props + + this.setState({ touching: false }) + + if (this.shouldWeCloseDrawer() && this.state.onRange) { + this.props.onRequestClose(this) + } else { + let newPosition = 0 + + if (isDirectionRight(direction)) { + newPosition = this.drawer.scrollWidth + } + + this.setState({ position: newPosition }) + } + } + + getNegativeScroll = (element) => { + const { direction } = this.props + const size = this.getElementSize() + + if (isDirectionBottom(direction) || isDirectionTop(direction)) { + this.NEGATIVE_SCROLL = size - element.scrollHeight - this.MAX_NEGATIVE_SCROLL + } else { + this.NEGATIVE_SCROLL = size - element.scrollWidth - this.MAX_NEGATIVE_SCROLL + } + } + + hideDrawer = () => { + const { allowClose, direction } = this.props + + let defaultPosition = 0 + + if (isDirectionRight(direction)) { + defaultPosition = this.drawer.scrollWidth + } + + if (allowClose === false) { + // if we aren't going to allow close, let's animate back to the default position + return this.setState({ + position: defaultPosition, + thumb: 0, + touching: false + }) + } + + this.setState({ + open: false, + position: defaultPosition, + touching: false + }) + + // cleanup + this.removeListeners() + } + + shouldWeCloseDrawer = () => { + const { start: touchStart } = this.state + const { direction } = this.props + + let initialPosition = 0 + + if (isDirectionRight(direction)) { + initialPosition = this.drawer.scrollWidth + } + + if (this.MOVING_POSITION === initialPosition) return false + + if (isDirectionRight(direction)) { + return ( + this.NEW_POSITION < initialPosition && + this.MOVING_POSITION - touchStart > this.SCROLL_TO_CLOSE + ) + } else if (isDirectionLeft(direction)) { + return ( + this.NEW_POSITION >= initialPosition && + touchStart - this.MOVING_POSITION > this.SCROLL_TO_CLOSE + ) + } else if (isDirectionTop(direction)) { + return ( + this.NEW_POSITION >= initialPosition && + touchStart - this.MOVING_POSITION > this.SCROLL_TO_CLOSE + ) + } else { + return ( + this.NEW_POSITION >= initialPosition && + this.MOVING_POSITION - touchStart > this.SCROLL_TO_CLOSE + ) + } + } + + getDrawerTransform = (value) => { + const { direction } = this.props + + if (isDirectionBottom(direction)) { + return { transform: `translate3d(0, ${value}px, 0)` } + } else if (isDirectionTop(direction)) { + return { transform: `translate3d(0, -${value}px, 0)` } + } else if (isDirectionLeft(direction)) { + return { transform: `translate3d(-${Math.abs(value)}px, 0, 0)` } + } else if (isDirectionRight(direction)) { + return { transform: `translate3d(${value}px, 0, 0)` } + } + } + + getElementSize = () => { + return isDirectionBottom(this.props.direction) || isDirectionTop(this.props.direction) ? window.innerHeight : window.innerWidth + } + + getPosition(hiddenPosition) { + const { position } = this.state + const { direction } = this.props + + if (isDirectionRight(direction)) { + return hiddenPosition - position + } else { + return position + } + } + + inViewportChange = (inView) => { + this.props.inViewportChange(inView) + + this.ALLOW_DRAWER_TRANSFORM = inView + } + + preventDefault = (event) => event.preventDefault() + stopPropagation = (event) => event.stopPropagation() + + render() { + const { + containerElementClass, + containerOpacity, + dontApplyListeners, + id, + getContainerRef, + getModalRef, + direction + } = this.props + + const open = this.state.open && this.props.open + + // If drawer isn't open or in the process of opening/closing, then remove it from the DOM + // also, if we're not client side we need to return early because createPortal is only + // a clientside method + + // if ((!this.state.open && !this.props.open)) { + // return null + // } + + const { touching } = this.state + + const springPreset = isDirectionLeft(direction) ? { damping: 17, stiffness: 120 } : { damping: 20, stiffness: 300 } + const animationSpring = touching ? springPreset : presets.stiff + const hiddenPosition = this.getElementSize() + const position = this.getPosition(hiddenPosition) + + // Style object for the container element + let containerStyle = { + backgroundColor: `rgba(55, 56, 56, ${open ? containerOpacity : 0})` + } + + // If direction is right, we set the overflowX property to 'hidden' to hide the x scrollbar during + // the sliding animation + if (isDirectionRight(direction)) { + containerStyle = { + ...containerStyle, + overflowX: "hidden" + } + } + + return createPortal( + + {({ translate }) => { + return ( +
+ + +
+ {this.props.children} +
+
+ ) + }} +
, + this.props.parentElement + ) + } +} + +const Container = css` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + justify-content: center; + flex-shrink: 0; + align-items: center; + z-index: 11; + transition: background-color 0.2s linear; + overflow-y: auto; + overscroll-behavior: none; +` + +const HaveWeScrolled = css` + position: absolute; + top: 0; + height: 1px; + width: 100%; +` \ No newline at end of file diff --git a/packages/app/src/components/Icons/index.jsx b/packages/app/src/components/Icons/index.jsx new file mode 100644 index 00000000..0e09397e --- /dev/null +++ b/packages/app/src/components/Icons/index.jsx @@ -0,0 +1,29 @@ +import React from "react" + +// import icons lib +import * as lib1 from "feather-reactjs" +import * as lib2 from "react-icons/md" +import * as lib3 from "@ant-design/icons" + +const marginedStyle = { width: "1em", height: "1em", marginRight: "10px", verticalAlign: "-0.125em" } + +const customs = { + verifiedBadge: () => , +} + +export const Icons = { + ...customs, + ...lib1, + ...lib2, + ...lib3, +} + +export function createIconRender(icon, props) { + if (typeof Icons[icon] !== "undefined") { + return React.createElement(Icons[icon], props) + } + + return null +} + +export default Icons \ No newline at end of file diff --git a/packages/app/src/components/ImageUploader/index.jsx b/packages/app/src/components/ImageUploader/index.jsx new file mode 100644 index 00000000..663ac5a1 --- /dev/null +++ b/packages/app/src/components/ImageUploader/index.jsx @@ -0,0 +1,90 @@ +import React from "react" +import { Icons } from "components/Icons" +import * as antd from "antd" +import { getBase64 } from "utils" + +export default class ImageUploader extends React.Component { + state = { + previewVisible: false, + previewImage: "", + previewTitle: "", + fileList: [], + urlList: [], + } + + api = window.app.request + + handleChange = ({ fileList }) => { + this.setState({ fileList }) + + if (typeof this.props.onChange === "function") { + this.props.onChange(fileList) + } + } + + handleCancel = () => this.setState({ previewVisible: false }) + + handlePreview = async file => { + if (!file.url && !file.preview) { + file.preview = await getBase64(file.originFileObj) + } + + this.setState({ + previewImage: file.url || file.preview, + previewVisible: true, + previewTitle: file.name || file.url.substring(file.url.lastIndexOf("/") + 1), + }) + } + + handleUploadRequest = async (req) => { + if (typeof this.props.onUpload === "function") { + this.props.onUpload(req) + } else { + const payloadData = new FormData() + payloadData.append(req.file.name, req.file) + + const result = await this.api.post.upload(payloadData).catch(() => { + req.onError("Error uploading image") + return false + }) + + if (result) { + req.onSuccess() + await this.setState({ urlList: [...this.state.urlList, ...result.urls] }) + } + + if (typeof this.props.onUploadDone === "function") { + await this.props.onUploadDone(this.state.urlList) + } + + return result.urls + } + } + + render() { + const uploadButton = (
+ +
Upload
+
) + + return
+ + {this.state.fileList.length >= 8 ? null : uploadButton} + + + + +
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/ImageViewer/index.jsx b/packages/app/src/components/ImageViewer/index.jsx new file mode 100644 index 00000000..0c9bb35c --- /dev/null +++ b/packages/app/src/components/ImageViewer/index.jsx @@ -0,0 +1,54 @@ +import React from "react" +import { Swiper } from "antd-mobile" +import { LazyLoadImage } from "react-lazy-load-image-component" +import classnames from "classnames" + +import "react-lazy-load-image-component/src/effects/blur.css" +import "./index.less" + +const ImageViewer = (props) => { + React.useEffect(() => { + if (!Array.isArray(props.src)) { + props.src = [props.src] + } + }, []) + + const openViewer = () => { + if (props.extended) { + return false + } + + window.app.DrawerController.open("ImageViewer", ImageViewer, { + componentProps: { + src: props.src, + extended: true + } + }) + } + + return
+ + {props.src.map((image) => { + return { + openViewer(image) + }} + > + { + openViewer() + }} + onError={(e) => { + e.target.src = "/broken-image.svg" + }} + /> + + })} + +
+} + +export default ImageViewer \ No newline at end of file diff --git a/packages/app/src/components/ImageViewer/index.less b/packages/app/src/components/ImageViewer/index.less new file mode 100644 index 00000000..cafc1f60 --- /dev/null +++ b/packages/app/src/components/ImageViewer/index.less @@ -0,0 +1,31 @@ +.ImageViewer { + --ignore-dragger: true; + width: 100%; + + .image-wrapper { + width: 100%; + + img { + border-radius: 8px; + --ignore-dragger: true; + width: 100%; + max-height: 25vh; + object-fit: cover; + border-radius: 5px; + } + } + + &.extended { + height: 100%; + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: center; + + img { + max-height: 100vh; + height: 100%; + object-fit: fill; + } + } +} diff --git a/packages/app/src/components/LikeButton/index.jsx b/packages/app/src/components/LikeButton/index.jsx new file mode 100644 index 00000000..79a0146c --- /dev/null +++ b/packages/app/src/components/LikeButton/index.jsx @@ -0,0 +1,48 @@ +import React from "react" +import classnames from "classnames" + +import "./index.less" + +export default (props) => { + const [liked, setLiked] = React.useState(props.defaultLiked ?? false) + const [clicked, setCliked] = React.useState(false) + + const handleClick = async () => { + let to = !liked + + setCliked(to) + + if (typeof props.onClick === "function") { + const result = await props.onClick(to) + if (typeof result === "boolean") { + to = result + } + } + + setLiked(to) + } + + return +} \ No newline at end of file diff --git a/packages/app/src/components/LikeButton/index.less b/packages/app/src/components/LikeButton/index.less new file mode 100644 index 00000000..fa9f9e08 --- /dev/null +++ b/packages/app/src/components/LikeButton/index.less @@ -0,0 +1,151 @@ +@color-heart : #EA442B; +@likeAnimationDuration : .5s; +@likeAnimationEasing : cubic-bezier(.7, 0, .3, 1); + +.likeButton { + display : flex; + align-items : center; + justify-content: center; + + .ripple, + .ripple:before, + .ripple:after { + position : relative; + box-sizing: border-box; + } + + font-size : 40px; + border : none; + border-radius: 50%; + width : 1em; + height : 1em; + padding : 0; + margin : 0; + outline : none; + z-index : 2; + transition : transform @likeAnimationDuration @likeAnimationEasing; + cursor : pointer; + + background-color: transparent; + + &:before { + z-index : -1; + content : ''; + position : absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; + border-radius: inherit; + transition : inherit; + } + + &:after { + content : ''; + position : absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; + border-radius: inherit; + z-index : -1; + } + + .heart { + position: relative; + + >path { + stroke-width: 2; + transition : fill @likeAnimationDuration @likeAnimationEasing; + stroke : currentColor; + fill : transparent; + } + + &.liked { + >path { + stroke: var(--primaryColor); + fill : var(--primaryColor); + } + } + + &.clicked { + animation: heart-bounce @likeAnimationDuration @likeAnimationEasing; + + @keyframes heart-bounce { + 40% { + transform: scale(0.7); + } + + 0%, + 80%, + 100% { + transform: scale(1); + } + } + } + + animation: none; + } + + .ripple { + position : absolute; + height : 1em; + width : 1em; + border-radius: 50%; + overflow : hidden; + z-index : 1; + + &:before { + content : ''; + position : absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; + border : .4em solid var(--primaryColor); + border-radius: inherit; + transform : scale(0); + } + + &.clicked { + &:before { + animation: ripple-out @likeAnimationDuration @likeAnimationEasing; + } + } + + } +} + +@keyframes ripple-out { + from { + transform: scale(0); + } + + to { + transform: scale(5); + } +} + +@keyframes depress { + + from, + to { + transform: none; + } + + 50% { + transform: translateY(5%) scale(0.9); + } +} + +@keyframes depress-shadow { + + from, + to { + transform: none; + } + + 50% { + transform: scale(0.5); + } +} \ No newline at end of file diff --git a/packages/app/src/components/Navigation/index.jsx b/packages/app/src/components/Navigation/index.jsx new file mode 100644 index 00000000..5ef45b63 --- /dev/null +++ b/packages/app/src/components/Navigation/index.jsx @@ -0,0 +1,76 @@ +import React from "react" +import { Translation } from "react-i18next" + +import Items from "schemas/routes.json" +import { Icons, createIconRender } from "components/Icons" + +import "./index.less" + +export default class NavigationMenu extends React.Component { + onClick = (id) => { + window.app.setLocation(`/${id}`) + this.props.close() + } + + generateMenus = (items) => { + // group items it has children to a new array and the rest to a general array + items = items.reduce((acc, item) => { + if (item.children) { + acc.push(item) + } else { + acc[0].children.push(item) + } + + return acc + }, [{ + id: "general", + title: "General", + icon: "Home", + children: [] + }]) + + return items.map((group) => { + return
+

+ {Icons[group.icon] && createIconRender(group.icon)} + + {(t) => t(group.title)} + +

+
+ { + group.children.map((item) => { + return this.renderItem(item) + }) + } +
+
+ }) + } + + renderItem = (item, index) => { + return
this.onClick(item.id)} + className="item" + > +
+ {Icons[item.icon] && createIconRender(item.icon)} +
+
+

+ + {(t) => t(item.title ?? item.id)} + +

+
+
+ } + + render() { + return
+ {this.generateMenus(Items)} +
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/Navigation/index.less b/packages/app/src/components/Navigation/index.less new file mode 100644 index 00000000..a2cd3498 --- /dev/null +++ b/packages/app/src/components/Navigation/index.less @@ -0,0 +1,81 @@ +@buttonSize: 26vw; +@buttonBorderRadius: 8px; + +.navigation { + display: inline-flex; + flex-direction: column; + + width: 100%; + overflow: hidden; + + .group { + display: inline-flex; + flex-direction: column; + + .items { + display: flex; + align-items: center; + justify-content: space-around; + flex-wrap: wrap; + + .item { + --ignore-dragger: true; + + display: flex; + flex-direction: column; + + align-items: center; + justify-content: center; + + padding: 10px; + margin: 10px 0; + + width: @buttonSize; + min-width: @buttonSize; + height: @buttonSize; + min-height: @buttonSize; + + border-radius: @buttonBorderRadius; + + background-color: var(--background-color-accent); + transition: all 80ms ease-in-out; + + .icon { + svg { + margin: 0 !important; + font-size: 2rem; + } + } + + .name { + width: 100%; + + word-break: break-all; + text-overflow: ellipsis; + text-align: center; + + color: var(--background-color-contrast); + padding-top: 10px; + + h1 { + word-break: break-all; + width: 100%; + + font-size: 1.1rem; + margin: 0!important; + } + } + } + + .item:active { + background-color: var(--background-color-primary); + color: var(--background-color-contrast); + transform: scale(0.9); + } + } + + > div { + margin-bottom: 20px; + } + } +} \ No newline at end of file diff --git a/packages/app/src/components/Notifications/index.jsx b/packages/app/src/components/Notifications/index.jsx new file mode 100644 index 00000000..8bcdbd94 --- /dev/null +++ b/packages/app/src/components/Notifications/index.jsx @@ -0,0 +1,8 @@ +import React from "react" +import { notification } from "antd" + +export default { + error: (...context) => { + notification.error(context) + }, +} diff --git a/packages/app/src/components/ObjectInspector/index.jsx b/packages/app/src/components/ObjectInspector/index.jsx new file mode 100644 index 00000000..fa1ff017 --- /dev/null +++ b/packages/app/src/components/ObjectInspector/index.jsx @@ -0,0 +1,91 @@ +import React from "react" +import * as antd from "antd" +import { decycle } from "@corenode/utils" +import { Icons } from "components/Icons" + +function parseTreeData(data, backKey) { + const keys = Object.keys(data) + let result = Array() + + keys.forEach((key) => { + const value = data[key] + const valueType = typeof value + const obj = Object() + + obj.key = backKey ? `${backKey}-${key}` : key + obj.title = key + obj.type = valueType + + if (valueType === "object") { + obj.children = parseTreeData(value) + } else { + obj.children = [ + { + key: `${obj.key}-value`, + title: "value", + icon: , + children: [ + { + key: `${obj.key}-value-indicator`, + title: String(value), + icon: , + }, + ], + }, + { + key: `${obj.key}-type`, + title: "type", + children: [ + { + key: `${obj.key}-type-indicator`, + title: valueType, + }, + ], + }, + ] + } + + result.push(obj) + }) + + return result +} + +export default class ObjectInspector extends React.Component { + state = { + data: null, + expandedKeys: [], + autoExpandParent: true, + } + + componentDidMount() { + const raw = decycle(this.props.data) + const data = parseTreeData(raw) + + this.setState({ raw, data }) + } + + onExpand = (expandedKeys) => { + this.setState({ + expandedKeys, + autoExpandParent: false, + }) + } + + render() { + const { expandedKeys, autoExpandParent } = this.state + return ( +
+ } + onExpand={this.onExpand} + expandedKeys={expandedKeys} + autoExpandParent={autoExpandParent} + treeData={this.state.data} + /> +
+ ) + } +} diff --git a/packages/app/src/components/PostCard/index.jsx b/packages/app/src/components/PostCard/index.jsx new file mode 100644 index 00000000..7d6737f3 --- /dev/null +++ b/packages/app/src/components/PostCard/index.jsx @@ -0,0 +1,246 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/Icons" +import { LikeButton } from "components" +import moment from "moment" +import classnames from "classnames" + +import { User } from "models" + +import CSSMotion from "rc-animate/lib/CSSMotion" +import useLayoutEffect from "rc-util/lib/hooks/useLayoutEffect" + +import "./index.less" + +const getCurrentHeight = (node) => ({ height: node.offsetHeight }) + +const getMaxHeight = (node) => { + return { height: node.scrollHeight } +} + +const getCollapsedHeight = () => ({ height: 0, opacity: 0 }) + +function PostHeader(props) { + const [timeAgo, setTimeAgo] = React.useState(0) + + const goToProfile = () => { + window.app.goToAccount(props.postData.user?.username) + } + + const updateTimeAgo = () => { + setTimeAgo(moment(props.postData.created_at ?? "").fromNow()) + } + + React.useEffect(() => { + updateTimeAgo() + + const interval = setInterval(() => { + updateTimeAgo() + }, 10000) + + return () => { + clearInterval(interval) + } + }, [props.postData.created_at]) + + return
+
+
+ +
+
+
+

+ {props.postData.user?.fullName ?? `@${props.postData.user?.username}`} + {props.postData.user?.verified && } +

+
+ +
+ {timeAgo} +
+
+
+
+
+ +
+ {props.likes} +
+
+
+ +
+ {props.comments} +
+
+
+
+} + +function PostContent({ message }) { + return
+ {message} +
+} + +function PostActions(props) { + return
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ {props.isSelf &&
+
+ +
+
} +
+} + +export class PostCard extends React.Component { + state = { + loading: true, + selfId: null, + data: this.props.data, + } + + api = window.app.request + + componentDidMount = async () => { + const selfId = await User.selfUserId() + + window.app.ws.listen(`like.post.${this.props.data._id}`, async (data) => { + await this.setState({ data }) + }) + window.app.ws.listen(`unlike.post.${this.props.data._id}`, async (data) => { + await this.setState({ data }) + }) + + await this.setState({ + selfId, + loading: false + }) + } + + onClickLike = async (to) => { + let result = false + + if (to) { + const apiResult = await await this.api.put.like({ post_id: this.props.data._id }) + result = apiResult.success + } else { + const apiResult = await await this.api.put.unlike({ post_id: this.props.data._id }) + result = apiResult.success + } + + return result + } + + onClickSave = async () => { + // TODO: save post + } + + hasLiked = () => { + return this.state.data.likes.some(user_id => user_id === this.state.selfId) + } + + isSelf = () => { + return this.state.selfId === this.state.data.user._id + } + + render() { + const hasLiked = this.hasLiked() + + if (this.state.loading) { + return + } + + return
+
+ this.onClickLike(false)} + onClickSave={this.onClickSave} + likes={this.state.data.likes.length} + comments={this.state.data.comments.length} + /> + +
+
+
+ +
+
+
+ +
+
+ } +} + +export const PostCardAnimated = ({ + data, + onAppear, + motionAppear, +}, ref,) => { + const motionRef = React.useRef(false) + + useLayoutEffect(() => { + return () => { + if (motionRef.current) { + onAppear() + } + } + }, []) + + return { + motionRef.current = true; + return getMaxHeight(node); + }} + onAppearEnd={onAppear} + onLeaveStart={getCurrentHeight} + onLeaveActive={getCollapsedHeight} + onLeaveEnd={() => { + onLeave(id) + }} + > + {(props, passedMotionRef) => { + return + }} + +} + +export const ForwardedPostCardAnimated = React.forwardRef(PostCardAnimated) + +export default ForwardedPostCardAnimated \ No newline at end of file diff --git a/packages/app/src/components/PostCard/index.less b/packages/app/src/components/PostCard/index.less new file mode 100644 index 00000000..bcf0034b --- /dev/null +++ b/packages/app/src/components/PostCard/index.less @@ -0,0 +1,295 @@ +.postCard { + display : inline-flex; + flex-direction: column; + + width : 100%; + max-width: 600px; + + filter: drop-shadow(3px 3px 2px var(--shadow-color)); + + background-color: var(--background-color-accent); + border-radius : 8px; + + transition: all 0.2s ease-in-out; + + outline-width: 1px; + outline-style: solid; + outline-color: transparent; + + &.liked { + filter : drop-shadow(0px 0px 2px var(--primaryColor)); + outline-color: var(--primaryColor); + } + + .wrapper { + display : inline-flex; + flex-direction: column; + align-items : center; + + width : 100%; + padding: 17px; + + transition: all 0.2s ease-in-out; + + .postHeader { + display : inline-flex; + flex-direction : row; + justify-content: space-between; + + .userInfo { + display : inline-flex; + flex-direction: row; + align-items : center; + + margin-bottom: 15px; + + >div { + margin-right: 10px; + } + + svg { + fill : var(--appColor); + margin-left: 6px; + } + + .info { + display : inline-flex; + flex-direction : column; + align-items : center; + justify-content: start; + + text-align: start; + + width: fit-content; + + color: var(--background-color-contrast); + + h1 { + color : var(--background-color-contrast); + margin : 0; + font-family: "DM Mono", monospace; + align-self : start; + cursor : pointer; + } + + >div { + align-self: start; + } + } + } + + .postStadistics { + display : inline-flex; + flex-direction: column; + font-size : 16px; + + color : var(--background-color-contrast); + height: fit-content; + + .item { + display : inline-flex; + align-items : center; + justify-content: flex-end; + height : fit-content; + + margin-left : 20px; + margin-bottom: 5px; + + .icon { + &.filled { + color: var(--primaryColor); + fill : var(--primaryColor); + } + } + + .value { + font-family: "DM Mono", monospace; + font-size : 14px; + } + } + } + } + + .content { + display : inline-flex; + flex-direction: column; + align-items : flex-start; + + //background-color: var(--background-color-primary); + + padding : 0 10px 10px 10px; + border-radius: 8px; + + font-size : 14px; + font-family: "Poppins", sans-serif; + + color: var(--background-color-contrast); + + overflow : hidden; + word-break : break-all; + user-select: text; + } + + >div { + width: 100%; + } + } + + .actionsIndicatorWrapper { + display : flex; + flex-direction : row; + align-items : center; + justify-content: center; + + transition: all 0.2s ease-in-out; + } + + .actionsIndicator { + display : flex; + flex-direction : row; + align-items : center; + justify-content: center; + + width : 10vw; + padding: 2px; + + border-radius : 8px 8px 0 0; + background-color: var(--background-color-primary); + color : var(--background-color-contrast); + + font-size: 18px; + + transition: all 0.2s ease-in-out; + + svg { + margin: 0 !important; + } + } + + .actionsWrapper { + display : flex; + flex-direction : row; + align-items : center; + justify-content: center; + + position: absolute; + bottom : 0; + left : 0; + + opacity: 0; + + width : 100%; + height: 40px; + + margin-top: 15px; + padding : 10px; + + border-radius: 8px; + transition : all 0.2s ease-in-out; + + background-color: var(--background-color-primary); + } + + .actions { + display : inline-flex; + flex-direction : row; + align-items : center; + justify-content: space-between; + + width: 80%; + + transition: all 0.2s ease-in-out; + + color: var(--background-color-contrast); + + .action { + display : inline-flex; + flex-direction: column; + + transition: all 0.2s ease-in-out; + + .icon { + cursor : pointer; + transition: all 0.2s ease-in-out; + + svg { + transition: all 0.2s ease-in-out; + } + } + + .value { + position: absolute; + bottom : 0; + + font-size : 14px; + font-family: "DM Mono", monospace; + + transform : translate(0, 50%); + transition: all 0.2s ease-in-out; + } + } + + .action:hover { + .icon { + svg { + color: var(--primaryColor) !important; + } + } + } + + svg { + margin: 0 !important; + } + + >div { + display : flex; + flex-direction : row; + align-items : center; + justify-content: center; + + border-radius: 360px; + width : 55px; + height : 55px; + + font-size: 20px; + padding : 2px; + + background-color: var(--background-color-primary); + transform : translate(0, -15px); + } + } +} + +.postCard:hover { + .wrapper { + margin-bottom: 25px; + } + + .actionsWrapper { + opacity: 1; + } + + // .actionsIndicator { + // opacity: 0; + // } +} + +@keyframes fadeActionsIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeActionOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} \ No newline at end of file diff --git a/packages/app/src/components/PostCreator/index.jsx b/packages/app/src/components/PostCreator/index.jsx new file mode 100644 index 00000000..679e3a05 --- /dev/null +++ b/packages/app/src/components/PostCreator/index.jsx @@ -0,0 +1,98 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/Icons" +import { User } from "models" +import classnames from "classnames" + +import "./index.less" + +const maxMessageLength = 512 + +const PostCreatorInput = (props) => { + const [value, setValue] = React.useState("") + + const canPublish = () => { + return value.length !== 0 && value.length < maxMessageLength + } + + const onChange = (e) => { + setValue(e.target.value) + } + + const handleSubmit = () => { + if (canPublish()) { + if (typeof props.onSubmit === "function") { + props.onSubmit(value) + } + + setValue("") + } + } + + return
+
+ +
+ +
+ : } + /> +
+
+} + +export default class PostCreator extends React.Component { + state = { + loading: false, + } + api = window.app.request + + componentDidMount = async () => { + const userData = await User.data() + + this.setState({ + userData + }) + } + + onSubmit = async (value) => { + await this.setState({ loading: true }) + + const result = this.api.put.post({ + message: value, + }).catch(error => { + console.error(error) + antd.message.error(error) + + return false + }) + + this.setState({ loading: false }) + } + + render() { + return
+ +
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/PostCreator/index.less b/packages/app/src/components/PostCreator/index.less new file mode 100644 index 00000000..9a5439fe --- /dev/null +++ b/packages/app/src/components/PostCreator/index.less @@ -0,0 +1,81 @@ +.postCreator { + width : 100%; + padding : 15px; + background-color: var(--background-color-accent); + + max-width : 600px; + border-radius: 7px; + + .textInput { + display : flex; + width : 100%; + transition : height 150ms ease-in-out; + background-color: var(--background-color-accent); + + svg { + margin: 0 !important; + } + + .avatar { + width : fit-content; + height: 45px; + + display: flex; + + img { + width : 45px; + height : 45px; + border-radius: 12px; + } + } + + .ant-input { + color: var(--background-color-contrast); + } + + .textArea { + border-radius: 8px !important; + transition : all 150ms ease-in-out !important; + + &.active { + background-color: var(--background-color-primary); + } + } + + .ant-btn-primary { + z-index : 10; + position : relative; + border-radius : 0 10px 10px 0; + height : 100%; + vertical-align: bottom; + border : none; + box-shadow : none; + } + + .ant-input { + background-color: var(--background-color-accent); + + z-index : 10; + position : relative; + border-color : transparent !important; + box-shadow : none; + border-radius: 3px 0 0; + height : 100%; + padding : 5px 10px; + transition : height 150ms linear; + width : 100%; + } + + .ant-btn-primary[disabled] { + background-color: var(--background-color-accent); + } + + .ant-input:hover { + border-color: #1890ff; + } + + .ant-input-affix-wrapper { + height: 100%; + } + } +} \ No newline at end of file diff --git a/packages/app/src/components/PostsFeed/index.jsx b/packages/app/src/components/PostsFeed/index.jsx new file mode 100644 index 00000000..5588b58a --- /dev/null +++ b/packages/app/src/components/PostsFeed/index.jsx @@ -0,0 +1,100 @@ +import React from "react" +import * as antd from "antd" +import { PostCard } from "components" + +import List from "rc-virtual-list" + +import "./index.less" + + +export default class PostsFeed extends React.Component { + state = { + initialLoading: true, + list: [], + animating: false, + } + + api = window.app.request + listRef = React.createRef() + + componentDidMount = async () => { + await this.loadPosts() + + window.app.ws.listen(`new.post`, async (data) => { + this.onInsert(data) + }) + + await this.setState({ + initialLoading: false, + }) + } + + loadPosts = async ({ + startIndex, + stopIndex, + } = {}) => { + const result = await this.api.get.feed(undefined, { + startIndex, + stopIndex, + feedLength: this.props.feedLength, + user_id: this.props.fromUserId, + }) + + console.log(result) + + if (result) { + this.setState({ list: result }) + } + } + + onAppear = (...args) => { + console.log('Appear:', args) + this.setState({ animating: false }) + } + + lockForAnimation = () => { + this.setState({ animating: true }) + } + + onInsert = async (data) => { + const updatedList = this.state.list + + updatedList.unshift(data) + + await this.setState({ + list: updatedList, + }) + + this.lockForAnimation() + } + + render() { + if (this.state.initialLoading) { + return + } + + if (this.state.list.length === 0) { + return + } + + return
+ + {(item, index) => ( + + )} + +
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/PostsFeed/index.less b/packages/app/src/components/PostsFeed/index.less new file mode 100644 index 00000000..10637656 --- /dev/null +++ b/packages/app/src/components/PostsFeed/index.less @@ -0,0 +1,41 @@ +.postsFeed { + display : flex; + flex-direction : column; + align-items : center; + justify-content: center; + + width: 100%; + + .content { + overflow: visible; + + display : flex; + flex-direction : column; + align-items : center; + justify-content: center; + + width : 100%; + max-width: 40vw; + + .rc-virtual-list-holder { + overflow-y: visible !important; + width : 100%; + + } + + .rc-virtual-list-holder-inner { + width : 100%; + overflow: visible; + + display : flex; + flex-direction : column; + align-items : center; + justify-content: center; + + >div { + width : 100%; + margin-bottom: 15px; + } + } + } +} \ No newline at end of file diff --git a/packages/app/src/components/RenderError/index.jsx b/packages/app/src/components/RenderError/index.jsx new file mode 100644 index 00000000..767e0753 --- /dev/null +++ b/packages/app/src/components/RenderError/index.jsx @@ -0,0 +1,73 @@ +import React from "react" +import { Result, Button, Typography } from "antd" +import { CloseCircleOutlined } from "@ant-design/icons" +import config from "config" + +import "./index.less" + +const { Paragraph, Text } = Typography + +const ErrorEntry = (props) => { + const { error } = props + + if (!error) { + return
+ + Unhandled error +
+ } + + return
+ + {error.info.toString()} +
+} + +export default (props) => { + let errors = [] + + if (Array.isArray(props.error)) { + errors = props.error + } else { + errors.push(props.error) + } + + const onClickGoMain = () => { + window.app.setLocation(config.app.mainPath ?? "/main") + } + const onClickReload = () => { + window.location.reload() + } + + return ( +
+ + Go Main + , + , + ]} + > + + + We catch the following errors: + +
+ {errors.map((error, index) => { + return + })} +
+
+
+
+ ) +} \ No newline at end of file diff --git a/packages/app/src/components/RenderError/index.less b/packages/app/src/components/RenderError/index.less new file mode 100644 index 00000000..3099168c --- /dev/null +++ b/packages/app/src/components/RenderError/index.less @@ -0,0 +1,16 @@ +.errors { + margin-top: 12px; + + .error { + margin-bottom: 10px; + + svg { + color: red; + margin-right: 10px; + } + .stack { + margin-left: 24px; + word-wrap: break-word; + } + } +} diff --git a/packages/app/src/components/RenderWindow/index.jsx b/packages/app/src/components/RenderWindow/index.jsx new file mode 100644 index 00000000..2f57c9f0 --- /dev/null +++ b/packages/app/src/components/RenderWindow/index.jsx @@ -0,0 +1,196 @@ +import React from "react" +import ReactDOM from "react-dom" +import { Rnd } from "react-rnd" +import { Icons } from "components/Icons" + +import "./index.less" + +class DOMWindow { + constructor(props) { + this.props = { ...props } + + this.id = this.props.id + this.key = 0 + + this.root = document.getElementById("app_windows") + this.element = document.getElementById(this.id) + + // handle root container + if (!this.root) { + this.root = document.createElement("div") + this.root.setAttribute("id", "app_windows") + + document.body.append(this.root) + } + + // get all windows opened has container + const rootNodes = this.root.childNodes + + // ensure this window has last key from rootNode + if (rootNodes.length > 0) { + const lastChild = rootNodes[rootNodes.length - 1] + const lastChildKey = Number(lastChild.getAttribute("key")) + + this.key = lastChildKey + 1 + } + + this.element = document.createElement("div") + this.element.setAttribute("id", this.id) + this.element.setAttribute("key", this.key) + + this.root.appendChild(this.element) + } + + render = (fragment) => { + ReactDOM.render( + fragment, + this.element, + ) + + return this + } + + create = () => { + // set render + this.render() + + return this + } + + destroy = () => { + this.element.remove() + return this + } +} + +class WindowRender extends React.Component { + state = { + actions: [], + dimensions: { + height: this.props.height ?? 600, + width: this.props.width ?? 400, + }, + position: this.props.defaultPosition, + visible: false, + } + + componentDidMount = () => { + this.setDefaultActions() + + if (typeof this.props.actions !== "undefined") { + if (Array.isArray(this.props.actions)) { + const actions = this.state.actions ?? [] + + this.props.actions.forEach((action) => { + actions.push(action) + }) + + this.setState({ actions }) + } + } + + if (!this.state.position) { + this.setState({ position: this.getCenterPosition() }) + } + + this.toogleVisibility(true) + } + + toogleVisibility = (to) => { + this.setState({ visible: to ?? !this.state.visible }) + } + + getCenterPosition = () => { + const dimensions = this.state?.dimensions ?? {} + + const windowHeight = dimensions.height ?? 600 + const windowWidth = dimensions.width ?? 400 + + return { + x: window.innerWidth / 2 - windowWidth / 2, + y: window.innerHeight / 2 - windowHeight / 2, + } + } + + setDefaultActions = () => { + const { actions } = this.state + + actions.push({ + key: "close", + render: () => , + onClick: () => { + this.props.destroy() + }, + }) + + this.setState({ actions }) + } + + renderActions = () => { + const actions = this.state.actions + + if (Array.isArray(actions)) { + return actions.map((action) => { + return ( +
+ {React.isValidElement(action.render) ? action.render : React.createElement(action.render)} +
+ ) + }) + } + + return null + } + + getComponentRender = () => { + return React.isValidElement(this.props.children) + ? React.cloneElement(this.props.children, this.props.renderProps) + : React.createElement(this.props.children, this.props.renderProps) + } + + render() { + const { position, dimensions, visible } = this.state + + if (!visible) { + return null + } + + return ( + { + this.setState({ + dimensions: { + width: ref.offsetWidth, + height: ref.offsetHeight, + }, + position, + }) + }} + dragHandleClassName="window_topbar" + minWidth={this.props.minWidth ?? "300px"} + minHeight={this.props.minHeight ?? "200px"} + > +
+
+
{this.props.id}
+
{this.renderActions()}
+
+ +
{this.getComponentRender()}
+
+
+ ) + } +} + +export { DOMWindow, WindowRender } \ No newline at end of file diff --git a/packages/app/src/components/RenderWindow/index.less b/packages/app/src/components/RenderWindow/index.less new file mode 100644 index 00000000..921e0306 --- /dev/null +++ b/packages/app/src/components/RenderWindow/index.less @@ -0,0 +1,93 @@ +@wrapper_background: rgba(255, 255, 255, 1); + +@topbar_height: 30px; +@topbar_background: rgba(0, 0, 0, 0.4); + +.window_wrapper { + border-radius: 12px; + + background-color: @wrapper_background; + border: 1px solid rgba(161, 133, 133, 0.2); + overflow: hidden; + + &.translucid { + border: unset; + background-color: rgba(0, 0, 0, 0.2); + + backdrop-filter: blur(10px); + --webkit-backdrop-filter: blur(10px); + filter: drop-shadow(8px 8px 10px rgba(0, 0, 0, 0.5)); + } +} + +.window_topbar { + position: sticky; + z-index: 51; + background-color: @topbar_background; + + height: @topbar_height; + width: 100%; + + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + + > div { + margin: 0 5px; + line-height: 0; + } + + .title { + margin-left: 20px; + + color: #fff - @topbar_background; + + font-size: 13px; + font-style: italic; + font-family: "JetBrains Mono", monospace; + } + + .actions { + display: flex; + flex-direction: row-reverse; + align-items: center; + justify-content: end; + + color: #fff - @topbar_background; + + > div { + transition: all 150ms ease-in-out; + margin-right: 10px; + cursor: pointer; + + height: fit-content; + width: fit-content; + line-height: 0; + + display: flex; + align-items: center; + justify-content: end; + } + > div:hover { + color: var(--primary-color); + } + } +} + +.window_body { + z-index: 50; + + padding: 10px 20px; + height: calc(100% - @topbar_height); + width: 100%; + + overflow: overlay; + user-select: text !important; + --webkit-user-select: text !important; + + > div { + user-select: text !important; + --webkit-user-select: text !important; + } +} diff --git a/packages/app/src/components/ScheduledProgress/index.jsx b/packages/app/src/components/ScheduledProgress/index.jsx new file mode 100644 index 00000000..61e8293e --- /dev/null +++ b/packages/app/src/components/ScheduledProgress/index.jsx @@ -0,0 +1,85 @@ +import React from "react" +import moment from "moment" +import * as antd from "antd" +import classnames from "classnames" + +import "./index.less" + +const defaultDateFormat = "DD-MM-YYYY hh:mm" + +export default class ScheduledProgress extends React.Component { + isDateReached = (date) => { + const format = this.props.dateFormat ?? defaultDateFormat + const now = moment().format(format) + const result = moment(date, format).isSameOrBefore(moment(now, format)) + + console.debug(`[${date}] is before [${now}] => ${result}`) + + return result + } + + getDiffBetweenDates = (start, end) => { + // THIS IS NOT COUNTING WITH THE YEAR + const format = "DD-MM-YYYY" + + const startDate = moment(start, format) + const endDate = moment(end, format) + const now = moment().format(format) + + // count days will took to complete + const days = endDate.diff(startDate, "days") + + const daysLeft = endDate.diff(moment(now, format), "days") + const daysPassed = moment(now, format).diff(startDate, "days") + + let percentage = 0 + + switch (daysLeft) { + case 0: { + percentage = 99 + break + } + case 1: { + percentage = 95 + break + } + default: { + if (daysPassed > 0 && daysPassed < days) { + percentage = (daysPassed / days) * 100 + } + break + } + } + + if (daysPassed > days) { + percentage = 100 + } + + return { daysLeft, daysPassed, percentage } + } + + render() { + const startReached = this.isDateReached(this.props.start) + const finishReached = this.isDateReached(this.props.finish) + const datesDiff = this.getDiffBetweenDates(this.props.start, this.props.finish) + + return
+
+ {this.props.start} +
+ +
+ {this.props.finish} +
+
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/ScheduledProgress/index.less b/packages/app/src/components/ScheduledProgress/index.less new file mode 100644 index 00000000..bb060934 --- /dev/null +++ b/packages/app/src/components/ScheduledProgress/index.less @@ -0,0 +1,68 @@ +.scheduled_progress { + display: flex; + flex-direction: row; + justify-content: center; + + .point { + height: 40px; + text-align: center; + align-items: end; + white-space: nowrap; + display: flex; + width: 72px; + justify-content: center; + + &.right { + transform: translate(-50%, 0); + } + + &.left { + transform: translate(50%, 0); + } + + &.reached { + color: rgba(0, 0, 0, 0.45); + } + } + + .ant-progress::before { + content: ""; + width: 8px; + height: 8px; + border-radius: 24px; + transform: translateX(-10px); + background-color: rgb(128, 128, 128); + } + + .ant-progress::after { + content: ""; + width: 8px; + height: 8px; + border-radius: 24px; + transform: translateX(10px); + background-color: rgb(128, 128, 128); + } + + .ant-progress { + font-size: 0; + display: flex; + align-items: center; + height: fit-content; + + &.startReached { + &::before { + background-color: var(--primaryColor) !important; + } + } + + &.finishReached { + &::after { + background-color: var(--primaryColor) !important; + } + } + } + + .ant-progress-bg { + background-color: var(--primaryColor); + } +} diff --git a/packages/app/src/components/SearchButton/index.jsx b/packages/app/src/components/SearchButton/index.jsx new file mode 100644 index 00000000..ab155ce2 --- /dev/null +++ b/packages/app/src/components/SearchButton/index.jsx @@ -0,0 +1,32 @@ +import React from "react" +import { SearchBar } from "antd-mobile" +import classnames from "classnames" + +import "./index.less" + +export default (props) => { + const searchBoxRef = React.useRef(null) + const [open, setOpen] = React.useState() + + const openSearchBox = (to) => { + to = to ?? !open + setOpen(to) + + if (to) { + searchBoxRef.current?.focus() + } + } + + return
openSearchBox(true)} + className="searchButton"> + openSearchBox(true)} + onBlur={() => openSearchBox(false)} + /> +
+} \ No newline at end of file diff --git a/packages/app/src/components/SearchButton/index.less b/packages/app/src/components/SearchButton/index.less new file mode 100644 index 00000000..6604101f --- /dev/null +++ b/packages/app/src/components/SearchButton/index.less @@ -0,0 +1,18 @@ +.searchButton { + .searchBox { + .adm-search-bar-input { + transition: all 150ms ease-in-out; + width: 0px; + } + + &.open { + .adm-search-bar-input { + width: 20vw; + } + } + } + + svg { + margin: 0; + } +} diff --git a/packages/app/src/components/SelectableList/index.jsx b/packages/app/src/components/SelectableList/index.jsx new file mode 100644 index 00000000..ecc118b5 --- /dev/null +++ b/packages/app/src/components/SelectableList/index.jsx @@ -0,0 +1,360 @@ +import React from "react" +import * as antd from "antd" +import { Button } from "antd" +import classnames from "classnames" +import _ from "lodash" +import { Translation } from "react-i18next" + +import { Icons, createIconRender } from "components/Icons" +import { ActionsBar, } from "components" +import { useLongPress, Haptics } from "utils" + +import "./index.less" + +const ListItem = React.memo((props) => { + let { item } = props + + if (!item.key) { + item.key = item._id ?? item.id + } + + const doubleClickSpeed = 400 + let delayedClick = null + let clickedOnce = null + + const handleOnceClick = () => { + clickedOnce = null + + if (typeof props.onClickItem === "function") { + return props.onClickItem(item.key) + } + } + + const handleDoubleClick = () => { + if (typeof props.onDoubleClickItem === "function") { + return props.onDoubleClickItem(item.key) + } + } + + const handleLongPress = () => { + if (typeof props.onLongPressItem === "function") { + return props.onLongPressItem(item.key) + } + } + + const renderChildren = props.renderChildren(item) + const isDisabled = renderChildren.props.disabled + + return React.createElement("div", { + id: item.key, + key: item.key, + disabled: isDisabled, + className: classnames("selectableList_item", { + ["selected"]: props.selected, + ["disabled"]: isDisabled, + }), + onDoubleClick: () => { + if (isDisabled) { + return false + } + + handleDoubleClick() + }, + ...useLongPress( + // onLongPress + () => { + if (isDisabled) { + return false + } + + if (props.onlyClickSelection) { + return false + } + + handleLongPress() + }, + // onClick + () => { + if (isDisabled) { + return false + } + + if (props.onlyClickSelection) { + return handleOnceClick() + } + + if (!delayedClick) { + delayedClick = _.debounce(handleOnceClick, doubleClickSpeed) + } + + if (clickedOnce) { + delayedClick.cancel() + clickedOnce = false + handleDoubleClick() + } else { + clickedOnce = true + delayedClick() + } + }, + { + shouldPreventDefault: true, + delay: props.longPressDelay ?? 300, + } + ), + }, renderChildren) +}) + +export default class SelectableList extends React.Component { + state = { + selectedKeys: [], + selectionEnabled: false, + } + + componentDidMount() { + if (typeof this.props.defaultSelected !== "undefined" && Array.isArray(this.props.defaultSelected)) { + this.setState({ + selectedKeys: [...this.props.defaultSelected], + }) + } + } + + componentDidUpdate(prevProps, prevState) { + if (prevState.selectionEnabled !== this.state.selectionEnabled) { + if (this.state.selectionEnabled) { + this.handleFeedbackEvent("selectionStart") + } else { + this.handleFeedbackEvent("selectionEnd") + } + } + } + + handleFeedbackEvent = (event) => { + if (typeof Haptics[event] === "function") { + return Haptics[event]() + } + } + + isKeySelected = (key) => { + return this.state.selectedKeys.includes(key) + } + + isAllSelected = () => { + return this.state.selectedKeys.length === this.props.items.length + } + + selectAll = () => { + if (this.props.items.length > 0) { + let updatedSelectedKeys = [...this.props.items.map((item) => item.key ?? item.id ?? item._id)] + + if (typeof this.props.disabledKeys !== "undefined") { + updatedSelectedKeys = updatedSelectedKeys.filter((key) => { + return !this.props.disabledKeys.includes(key) + }) + } + + this.handleFeedbackEvent("selectionChanged") + + this.setState({ + selectionEnabled: true, + selectedKeys: updatedSelectedKeys, + }) + } + } + + unselectAll = () => { + this.setState({ + selectionEnabled: false, + selectedKeys: [], + }) + } + + selectKey = (key) => { + let list = this.state.selectedKeys ?? [] + list.push(key) + + this.handleFeedbackEvent("selectionChanged") + + return this.setState({ selectedKeys: list }) + } + + unselectKey = (key) => { + let list = this.state.selectedKeys ?? [] + list = list.filter((_key) => key !== _key) + + this.handleFeedbackEvent("selectionChanged") + + return this.setState({ selectedKeys: list }) + } + + onDone = () => { + if (typeof this.props.onDone === "function") { + this.props.onDone(this.state.selectedKeys) + } + this.unselectAll() + } + + onDiscard = () => { + if (typeof this.props.onDiscard === "function") { + this.props.onDiscard(this.state.selectedKeys) + } + this.unselectAll() + } + + onDoubleClickItem = (key) => { + if (typeof this.props.onDoubleClick === "function") { + this.props.onDoubleClick(key) + } + } + + onClickItem = (key) => { + if (this.props.overrideSelectionEnabled || this.state.selectionEnabled) { + if (this.isKeySelected(key)) { + this.unselectKey(key) + } else { + this.selectKey(key) + } + } else { + if (typeof this.props.onClickItem === "function") { + this.props.onClickItem(key) + } + } + } + + onLongPressItem = (key) => { + if (this.props.overrideSelectionEnabled) { + return false + } + + if (!this.state.selectionEnabled) { + this.selectKey(key) + this.setState({ selectionEnabled: true }) + } + } + + renderProvidedActions = () => { + return this.props.actions.map((action) => { + return ( +
+ +
+ ) + }) + } + + getLongPressDelay = () => { + return window.app.settings.get("selection_longPress_timeout") + } + + renderItems = (data) => { + return data.length > 0 ? data.map((item, index) => { + item.key = item.key ?? item.id ?? item._id + + if (item.children && Array.isArray(item.children)) { + return
+

+ {React.isValidElement(item.icon) ? item.icon : Icons[item.icon] && createIconRender(item.icon)} + + {t => t(item.label)} + +

+ +
+ {this.renderItems(item.children)} +
+
+ } + + let selected = this.isKeySelected(item.key) + + return + }) : + } + + render() { + if (!this.props.overrideSelectionEnabled && this.state.selectionEnabled && this.state.selectedKeys.length === 0) { + this.setState({ selectionEnabled: false }) + this.unselectAll() + } + + const isAllSelected = this.isAllSelected() + let items = this.renderItems(this.props.items) + + return
+
+ {items} +
+ {this.props.items.length > 0 && (this.props.overrideSelectionEnabled || this.state.selectionEnabled) && !this.props.actionsDisabled && + +
+ +
+ {this.props.bulkSelectionAction && +
+ +
} + {Array.isArray(this.props.actions) && this.renderProvidedActions()} +
+ } +
+ } +} \ No newline at end of file diff --git a/packages/app/src/components/SelectableList/index.less b/packages/app/src/components/SelectableList/index.less new file mode 100644 index 00000000..c2320be6 --- /dev/null +++ b/packages/app/src/components/SelectableList/index.less @@ -0,0 +1,82 @@ +@selectableList_item_borderColor_active: rgba(51, 51, 51, 1); +@selectableList_item_borderColor_normal: rgba(51, 51, 51, 0.3); + +.selectableList { + .selectableList_content { + .selectableList_item { + --ignore-dragger: true; + display: inline-flex; + overflow-x: overlay; + + align-items: center; + + user-select: none; + --webkit-user-select: none; + + width: 100%; + height: fit-content; + + border: @selectableList_item_borderColor_normal 1px solid; + border-radius: 4px; + + margin-bottom: 6px; + padding: 7px; + + transition: all 150ms ease-in-out; + + &.selected { + background-color: #f5f5f5; + transform: scale(0.98); + margin-bottom: 3px; + } + + &.disabled { + opacity: 0.5; + pointer-events: none; + } + + ::-webkit-scrollbar { + position: absolute; + display: none; + + width: 0; + height: 0; + z-index: 0; + } + } + + .selectableList_item:active { + background-color: #f5f5f5; + transform: scale(0.98); + margin-bottom: 3px; + } + } + + &.selectionEnabled { + .selectableList_content { + .selectableList_item { + cursor: pointer; + + border: rgba(51, 51, 51, 0.3) 1px solid; + border-radius: 8px; + margin-bottom: 12px; + + h1, h3 { + user-select: none; + --webkit-user-select: none; + } + } + } + } +} + +.selectableList_group { + display: flex; + flex-direction: column; + + .selectableList_subItems { + margin-left: 10px; + } + + margin-bottom: 10px; +} diff --git a/packages/app/src/components/ServerStatus/index.jsx b/packages/app/src/components/ServerStatus/index.jsx new file mode 100644 index 00000000..b36cdccb --- /dev/null +++ b/packages/app/src/components/ServerStatus/index.jsx @@ -0,0 +1,31 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/Icons" + +export default () => { + const [connected, setConnected] = React.useState(window.app.ws.mainSocketConnected ?? false) + + window.app.eventBus.on("websocket_connected", (status) => { + setConnected(true) + }) + + window.app.eventBus.on("websocket_disconnected", (status) => { + setConnected(false) + }) + + const getColor = () => { + if (!connected) { + return "red" + } + + return "blue" + } + + return
+
+ + {connected ? "Connected" : "Disconnected"} + +
+
+} \ No newline at end of file diff --git a/packages/app/src/components/Settings/index.jsx b/packages/app/src/components/Settings/index.jsx new file mode 100644 index 00000000..7f84d294 --- /dev/null +++ b/packages/app/src/components/Settings/index.jsx @@ -0,0 +1,402 @@ +import React from "react" +import * as antd from "antd" +import { SliderPicker } from "react-color" +import { Translation } from "react-i18next" +import classnames from "classnames" + +import config from "config" +import { Icons, createIconRender } from "components/Icons" + +import AppSettings from "schemas/settings/app" +import AccountSettings from "schemas/settings/account" + +import groupsDecorator from "schemas/settingsGroupsDecorator.json" + +import { AboutApp } from ".." + +import "./index.less" + +const ItemTypes = { + Button: antd.Button, + Switch: antd.Switch, + Slider: antd.Slider, + Checkbox: antd.Checkbox, + Input: antd.Input, + InputNumber: antd.InputNumber, + Select: antd.Select, + SliderColorPicker: SliderPicker, +} + +const SettingItem = (props) => { + let { item } = props + const [loading, setLoading] = React.useState(true) + const [value, setValue] = React.useState(item.defaultValue ?? false) + const [delayedValue, setDelayedValue] = React.useState(null) + + if (!item.type) { + console.error(`Item [${item.id}] has no an type!`) + return null + } + if (typeof ItemTypes[item.type] === "undefined") { + console.error(`Item [${item.id}] has an invalid type: ${item.type}`) + return null + } + + if (typeof item.props === "undefined") { + item.props = {} + } + + const dispatchUpdate = async (updateValue) => { + if (typeof item.onUpdate === "function") { + const result = await item.onUpdate(updateValue).catch((error) => { + console.error(error) + antd.message.error(error.message) + return false + }) + + if (!result) { + return false + } + updateValue = result + } else { + const storagedValue = await window.app.settings.get(item.id) + + if (typeof updateValue === "undefined") { + updateValue = !storagedValue + } + } + + if (typeof item.emitEvent === "string") { + let emissionPayload = updateValue + + if (typeof item.emissionValueUpdate === "function") { + emissionPayload = item.emissionValueUpdate(emissionPayload) + } + + window.app.eventBus.emit(item.emitEvent, emissionPayload) + } + + if (item.noUpdate) { + return false + } + + if (item.storaged) { + await window.app.settings.set(item.id, updateValue) + } + + if (item.debounced) { + setDelayedValue(null) + } + + setValue(updateValue) + } + + const onUpdateItem = async (updateValue) => { + setValue(updateValue) + + if (!item.debounced) { + await dispatchUpdate(updateValue) + } else { + setDelayedValue(updateValue) + } + } + + const settingInitialization = async () => { + if (item.storaged) { + const storagedValue = window.app.settings.get(item.id) + setValue(storagedValue) + } + + if (typeof item.defaultValue === "function") { + setValue(await item.defaultValue()) + } + + if (typeof item.dependsOn === "object") { + const dependsOptionsKeys = Object.keys(item.dependsOn) + + item.props.disabled = !Boolean(dependsOptionsKeys.every((key) => { + const storagedValue = window.app.settings.get(key) + + if (typeof item.dependsOn[key] === "function") { + return item.dependsOn[key](storagedValue) + } + + return storagedValue === item.dependsOn[key] + })) + } + + if (typeof item.listenUpdateValue === "string") { + window.app.eventBus.on(`setting.update.${item.listenUpdateValue}`, (value) => setValue(value)) + } + + if (item.reloadValueOnUpdateEvent) { + window.app.eventBus.on(item.reloadValueOnUpdateEvent, () => { + console.log(`Reloading value for item [${item.id}]`) + settingInitialization() + }) + } + + setLoading(false) + } + + React.useEffect(() => { + settingInitialization() + }, []) + + switch (item.type.toLowerCase()) { + case "slidercolorpicker": { + item.props.onChange = (color) => { + item.props.color = color.hex + } + item.props.onChangeComplete = (color) => { + onUpdateItem(color.hex) + } + + item.props.color = value + + break + } + case "input": { + item.props.defaultValue = value + item.props.onPressEnter = (event) => dispatchUpdate(event.target.value) + item.props.onChange = (event) => onUpdateItem(event.target.value) + break + } + case "switch": { + item.props.checked = value + item.props.onClick = (event) => onUpdateItem(event) + break + } + case "select": { + item.props.onChange = (value) => onUpdateItem(value) + item.props.defaultValue = value + break + } + case "slider": { + item.props.defaultValue = value + item.props.onAfterChange = (value) => onUpdateItem(value) + break + } + default: { + if (!item.props.children) { + item.props.children = item.title ?? item.id + } + item.props.value = item.defaultValue + item.props.onClick = (event) => onUpdateItem(event) + break + } + } + + return
+
+
+
+

+ {Icons[item.icon] ? React.createElement(Icons[item.icon]) : null} + { + t => t(item.title ?? item.id) + } +

+

{ + t => t(item.description) + }

+
+
+ {item.experimental && Experimental } +
+
+ {item.extraActions && +
+ {item.extraActions.map((action, index) => { + return
+ + {action.title} + +
+ })} +
+ } +
+
+
+ {loading ?
Loading...
: React.createElement(ItemTypes[item.type], item.props)} +
+ + {delayedValue &&
+ } + onClick={async () => await dispatchUpdate(value)} + > + Save + +
} +
+
+} + +export default class SettingsMenu extends React.PureComponent { + state = { + transitionActive: false, + activeKey: "app" + } + + componentDidMount() { + if (typeof this.props.close === "function") { + // register escape key to close settings menu + window.addEventListener("keydown", this.handleKeyDown) + } + } + + componentWillUnmount() { + if (typeof this.props.close === "function") { + window.removeEventListener("keydown", this.handleKeyDown) + } + } + + handleKeyDown = (event) => { + if (event.key === "Escape") { + this.props.close() + } + } + + handlePageTransition = (key) => { + this.setState({ + transitionActive: true, + }) + + setTimeout(() => { + this.setState({ + activeKey: key + }) + + setTimeout(() => { + this.setState({ + transitionActive: false, + }) + }, 100) + }, 100) + } + + renderSettings = (key, group) => { + const fromDecoratorIcon = groupsDecorator[key]?.icon + const fromDecoratorTitle = groupsDecorator[key]?.title + + return
+
+

+ {fromDecoratorIcon ? React.createElement(Icons[fromDecoratorIcon]) : null} + { + t => t(fromDecoratorTitle ?? key) + } +

+
+ {group.map((item) => )} +
+
+
+ } + + generateSettingsGroups = (data) => { + let groups = {} + + data.forEach((item) => { + if (!groups[item.group]) { + groups[item.group] = [] + } + + groups[item.group].push(item) + }) + + return Object.keys(groups).map((groupKey) => { + return this.renderSettings(groupKey, groups[groupKey]) + }) + } + + render() { + const isDevMode = window.__evite?.env?.NODE_ENV !== "production" + + return ( +
+ + + + App + + } + > + {this.generateSettingsGroups(AppSettings)} +
+
+
{config.app?.siteName}
+
+ + v{window.app.version} + +
+
+ + {isDevMode ? : } + {isDevMode ? "development" : "stable"} + +
+
+
+ AboutApp.openModal()}> + + {t => t("about")} + + +
+
+
+ + + Account + + } + > + {this.generateSettingsGroups(AccountSettings)} + + + + Security + + } + > + + + + Privacy + + } + > + +
+
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/components/Settings/index.less b/packages/app/src/components/Settings/index.less new file mode 100644 index 00000000..b9bf23b9 --- /dev/null +++ b/packages/app/src/components/Settings/index.less @@ -0,0 +1,138 @@ +.settings { + display : flex; + flex-direction: column; + + >div { + margin-bottom: 25px; + } + + .group { + display : flex; + flex-direction: column; + color : var(--background-color-contrast); + + h1, + h2, + h3, + h4, + h5, + h6 { + color: var(--background-color-contrast); + } + + .content { + >div { + margin-bottom: 25px; + } + } + } + + .settingItem { + padding: 0 20px; + + >div { + margin-bottom: 10px; + } + + .header { + display : inline-flex; + flex-direction: row; + align-items : center; + justify-content: space-between; + width: 100%; + + .title { + display : flex; + align-items: center; + color : var(--background-color-contrast); + + h1, + h2, + h3, + h4, + h5, + h6 { + margin: 0; + color : var(--background-color-contrast); + } + + p { + font-size: 11px; + color : var(--background-color-contrast); + margin : 0; + } + + >div { + margin-right: 10px; + } + } + + .extraActions { + display: inline-flex; + align-items: center; + + > div { + margin-right: 10px; + } + } + } + + .component { + display : flex; + flex-direction: column; + + --ignore-dragger: true; + padding : 0 20px; + + span { + color: var(--background-color-contrast); + } + + > div { + margin-bottom: 10px; + } + } + } + + .footer { + position: relative; + width : 100%; + + padding-top : 20px; + padding-bottom: 20px; + + display : flex; + flex-direction: column; + + justify-content: center; + align-items : center; + + >div { + margin-bottom: 10px; + + font-family: "Space Mono", monospace; + font-size : 10px; + + display : flex; + flex-direction: row; + + align-items : center; + justify-content: center; + + .ant-tag { + height : 18px; + line-height: 18px; + font-size : 10px; + } + + >div { + padding: 0 7px; + } + } + } + + .ant-tabs-nav-list { + width : 100%; + justify-content: space-evenly; + } +} \ No newline at end of file diff --git a/packages/app/src/components/Skeleton/index.jsx b/packages/app/src/components/Skeleton/index.jsx new file mode 100644 index 00000000..3b720728 --- /dev/null +++ b/packages/app/src/components/Skeleton/index.jsx @@ -0,0 +1,15 @@ +import React from "react" +import { Skeleton } from "antd" +import { LoadingOutlined } from "@ant-design/icons" + +import "./index.less" + +export default () => { + return
+
+ +

Loading...

+
+ +
+} \ No newline at end of file diff --git a/packages/app/src/components/Skeleton/index.less b/packages/app/src/components/Skeleton/index.less new file mode 100644 index 00000000..87f3cea4 --- /dev/null +++ b/packages/app/src/components/Skeleton/index.less @@ -0,0 +1,22 @@ +.skeleton { + svg { + margin: 0 !important; + } + + h3 { + margin: 0; + margin-left: 10px; + color: var(--background-color-contrast); + } + + .indicator { + color: var(--background-color-contrast); + display: flex; + flex-direction: row; + align-items: center; + } + + background-color: var(--background-color-accent); + border-radius: 8px; + padding: 10px; +} diff --git a/packages/app/src/components/StepsForm/index.jsx b/packages/app/src/components/StepsForm/index.jsx new file mode 100644 index 00000000..4bde7439 --- /dev/null +++ b/packages/app/src/components/StepsForm/index.jsx @@ -0,0 +1,244 @@ +import React from "react" +import * as antd from "antd" +import loadable from "@loadable/component" +import { Translation } from "react-i18next" + +import { Icons, createIconRender } from "components/Icons" +import { ActionsBar } from "components" + +import "./index.less" + +export default class StepsForm extends React.Component { + state = { + steps: [...(this.props.steps ?? []), ...(this.props.children ?? [])], + + step: 0, + values: {}, + canNext: true, + renderStep: null, + } + + api = window.app.request + + componentDidMount = async () => { + if (this.props.defaultValues) { + await this.setState({ values: this.props.defaultValues }) + } + + await this.handleNext(0) + } + + next = (to) => { + if (!this.state.canNext) { + return antd.message.error("Please complete the step.") + } + + return this.handleNext(to) + } + + prev = () => this.handlePrev() + + handleNext = (to) => { + const index = to ?? (this.state.step + 1) + + this.setState({ step: index, renderStep: this.renderStep(index) }) + } + + handlePrev = () => { + this.handleNext(this.state.step - 1) + } + + handleError = (error) => { + this.setState({ submitting: false, submittingError: error }) + } + + handleUpdate = (key, value) => { + this.setState({ values: { ...this.state.values, [key]: value } }, () => { + if (typeof this.props.onChange === "function") { + this.props.onChange(this.state.values) + } + }) + } + + handleValidation = (result) => { + this.setState({ canNext: result }) + } + + canSubmit = () => { + if (typeof this.props.canSubmit === "function") { + return this.props.canSubmit(this.state.values) + } + + return true + } + + onSubmit = async () => { + if (!this.state.canNext) { + console.warn("Cannot submit form, validation failed") + return false + } + + if (typeof this.props.onSubmit === "function") { + this.setState({ submitting: true, submittingError: null }) + + await this.props.onSubmit(this.state.values).catch((error) => { + console.error(error) + this.handleError(error) + }) + } + } + + renderStep = (stepIndex) => { + const step = this.state.steps[stepIndex] + + let content = step.content + let value = this.state.values[step.key] + + if (typeof step.key === "undefined") { + console.error("[StepsForm] step.key is required") + return null + } + + if (typeof step.required !== "undefined" && step.required) { + this.handleValidation(Boolean(value && value.length > 0)) + } else { + this.setState({ canNext: true }) + } + + if (typeof step.stateValidation === "function") { + const validationResult = step.stateValidation(value) + this.handleValidation(validationResult) + } + + const componentProps = { + handleUpdate: (to) => { + value = to + + if (typeof step.onUpdateValue === "function") { + value = step.onUpdateValue(value, to) + } + + let validationResult = true + + if (typeof step.stateValidation === "function") { + validationResult = step.stateValidation(to) + } + + if (typeof step.required !== "undefined" && step.required) { + validationResult = Boolean(to && to.length > 0) + } + + this.handleUpdate(step.key, to) + this.handleValidation(validationResult) + }, + handleError: (error) => { + if (typeof props.handleError === "function") { + this.handleError(error) + } + }, + onPressEnter: () => this.next(), + value: value, + } + + if (typeof step.content === "function") { + content = loadable(async () => { + try { + const component = React.createElement(step.content, componentProps) + return () => component + } catch (error) { + console.log(error) + + antd.notification.error({ + message: "Error", + description: "Error loading step content", + }) + + return () =>
+ Error +
+ } + }, { + fallback:
Loading...
, + }) + } + + return React.createElement(React.memo(content), componentProps) + } + + render() { + if (this.state.steps.length === 0) { + return null + } + + const steps = this.state.steps + const current = steps[this.state.step] + + return ( +
+
+ + {steps.map(item => ( + + ))} + + +
+
+

{current.icon && createIconRender(current.icon)} + + {t => t(current.title)} + +

+ + + {t => t(current.required ? "Required" : "Optional")} + + +
+ {current.description &&
+ + {t => t(current.description)} + +
} + {this.state.renderStep} +
+
+ + {this.state.submittingError && ( +
+ + {t => t(String(this.state.submittingError))} + +
+ )} + + + {this.state.step > 0 && ( + this.prev()}> + + + {t => t("Previous")} + + + )} + {this.state.step < steps.length - 1 && ( + this.next()}> + + + {t => t("Next")} + + + )} + {this.state.step === steps.length - 1 && ( + + {this.state.submitting && } + + {t => t("Done")} + + + )} + +
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/components/StepsForm/index.less b/packages/app/src/components/StepsForm/index.less new file mode 100644 index 00000000..1a0c1723 --- /dev/null +++ b/packages/app/src/components/StepsForm/index.less @@ -0,0 +1,91 @@ +.steps_form { + .ant-steps-icon { + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; + + svg { + margin: 0; + } + } + + .steps { + display: flex; + flex-direction: column; + width: 100%; + + .header { + //position: fixed; + width: 100%; + height: fit-content; + flex-direction: row; + } + + .ant-select { + width: 100%; + } + + .step { + padding: 0 10px; + display: inline-flex; + flex-direction: column; + + width: 100%; + height: 100%; + + align-items: flex-start; + + h1 { + margin: 0; + } + + .title { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + } + + .description { + color: var(--background-color-contrast); + } + + .content { + padding: 10px; + display: flex; + flex-direction: column; + align-items: center; + + width: 100%; + + .ant-list { + width: 100%; + } + } + + .actions { + display: inline-flex; + flex-direction: row; + + align-items: center; + justify-content: center; + + > div { + margin-right: 10px; + } + } + + > div { + margin-bottom: 0; + } + } + + > div { + margin-bottom: 20px; + } + } +} diff --git a/packages/app/src/components/SwipeItem/index.jsx b/packages/app/src/components/SwipeItem/index.jsx new file mode 100644 index 00000000..4c2890bd --- /dev/null +++ b/packages/app/src/components/SwipeItem/index.jsx @@ -0,0 +1,176 @@ +import React from "react" +import PropTypes from "prop-types" +import { cursorPosition } from "utils" +import { Container, Delete, Content } from "./styles" + +class SwipeToDelete extends React.Component { + state = { + touching: null, + translate: 0, + deleting: false, + } + + componentDidMount() { + // to get ref dimensions + this.forceUpdate() + } + + onMouseDown = (e) => { + if (this.props.disabled) return + if (this.state.touching) return + + this.startTouchPosition = cursorPosition(e) + this.initTranslate = this.state.translate + + this.setState({ touching: true }, () => { + this.addEventListenerToMoveAndUp() + }) + } + + addEventListenerToMoveAndUp = (remove = false) => { + if (remove) { + window.removeEventListener("mousemove", this.onMouseMove) + window.removeEventListener("touchmove", this.onMouseMove) + window.removeEventListener("mouseup", this.onMouseUp) + window.removeEventListener("touchend", this.onMouseUp) + } else { + window.addEventListener("mousemove", this.onMouseMove) + window.addEventListener("touchmove", this.onMouseMove) + window.addEventListener("mouseup", this.onMouseUp) + window.addEventListener("touchend", this.onMouseUp) + } + } + + onMouseMove = (e) => { + const { rtl } = this.props + + if (!this.state.touching) { + return cursorPosition(e) + } + + if ( + (!rtl && cursorPosition(e) > this.startTouchPosition - this.initTranslate) + || (rtl && cursorPosition(e) < this.startTouchPosition - this.initTranslate) + ) { + this.setState({ translate: 0 }) + return + } + + this.setState({ translate: cursorPosition(e) - this.startTouchPosition + this.initTranslate }) + } + + onMouseUp = () => { + this.startTouchPosition = null + + const { deleteWidth, rtl } = this.props + const newState = { + touching: false + } + + const acceptableMove = -deleteWidth * 0.7 + const showDelete = (rtl ? -1 : 1) * this.state.translate < acceptableMove + const notShowDelete = (rtl ? -1 : 1) * this.state.translate >= acceptableMove + const deleteWithoutConfirm = (rtl ? 1 : -1) * this.state.translate >= this.deleteWithoutConfirmThreshold + + if (deleteWithoutConfirm) { + newState.translate = -this.containerWidth + } + if (notShowDelete) { + newState.translate = 0 + } + if (showDelete && !deleteWithoutConfirm) { + newState.translate = (rtl ? 1 : -1) * deleteWidth + } + + this.setState(newState, () => { + if (deleteWithoutConfirm) { + this.onDeleteClick() + } + }) + + this.addEventListenerToMoveAndUp(true) + } + + onDeleteClick = () => { + const { transitionDuration, onDelete } = this.props + + this.setState({ deleting: true }, () => { + window.setTimeout(() => { + onDelete() + }, transitionDuration) + }) + } + + componentWillUnmount() { + this.addEventListenerToMoveAndUp(true) + } + + render() { + const { translate, touching, deleting } = this.state + const { deleteWidth, transitionDuration, deleteText, deleteComponent, deleteColor, height, rtl } = this.props + + const cssParams = { deleteWidth, transitionDuration, deleteColor, heightProp: height, rtl } + const shiftDelete = -translate >= this.deleteWithoutConfirmThreshold + + return ( + { + if (c) { + this.container = c + this.containerWidth = c.getBoundingClientRect().width + this.deleteWithoutConfirmThreshold = this.containerWidth * 0.75 + } + }} + > + + + + + {this.props.children} + + + ) + } +} + +SwipeToDelete.propTypes = { + onDelete: PropTypes.func.isRequired, + height: PropTypes.number.isRequired, + transitionDuration: PropTypes.number, + deleteWidth: PropTypes.number, + deleteColor: PropTypes.string, + deleteText: PropTypes.string, + deleteComponent: PropTypes.node, + disabled: PropTypes.bool, + rtl: PropTypes.bool, +} + +SwipeToDelete.defaultProps = { + transitionDuration: 250, + deleteWidth: 75, + deleteColor: "rgba(252, 58, 48, 1.00)", + deleteText: "Delete", + disabled: false, + rtl: false, +} + +export default SwipeToDelete \ No newline at end of file diff --git a/packages/app/src/components/SwipeItem/styles.js b/packages/app/src/components/SwipeItem/styles.js new file mode 100644 index 00000000..bd62c4d0 --- /dev/null +++ b/packages/app/src/components/SwipeItem/styles.js @@ -0,0 +1,55 @@ +import styled, { css } from "styled-components" + +export const deletingCss = css` + transition: all ${({ transitionDuration }) => transitionDuration}ms ease-out; + max-height: 0; + * { + outline: none; + } +` + +export const Container = styled.div` + height: ${({ heightProp }) => heightProp}px; + max-height: ${({ heightProp }) => heightProp + 10}px; + width: auto; + position: relative; + box-sizing: border-box; + ${props => props.deleting && deletingCss} + *, *:before, *:after { + box-sizing: border-box; + } + overflow: hidden; +` + +export const Content = styled.div` + height: 100%; + width: auto; + position: relative; + transform: ${props => props.deleting && 'scale(0)'} translateX(${({ translate, rtl }) => (rtl ? 1 : 1) * translate}px); + ${props => props.transition && `transition: transform ${props.transitionDuration}ms ease-out`} +` + +export const Delete = styled.div` + position: absolute; + right: 0; + height: 100%; + width: 100%; + top: 0; + background: ${({ deleteColor }) => deleteColor}; + font-weight: 400; + display: inline-flex; + justify-content: flex-start; + align-items: center; + button { + width: ${({ deleteWidth }) => deleteWidth}px; + transition: margin ${({ transitionDuration }) => transitionDuration}ms ease-in-out; + ${({ buttonMargin, rtl }) => `margin-${rtl ? 'right' : 'left'}: ${buttonMargin}px`}; + text-align: center; + height: 100%; + background: transparent; + border: none; + color: white; + font-size: 1rem; + cursor: pointer; + } +` \ No newline at end of file diff --git a/packages/app/src/components/UserRegister/index.jsx b/packages/app/src/components/UserRegister/index.jsx new file mode 100644 index 00000000..a582f827 --- /dev/null +++ b/packages/app/src/components/UserRegister/index.jsx @@ -0,0 +1,86 @@ +import React from "react" +import * as antd from "antd" +import { StepsForm } from "components" + +import "./index.less" + +const steps = [ + { + key: "username", + title: "Step 1", + icon: "User", + description: "Enter the username for the account", + required: true, + content: (props) => { + return
+ { + props.handleUpdate(e.target.value) + }} + /> +
+ }, + }, + { + key: "password", + title: "Step 2", + icon: "Key", + description: "Enter a password for the account", + required: true, + content: (props) => { + return
+ { + props.handleUpdate(e.target.value) + }} + /> +
+ }, + }, + { + key: "email", + title: "Step 3", + icon: "Mail", + description: "Enter a email for the account", + required: true, + content: (props) => { + return
+ { + props.handleUpdate(e.target.value) + }} + /> +
+ }, + }, +] + +export default (props) => { + const api = window.app.request + + const onSubmit = async (values) => { + const result = await api.post.register(values).catch((err) => { + console.log(err) + return false + }) + + if (result) { + props.close() + } + } + + return +} \ No newline at end of file diff --git a/packages/comty/src/core/libs/globals/index.js b/packages/app/src/components/UserRegister/index.less similarity index 100% rename from packages/comty/src/core/libs/globals/index.js rename to packages/app/src/components/UserRegister/index.less diff --git a/packages/app/src/components/UserSelector/index.jsx b/packages/app/src/components/UserSelector/index.jsx new file mode 100644 index 00000000..71c2f77b --- /dev/null +++ b/packages/app/src/components/UserSelector/index.jsx @@ -0,0 +1,122 @@ +import React from "react" +import * as antd from "antd" +import { Translation } from "react-i18next" +import { SelectableList, Skeleton } from "components" +import { debounce } from "lodash" +import fuse from "fuse.js" + +import "./index.less" + +export default class UserSelector extends React.Component { + state = { + loading: true, + data: [], + searchValue: null, + } + + api = window.app.request + + componentDidMount = async () => { + this.toogleLoading(true) + await this.fetchUsers() + } + + toogleLoading = (to) => { + this.setState({ loading: to ?? !this.state.loading }) + } + + fetchUsers = async () => { + const data = await this.api.get.users(undefined, { select: this.props.select }).catch((err) => { + console.error(err) + antd.message.error("Error fetching operators") + }) + + this.setState({ data: data, loading: false }) + } + + isExcludedId = (id) => { + if (this.props.excludedIds) { + return this.props.excludedIds.includes(id) + } + + return false + } + + renderItem = (item) => { + return
+
+

{item.fullName ?? item.username}

+
+ } + + search = (value) => { + if (typeof value !== "string") { + if (typeof value.target?.value === "string") { + value = value.target.value + } + } + + if (value === "") { + return this.setState({ searchValue: null }) + } + + const searcher = new fuse(this.state.data, { + includeScore: true, + keys: ["username", "fullName"], + }) + + const result = searcher.search(value) + + this.setState({ + searchValue: result.map((entry) => { + return entry.item + }), + }) + } + + debouncedSearch = debounce((value) => this.search(value), 500) + + onSearch = (event) => { + if (event === "" && this.state.searchValue) { + return this.setState({ searchValue: null }) + } + + this.debouncedSearch(event.target.value) + } + + render() { + if (this.state.loading) { + return + } + + return
+
+
+ +
+
+ + + {t => t("Done")} + +
+ ]} + events={{ + onDone: (ctx, keys) => this.props.handleDone(keys), + }} + /> + + } +} \ No newline at end of file diff --git a/packages/app/src/components/UserSelector/index.less b/packages/app/src/components/UserSelector/index.less new file mode 100644 index 00000000..7d714b89 --- /dev/null +++ b/packages/app/src/components/UserSelector/index.less @@ -0,0 +1,19 @@ +.users_selector { + .header { + margin-bottom: 10px; + } + + .user { + display: flex; + flex-direction: row; + align-items: center; + + h1 { + margin: 0; + } + + > div { + margin-right: 8px; + } + } +} diff --git a/packages/app/src/components/formGenerator/index.jsx b/packages/app/src/components/formGenerator/index.jsx new file mode 100644 index 00000000..0ac704f6 --- /dev/null +++ b/packages/app/src/components/formGenerator/index.jsx @@ -0,0 +1,395 @@ +import React from "react" +import { Icons } from "components/Icons" +import { + Form, + Input, + Button, + Checkbox, + Select, + Dropdown, + Slider, + InputNumber, + DatePicker, + AutoComplete, + Divider, + Switch, +} from "antd" +import HeadShake from "react-reveal/HeadShake" + +const allComponents = { + Input, + Button, + Checkbox, + Select, + Dropdown, + Slider, + InputNumber, + DatePicker, + AutoComplete, + Divider, + Switch, +} + +export default class FormGenerator extends React.Component { + ref = React.createRef() + + fieldsReferences = {} + unsetValues = {} + discardedValues = [] + + state = { + validating: false, + shakeItem: false, + failed: {}, + } + + ctx = { + clearErrors: () => { + this.setState({ failed: {} }) + }, + clearForm: () => { + this.ctx.clearErrors() + this.ctx.toogleValidation(false) + this.ref.current.resetFields() + }, + finish: () => this.ref.current.submit(), + error: (id, error) => { + this.handleFormError(id, error) + }, + shake: (id) => { + this.formItemShake(id) + }, + toogleValidation: (to) => { + if (typeof to !== "undefined") { + return this.setState({ validating: to }) + } + this.setState({ validating: !this.state.validating }) + + return this.state.validating + }, + formRef: this.ref, + } + + handleFinish(payload) { + if (typeof this.props.onFinish !== "function") { + console.error(`onFinish is not an function`) + return false + } + + // try to read unset values + Object.keys(this.fieldsReferences).forEach((key) => { + const ref = this.fieldsReferences[key].current + + if (typeof ref.state !== "undefined") { + this.unsetValues[key] = ref.state?.value || ref.state?.checked + } + }) + + // filter discarded values + try { + const keys = Object.keys(payload) + this.discardedValues.forEach((id) => { + if (keys.includes(id)) { + delete payload[id] + } + }) + } catch (error) { + // terrible + } + + // fulfil unset values + payload = { ...payload, ...this.unsetValues } + + return this.props.onFinish(payload, this.ctx) + } + + formItemShake(id) { + this.setState({ shakeItem: id }) + setTimeout(() => { + this.setState({ shakeItem: false }) + }, 50) + } + + handleFormError(item, error) { + let fails = this.state.failed + + fails[item] = error ?? true + + this.setState({ failed: fails }) + this.formItemShake(item) + } + + handleFailChange(event) { + const itemID = event.target.id + if (itemID) { + let fails = this.state.failed + + if (fails["all"]) { + fails["all"] = false + this.setState({ failed: fails }) + } + + if (fails[itemID]) { + // try deactivate failed statement + fails[itemID] = false + this.setState({ failed: fails }) + } + } + } + + shouldShakeItem(id) { + try { + const mutation = false + if (this.state.shakeItem === "all") { + return mutation + } + if (this.state.shakeItem == id) { + return mutation + } + } catch (error) { + // not returning + } + } + + discardValueFromId = (id) => { + let ids = [] + + if (Array.isArray(id)) { + ids = id + } else { + ids.push(id) + } + + ids.forEach((_id) => { + const value = this.discardedValues ?? [] + value.push(_id) + this.discardedValues = value + }) + } + + renderValidationIcon() { + if (this.props.renderLoadingIcon && this.state.validating) { + return + } + return null + } + + renderElementPrefix = (element) => { + if (element.icon) { + let renderIcon = null + + const iconType = typeof element.icon + switch (iconType) { + case "string": { + if (typeof Icons[element.icon] !== "undefined") { + renderIcon = React.createElement(Icons[element.icon]) + } else { + console.warn("provided icon is not available on icons libs") + } + break + } + case "object": { + renderIcon = element.icon + break + } + default: { + console.warn(`cannot mutate icon cause type (${iconType}) is not handled`) + break + } + } + if (renderIcon) { + // try to generate icon with props + return React.cloneElement(renderIcon, element.iconProps ? { ...element.iconProps } : null) + } + } else { + return element.prefix ?? null + } + } + + renderItems(elements) { + if (Array.isArray(elements)) { + try { + return elements.map((field) => { + let { item, element } = field + + // if item has no id, return an uncontrolled field + if (typeof field.id === "undefined") { + return React.createElement(allComponents[element.component], element.props) + } + + // fulfill + if (typeof item === "undefined") { + item = {} + } + if (typeof element === "undefined") { + element = {} + } + + // check if component is available on library + if (typeof allComponents[element.component] === "undefined") { + console.warn(`[${element.component}] is not an valid component`) + return null + } + + // handle groups + if (typeof field.group !== "undefined") { + return ( +
+ {this.renderItems(field.group)} +
+ ) + } + + //* RENDER + const failStatement = this.state.failed["all"] ?? this.state.failed[field.id] + + const rules = item.rules + const hasFeedback = item.hasFeedback ?? false + + let elementProps = { + disabled: this.state.validating, + ...element.props, + } + let itemProps = { + ...item.props, + } + + switch (element.component) { + case "Checkbox": { + elementProps.onChange = (e) => { + this.unsetValues[field.id] = e.target.checked + elementProps.checked = e.target.checked + elementProps.value = e.target.checked + } + break + } + case "Button": { + this.discardValueFromId(field.id) + if (field.withValidation) { + elementProps.icon = this.state.validating ? ( + + ) : null + } + break + } + case "Input": { + itemProps = { + ...itemProps, + hasFeedback, + rules, + onChange: (e) => this.handleFailChange(e), + help: failStatement ? failStatement : null, + validateStatus: failStatement ? "error" : null, + } + elementProps = { + ...elementProps, + id: field.id, + prefix: this.renderElementPrefix(element) ?? null, + placeholder: element.placeholder, + } + break + } + case "Select": { + if (typeof element.renderItem !== "undefined") { + elementProps.children = element.renderItem + } + if (typeof element.options !== "undefined" && !element.renderItem) { + if (!Array.isArray(element.options)) { + console.warn( + `Invalid options data type, expecting Array > received ${typeof element.options}`, + ) + return null + } + elementProps.children = element.options.map((option) => { + return ( + + {option.name ?? null} + + ) + }) + } + itemProps = { + ...itemProps, + hasFeedback, + rules, + validateStatus: failStatement ? "error" : null, + help: failStatement ? failStatement : null, + } + break + } + default: { + itemProps = { + ...itemProps, + hasFeedback, + rules, + validateStatus: failStatement ? "error" : null, + help: failStatement ? failStatement : null, + } + break + } + } + + // set reference + this.fieldsReferences[field.id] = elementProps.ref = React.createRef() + + // return field + return ( +
+ {field.title ?? null} + + + {React.createElement(allComponents[element.component], elementProps)} + + +
+ ) + }) + } catch (error) { + console.log(error) + return null + } + } + } + + componentDidMount() { + if (!this.props.items) { + console.warn(`items not provided, nothing to render`) + return null + } + + // handle discardedValues + if (Array.isArray(this.props.items)) { + this.props.items.forEach((item) => { + if (item.ignoreValue) { + this.discardValueFromId(item.id) + } + }) + } + } + + render() { + const helpStatus = this.state.failed["all"] ?? this.state.failed["result"] + const validateStatus = this.state.failed["all"] || this.state.failed["result"] ? "error" : null + + if (!this.props.items) { + console.warn(`Nothing to render`) + return null + } + + return ( +
+
this.handleFinish(e)} + ref={this.ref} + {...this.props.formProps} + > + {this.renderItems(this.props.items)} + + + {this.renderValidationIcon()} +
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/components/index.js b/packages/app/src/components/index.js new file mode 100644 index 00000000..3cf28c69 --- /dev/null +++ b/packages/app/src/components/index.js @@ -0,0 +1,32 @@ +export { default as FormGenerator } from "./FormGenerator" +export { default as Settings } from "./Settings" +export { default as NotFound } from "./NotFound" +export { default as AppSearcher } from "./AppSearcher" +export { default as RenderError } from "./RenderError" +export { default as ActionsBar } from "./ActionsBar" +export { default as SelectableList } from "./SelectableList" +export { default as ObjectInspector } from "./ObjectInspector" +export { default as ServerStatus } from "./ServerStatus" +export { default as ModifierTag } from "./ModifierTag" +export { default as UserSelector } from "./UserSelector" +export { default as Clock } from "./Clock" +export { default as StepsForm } from "./StepsForm" +export { default as DraggableDrawer } from "./DraggableDrawer" +export { default as AddableSelectList } from "./AddableSelectList" +export { default as SwipeItem } from "./SwipeItem" +export { default as Crash } from "./Crash" +export { default as SearchButton } from "./SearchButton" +export { default as UserRegister } from "./UserRegister" +export { default as Skeleton } from "./Skeleton" +export { default as Navigation } from "./Navigation" +export { default as ImageUploader } from "./ImageUploader" +export { default as ImageViewer } from "./ImageViewer" + +export { default as PostsFeed } from "./PostsFeed" +export { default as LikeButton } from "./LikeButton" +export { default as PostCard } from "./PostCard" +export { default as PostCreator } from "./PostCreator" + +export * as AdminTools from "./AdminTools" +export * as AboutApp from "./AboutApp" +export * as Window from "./RenderWindow" \ No newline at end of file diff --git a/packages/app/src/components/modifierTag/index.jsx b/packages/app/src/components/modifierTag/index.jsx new file mode 100644 index 00000000..222a2019 --- /dev/null +++ b/packages/app/src/components/modifierTag/index.jsx @@ -0,0 +1,76 @@ +import React from "react" +import * as antd from "antd" +import { Icons, createIconRender } from "components/Icons" + +export default (props) => { + const [loading, setLoading] = React.useState(false) + const [options, setOptions] = React.useState([]) + const [value, setValue] = React.useState(null) + + const onChangeProperties = async (update) => { + if (props.eventDisable) { + return false + } + + setLoading(true) + + await props.onChangeProperties(update) + .then((data) => { + return setValue(update.join("-")) + }) + .catch((error) => { + return + }) + + setLoading(false) + } + + const getTagColor = () => { + if (props.colors) { + return props.colors[value] + } + + return "default" + } + + const handleOptionsLoad = async (fn) => { + setLoading(true) + + const result = await fn() + setOptions(result) + + setLoading(false) + } + + const handleDefaultValueLoad = async (fn) => { + const result = await fn() + setValue(result) + } + + React.useEffect(() => { + if (typeof props.options === "function") { + handleOptionsLoad(props.options) + } else { + setOptions(props.options) + } + + if (typeof props.defaultValue === "function") { + handleDefaultValueLoad(props.defaultValue) + } else { + setValue(props.defaultValue) + } + }, []) + + return onChangeProperties(update)} > + + {loading ? : + <> + {Icons[props.icon] && createIconRender(props.icon)} +

+ {value} +

+ + } +
+
+} \ No newline at end of file diff --git a/packages/app/src/components/notFound/index.jsx b/packages/app/src/components/notFound/index.jsx new file mode 100644 index 00000000..7e176c38 --- /dev/null +++ b/packages/app/src/components/notFound/index.jsx @@ -0,0 +1,12 @@ +import React from "react" +import { Result } from "antd" + +export default () => { + return ( + + ) +} diff --git a/packages/app/src/debugComponents/index.js b/packages/app/src/debugComponents/index.js new file mode 100644 index 00000000..0d8cdebd --- /dev/null +++ b/packages/app/src/debugComponents/index.js @@ -0,0 +1 @@ +export { default as ThemeDebug } from "./theme" \ No newline at end of file diff --git a/packages/app/src/debugComponents/theme/index.jsx b/packages/app/src/debugComponents/theme/index.jsx new file mode 100644 index 00000000..4eac7da2 --- /dev/null +++ b/packages/app/src/debugComponents/theme/index.jsx @@ -0,0 +1,56 @@ +import React from "react" +import * as antd from "antd" +import ReactJSON from "react-json-view" + +import { Theme } from "extensions" + +import "./index.less" + +export default class ThemeDebug extends React.Component { + state = { + currentVariant: null, + rootVariables: null, + } + + componentDidMount = async () => { + await this.setValues() + } + + setValues = async () => { + const currentVariant = document.documentElement.style.getPropertyValue("--themeVariant") + const rootVariables = window.app.ThemeController.getRootVariables() + + this.setState({ currentVariant, rootVariables }) + } + + editValues = async (values) => { + console.log(values) + await window.app.ThemeController.update({ [values.name]: values.new_value }) + await this.setState({ rootVariables: values.updated_src }) + } + + setDefaults = async () => { + await window.app.ThemeController.resetDefault() + await this.setValues() + } + + render() { + return
+
+ + default + +
+
+ Current variant: {this.state.currentVariant} +
+ +
+ +
+
+ } +} \ No newline at end of file diff --git a/packages/app/src/debugComponents/theme/index.less b/packages/app/src/debugComponents/theme/index.less new file mode 100644 index 00000000..599dbb7a --- /dev/null +++ b/packages/app/src/debugComponents/theme/index.less @@ -0,0 +1,8 @@ +.themeDebugger { + display: flex; + flex-direction: column; + + > div { + margin-bottom: 20px; + } +} \ No newline at end of file diff --git a/packages/app/src/extensions/api/index.js b/packages/app/src/extensions/api/index.js new file mode 100644 index 00000000..edf77814 --- /dev/null +++ b/packages/app/src/extensions/api/index.js @@ -0,0 +1,187 @@ +import config from "config" +import { Bridge } from "linebridge/dist/client" +import { Session } from "models" +import io from "socket.io-client" + +class WSInterface { + constructor(params = {}) { + this.params = params + this.manager = new io.Manager(this.params.origin, { + autoConnect: true, + transports: ["websocket"], + ...this.params.managerOptions, + }) + this.sockets = {} + + this.register("/", "main") + } + + register = (socket, as) => { + if (typeof socket !== "string") { + console.error("socket must be string") + return false + } + + socket = this.manager.socket(socket) + return this.sockets[as ?? socket] = socket + } +} + +export default { + key: "apiBridge", + expose: [ + { + initialization: [ + async (app, main) => { + app.apiBridge = await app.createApiBridge() + + app.WSInterface = app.apiBridge.wsInterface + app.WSInterface.request = app.WSRequest + app.WSInterface.listen = app.handleWSListener + app.WSSockets = app.WSInterface.sockets + app.WSInterface.mainSocketConnected = false + + app.WSSockets.main.on("authenticated", () => { + console.debug("[WS] Authenticated") + }) + app.WSSockets.main.on("authenticateFailed", (error) => { + console.error("[WS] Authenticate Failed", error) + }) + + app.WSSockets.main.on("connect", () => { + window.app.eventBus.emit("websocket_connected") + app.WSInterface.mainSocketConnected = true + }) + + app.WSSockets.main.on("disconnect", (...context) => { + window.app.eventBus.emit("websocket_disconnected", ...context) + app.WSInterface.mainSocketConnected = false + }) + + app.WSSockets.main.on("connect_error", (...context) => { + window.app.eventBus.emit("websocket_connection_error", ...context) + app.WSInterface.mainSocketConnected = false + }) + + window.app.api = app.apiBridge + window.app.ws = app.WSInterface + + window.app.request = app.apiBridge.endpoints + window.app.wsRequest = app.apiBridge.wsEndpoints + }, + ], + mutateContext: { + async attachWSConnection() { + if (!this.WSInterface.sockets.main.connected) { + await this.WSInterface.sockets.main.connect() + } + + let startTime = null + let latency = null + let latencyWarning = false + + let pingInterval = setInterval(() => { + if (!this.WSInterface.mainSocketConnected) { + return clearTimeout(pingInterval) + } + + startTime = Date.now() + this.WSInterface.sockets.main.emit("ping") + }, 2000) + + this.WSInterface.sockets.main.on("pong", () => { + latency = Date.now() - startTime + + if (latency > 800 && this.WSInterface.mainSocketConnected) { + latencyWarning = true + console.error("[WS] Latency is too high > 800ms", latency) + window.app.eventBus.emit("websocket_latency_too_high", latency) + } else if (latencyWarning && this.WSInterface.mainSocketConnected) { + latencyWarning = false + window.app.eventBus.emit("websocket_latency_normal", latency) + } + }) + }, + async attachAPIConnection() { + await this.apiBridge.initialize() + }, + handleWSListener: (to, fn) => { + if (typeof to === "undefined") { + console.error("handleWSListener: to must be defined") + return false + } + if (typeof fn !== "function") { + console.error("handleWSListener: fn must be function") + return false + } + + let ns = "main" + let event = null + + if (typeof to === "string") { + event = to + } else if (typeof to === "object") { + ns = to.ns + event = to.event + } + + return window.app.ws.sockets[ns].on(event, async (...context) => { + return await fn(...context) + }) + }, + createApiBridge: async () => { + const getSessionContext = async () => { + const obj = {} + const token = await Session.token + + if (token) { + // append token to context + obj.headers = { + Authorization: `Bearer ${token ?? null}`, + } + } + + return obj + } + + const handleResponse = async (data) => { + if (data.headers?.regenerated_token) { + Session.token = data.headers.regenerated_token + console.debug("[REGENERATION] New token generated") + } + + if (data instanceof Error) { + if (data.response.status === 401) { + window.app.eventBus.emit("invalid_session") + } + } + } + + const bridge = new Bridge({ + origin: config.api.address, + wsOrigin: config.ws.address, + wsOptions: { + autoConnect: false, + }, + onRequest: getSessionContext, + onResponse: handleResponse, + }) + + return bridge + }, + WSRequest: (socket = "main", channel, ...args) => { + return new Promise(async (resolve, reject) => { + const request = await window.app.ws.sockets[socket].emit(channel, ...args) + + request.on("responseError", (...errors) => { + return reject(...errors) + }) + request.on("response", (...responses) => { + return resolve(...responses) + }) + }) + } + }, + }, + ], +} \ No newline at end of file diff --git a/packages/app/src/extensions/debug/index.jsx b/packages/app/src/extensions/debug/index.jsx new file mode 100644 index 00000000..5f19a237 --- /dev/null +++ b/packages/app/src/extensions/debug/index.jsx @@ -0,0 +1,135 @@ +import React from "react" +import { Window } from "components" +import { Skeleton, Tabs } from "antd" + +class DebuggerUI extends React.Component { + state = { + loading: true, + error: null, + debuggers: null, + active: null, + } + + toogleLoading = (to = !this.state.loading ?? false) => { + this.setState({ loading: to }) + } + + loadDebuggers = async () => { + this.toogleLoading(true) + + const debuggers = await import(`~/debugComponents`) + let renders = {} + + Object.keys(debuggers).forEach((key) => { + renders[key] = debuggers[key] + }) + + this.setState({ debuggers: renders }, () => { + this.toogleLoading(false) + }) + } + + componentDidMount = async () => { + await this.loadDebuggers() + } + + componentDidCatch = (error, info) => { + this.setState({ error }) + } + + onChangeTab = (key) => { + console.debug(`Changing tab to ${key}`) + this.setState({ active: key, error: null }) + } + + renderError = (key, error) => { + return ( +
+

Debugger Error

+ +

+ Catch on [{key}] +

+
+ `{error.message}` +
+ {error.stack} +
+ ) + } + + renderTabs = () => { + return Object.keys(this.state.debuggers).map((key) => { + return + }) + } + + renderDebugger = (_debugger) => { + try { + return React.createElement(window.app.bindContexts(_debugger)) + } catch (error) { + return this.renderError(key, error) + } + } + + render() { + const { loading, error } = this.state + + if (loading) { + return + } + + return ( +
+ + {this.renderTabs()} + + {error && this.renderError(this.state.active, error)} + {!this.state.active ? ( +
Select an debugger to start
+ ) : ( + this.renderDebugger(this.state.debuggers[this.state.active]) + )} +
+ ) + } +} + +class Debugger { + constructor(mainContext, params = {}) { + this.mainContext = mainContext + this.params = { ...params } + + this.bindings = {} + } + + openWindow = () => { + new Window.DOMWindow({ id: "debugger", children: window.app.bindContexts(DebuggerUI) }).create() + } + + bind = (id, binding) => { + this.bindings[id] = binding + + return binding + } + + unbind = (id) => { + delete this.bindings[id] + } +} + +export default { + key: "visualDebugger", + expose: [ + { + initialization: [ + async (app, main) => { + main.setToWindowContext("debug", new Debugger(main)) + }, + ], + }, + ], +} \ No newline at end of file diff --git a/packages/app/src/extensions/haptics/index.js b/packages/app/src/extensions/haptics/index.js new file mode 100644 index 00000000..f9a6b5b6 --- /dev/null +++ b/packages/app/src/extensions/haptics/index.js @@ -0,0 +1,68 @@ +import Evite from "evite" + +import { Haptics, ImpactStyle } from "@capacitor/haptics" + +// This is a temporal workaround to make the extension work with the new evite extension system. +export default class HapticExtensionV2 extends Evite.Extension { + static id = "hapticsEngine" + + static compatible = ["mobile"] + + static extendsWith = ["SettingsController"] + + statement = { + test: "macarronie", + } + + initialization = [ + async (app, main) => { + console.log(this.statement.test) + } + ] + + debug = { + testVibrate: () => { + + }, + testSelectionStart: () => { + + }, + testSelectionChanged: () => { + + }, + testSelectionEnd: () => { + + }, + } + + public = { + vibrate: async function () { + const enabled = this.extended.SettingsController.get("haptic_feedback") + + if (enabled) { + await Haptics.vibrate() + } + }, + selectionStart: async function () { + const enabled = this.extended.SettingsController.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionStart() + } + }, + selectionChanged: async function () { + const enabled = this.extended.SettingsController.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionChanged() + } + }, + selectionEnd: async function () { + const enabled = this.extended.SettingsController.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionEnd() + } + }, + } +} \ No newline at end of file diff --git a/packages/app/src/extensions/i18n/index.js b/packages/app/src/extensions/i18n/index.js new file mode 100644 index 00000000..41e9c530 --- /dev/null +++ b/packages/app/src/extensions/i18n/index.js @@ -0,0 +1,78 @@ +import config from "config" +import i18n from "i18next" +import { initReactI18next } from "react-i18next" + +export const SUPPORTED_LANGUAGES = config.i18n?.languages ?? {} +export const SUPPORTED_LOCALES = SUPPORTED_LANGUAGES.map((l) => l.locale) +export const DEFAULT_LOCALE = config.i18n?.defaultLocale + +export function extractLocaleFromPath(path = "") { + const [_, maybeLocale] = path.split("/") + return SUPPORTED_LOCALES.includes(maybeLocale) ? maybeLocale : DEFAULT_LOCALE +} + +const messageImports = import.meta.glob("./translations/*.json") + +export const extension = { + key: "i18n", + expose: [ + { + initialization: [ + async (app, main) => { + let locale = app.settingsController.get("language") ?? DEFAULT_LOCALE + + if (!SUPPORTED_LOCALES.includes(locale)) { + locale = DEFAULT_LOCALE + } + + const messages = await app.importLocale(locale) + + i18n + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + // debug: true, + resources: { + [locale]: { translation: messages.default || messages }, + }, + lng: locale, + //fallbackLng: DEFAULT_LOCALE, + interpolation: { + escapeValue: false, // react already safes from xss + }, + }) + + main.eventBus.on("changeLanguage", (locale) => { + app.loadAsyncLanguage(locale) + }) + }, + ], + mutateContext: { + importLocale: async (locale) => { + const [, importLocale] = + Object.entries(messageImports).find(([key]) => + key.includes(`/${locale}.`) + ) || [] + + return importLocale && importLocale() + }, + loadAsyncLanguage: async function (locale) { + locale = locale ?? DEFAULT_LOCALE + + try { + const result = await this.importLocale(locale) + + if (result) { + i18n.addResourceBundle(locale, "translation", result.default || result) + i18n.changeLanguage(locale) + } + } catch (error) { + console.error(error) + } + } + }, + + }, + ], +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/extensions/i18n/translations/en.json b/packages/app/src/extensions/i18n/translations/en.json new file mode 100644 index 00000000..3303008f --- /dev/null +++ b/packages/app/src/extensions/i18n/translations/en.json @@ -0,0 +1,103 @@ +{ + "main_welcome": "Welcome back,", + "assigned_for_you": "Assigned for you", + "no_assigned_workorders": "No assigned workorders", + "new": "New", + "close": "Close", + "done": "Done", + "edit": "Edit", + "save": "Save", + "cancel": "Cancel", + "delete": "Delete", + "import": "Import", + "export": "Export", + "refresh": "Refresh", + "reload": "Reload", + "search": "Search", + "status": "Status", + "type": "Type", + "about": "About", + "current": "Current", + "statistics": "Statistics", + "name": "Name", + "username": "Username", + "email": "Email", + "password": "Password", + "sessions": "Sessions", + "compact_view": "Compact view", + "sign_in": "Sign in", + "sign_out": "Sign out", + "sign_up": "Sign up", + "all_sessions": "All sessions", + "destroy_all_sessions": "Destroy all sessions", + "account_info": "Account info", + "password_confirmation": "Password confirmation", + "new_product": "New product", + "description": "Description", + "describe_something": "Describe something", + "operations": "Operations", + "select_operation": "Select operation", + "select_operations": "Select operations", + "tasks": "Tasks", + "select_task": "Select task", + "select_tasks": "Select tasks", + "add_task": "Add task", + "add_tasks": "Add tasks", + "location": "Location", + "select_location": "Select location", + "select_locations": "Select locations", + "add_location": "Add location", + "add_locations": "Add locations", + "materials": "Materials", + "select_material": "Select material", + "select_materials": "Select materials", + "add_material": "Add material", + "add_materials": "Add materials", + "quantity": "Quantity", + "select_quantity": "Select quantity", + "select_quantities": "Select quantities", + "add_quantity": "Add quantity", + "add_quantities": "Add quantities", + "units": "Units", + "select_unit": "Select unit", + "select_units": "Select units", + "add_unit": "Add unit", + "add_units": "Add units", + "suppliers": "Suppliers", + "select_supplier": "Select supplier", + "select_suppliers": "Select suppliers", + "add_supplier": "Add supplier", + "add_suppliers": "Add suppliers", + "customers": "Customers", + "select_customer": "Select customer", + "select_customers": "Select customers", + "add_customer": "Add customer", + "add_customers": "Add customers", + "employees": "Employees", + "select_employee": "Select employee", + "select_employees": "Select employees", + "add_employee": "Add employee", + "add_employees": "Add employees", + "equipment": "Equipment", + "select_equipment": "Select equipment", + "select": "Select", + "variants": "Variants", + "select_variant": "Select variant", + "select_variants": "Select variants", + + "settins_group_general": "General", + "settings_general_language": "Language", + "settings_general_language_description": "Choose language for using in application.", + "settings_general_sidebarAutoCollapse": "Sidebar auto collapse", + "settings_general_sidebarAutoCollapse_description": "Collapse sidebar when loose focus.", + + "settings_group_aspect": "Aspect", + "settings_aspect_reduceAnimations": "Reduce animations", + "settings_aspect_reduceAnimations_description": "Reduce animation of the application.", + "settings_aspect_darkMode": "Dark mode", + "settings_aspect_darkMode_description": "Enable dark mode for the application.", + "settings_aspect_primaryColor": "Primary color", + "settings_aspect_primaryColor_description": "Change primary color of the application.", + "settings_aspect_resetTheme": "Reset theme", + "settings_aspect_resetTheme_description": "Reset theme to default." +} \ No newline at end of file diff --git a/packages/app/src/extensions/i18n/translations/es.json b/packages/app/src/extensions/i18n/translations/es.json new file mode 100644 index 00000000..d6cfe304 --- /dev/null +++ b/packages/app/src/extensions/i18n/translations/es.json @@ -0,0 +1,214 @@ +{ + "Dashboard": "Inicio", + "main_welcome": "Bienvenido,", + "assigned_for_you": "Asignado para usted", + "no_assigned_workorders": "No hay trabajos asignados", + "Start": "Iniciar", + "End": "Finalizar", + "Stop": "Parar", + "Started": "Iniciado", + "started": "iniciado", + "Ended": "Finalizado", + "ended": "finalizado", + "Expired": "Expirado", + "expired": "expirado", + "Stopped": "Parado", + "stopped": "parado", + "Pending": "Pendiente", + "pending": "pendiente", + "Finished": "Finalizado", + "finished": "terminado", + "Cancelled": "Cancelado", + "cancelled": "cancelado", + "Assigned": "Asignado", + "assigned": "asignado", + "Ready": "Listo", + "ready": "listo", + "No description": "Sin descripción", + "All": "Todos", + "all": "todos", + "or": "o", + "Browse": "Buscar", + "Create new": "Crear nuevo", + "New": "Nuevo", + "Close": "Cerrar", + "Done": "Listo", + "Next": "Siguiente", + "Previous": "Anterior", + "Schedule": "Plazo", + "Edit": "Modificar", + "Save": "Guardar", + "Cancel": "Cancelar", + "Delete": "Eliminar", + "State": "Estado", + "Modify": "Modificar", + "modify": "modificar", + "Notifications": "Notificaciones", + "Notification": "Notificación", + "Haptic": "Vibración", + "Haptic Feedback": "Vibración de respuesta", + "Enable haptic feedback on touch events.": "Habilitar vibración de respuesta cuando exista un evento de toque.", + "Selection press delay": "Retraso de presión de selección", + "Set the delay before the selection trigger is activated.": "Establecer el retraso antes de que el disparador de selección sea activado.", + "Force Mobile Mode": "Forzar modo móvil", + "Force the application to run in mobile mode.": "Forzar la aplicación a ejecutarse en modo móvil.", + "Manage operators": "Administrar operadores", + "Manage users": "Administrar usuarios", + "Manage groups": "Administrar grupos", + "Manage workflows": "Administrar flujos de trabajo", + "Manage roles": "Administrar roles", + "Manage permissions": "Administrar permisos", + "Disable": "Deshabilitar", + "Disabled": "Deshabilitado", + "Discard": "Descartar", + "Unselect all": "Deseleccionar todo", + "Select all": "Seleccionar todo", + "Add commit": "Añadir registro", + "Commit": "Registrar", + "Commits": "Registros", + "Assistant mode": "Modo asistente", + "View finished": "Ver terminados", + "View pending": "Ver pendientes", + "View assigned": "Ver asignados", + "View ready": "Ver listos", + "View cancelled": "Ver cancelados", + "View all": "Ver todos", + "View": "Ver", + "Mark produced quantity": "Marcar cantidad producida", + "Mark remaining amount": "Marcar cantidad restante", + "Quantity": "Cantidad", + "Quantity produced": "Cantidad producida", + "Quantity left": "Cantidad restante", + "Production target": "Objectivo de producción", + "Section": "Sección", + "Sections": "Secciones", + "Workshift": "Turno", + "workshift": "turno", + "Workshifts": "Turnos", + "workshifts": "turnos", + "Operation": "Operación", + "Operations": "Operaciones", + "Stock Target": "Stock objetivo", + "Vault item": "Artículo de bóveda", + "Stock item": "Artículo de stock", + "Vault": "Bóveda", + "Phase": "Fase", + "Variants": "Variantes", + "Variant": "Variante", + "Description": "Descripción", + "Task": "Tarea", + "Tasks": "Tareas", + "Product": "Producto", + "Products": "Productos", + "Operator": "Operador", + "Operators": "Operadores", + "Workload": "Carga de trabajo", + "workload": "carga de trabajo", + "Workloads": "Cargas de trabajo", + "workloads": "cargas de trabajo", + "Workorder": "Orden de trabajo", + "workorder": "orden de trabajo", + "Workorders": "Ordenes de trabajo", + "workorders": "ordenes de trabajo", + "Workpart": "Parte de trabajo", + "workpart": "parte de trabajo", + "Workparts": "Partes de trabajo", + "workparts": "parte de trabajo", + "Payload": "Carga", + "payload": "carga", + "Payloads": "Cargas", + "payloads": "carga", + "Commit all": "Registrar todo", + "Mark quantity": "Marcar cantidad", + "Mark": "Marcar", + "Marked": "Marcado", + "Marked quantity": "Cantidad marcada", + "Marked amount": "Cantidad marcada", + "Marked amount left": "Cantidad restante marcada", + "Marked amount produced": "Cantidad producida marcada", + "Marked amount remaining": "Cantidad restante marcada", + "Marked amount target": "Cantidad objetivo marcada", + "Marked amount stock": "Cantidad stock marcada", + "Notifications Sound": "Sonido de notificación", + "Play a sound when a notification is received.": "Reproducir un sonido cuando se recibe una notificación.", + "Vibration": "Vibración", + "Vibrate the device when a notification is received.": "Vibrar el dispositivo cuando se recibe una notificación.", + "Sound Volume": "Volumen de sonido", + "Set the volume of the sound when a notification is received.": "Establecer el volumen del sonido cuando se recibe una notificación.", + "Workorder Notifications": "Notificaciones de orden de trabajo", + "Display in-app notifications for workorders updates.": "Mostrar notificaciones para las actualizaciones de las ordenes de trabajo.", + "Accounts": "Cuentas", + "Import": "Importar", + "Export": "Exportar", + "Refresh": "Actualizar", + "Reload": "Recargar", + "Required": "Requerido", + "Optional": "Opcional", + "Search": "Buscar", + "Status": "Estado", + "Type": "Tipo", + "About": "Acerca de", + "Current": "Actual", + "Statistics": "Estadísticas", + "Name": "Nombre", + "Users": "Usuarios", + "Username": "Nombre de usuario", + "Settings": "Configuración", + "Email": "Correo electrónico", + "Password": "Contraseña", + "Sessions": "Sesiones", + "Compact view": "Vista compacta", + "Add to catalog": "Añadir al catálogo", + "Fabric": "Fabric", + "Press and hold for 2 seconds to toogle running": "Pulse y mantenga pulsado durante 2 segundos para alternar el funcionamiento", + "Production quantity already has been reached": "La cantidad de producción ya ha sido alcanzada", + "Production quantity is not enough": "La cantidad de producción no es suficiente", + "Are you sure you want to commit for this workpart?": "¿Está seguro de que desea consolidar esta parte de trabajo?", + "Are you sure you want to commit all quantity left?": "¿Está seguro de que desea consolidar toda la cantidad restante?", + "This will commit all quantity left and finish the production for this workload.": "Esto consolidará toda la cantidad restante y terminará la producción para esta carga de trabajo.", + "Are you sure you want to commit for this workorder?": "¿Está seguro de que desea consolidar esta orden de trabajo?", + "Enter the name or a reference for the workorder.": "Introduzca el nombre o una referencia para la orden de trabajo.", + "Select the section where the workorder will be deployed.": "Seleccione la sección donde se desplegará la orden de trabajo.", + "Select the schedule for the workorder.": "Seleccione el plazo para la orden de trabajo.", + "Assign the operators for the workorder.": "Asigne los operadores para la orden de trabajo.", + "Define the payloads for the workorder.": "Defina las cargas para la orden de trabajo.", + "Define the workloads for the workorder.": "Defina las cargas de trabajo para la orden de trabajo.", + "Leaving process running on background, dont forget to stop it when you are done": "Dejando el proceso en ejecución en segundo plano, no olvide detenerlo cuando haya terminado", + "Task remains opened, dont forget to stop it when you are done": "La tarea permanece abierta, no olvide detenerla cuando haya terminado", + "Select a option": "Seleccione una opción", + "Set the quantity produced": "Marque la cantidad producida", + "Experimental": "Experimental", + "New workorder assigned": "Nueva orden de trabajo asignada", + "Check the new list of workorder": "Compruebe la nueva lista de ordenes de trabajo", + "Do you want to delete these items?": "¿Desea eliminar estos elementos?", + "This action cannot be undone, and will permanently delete the selected items.": "Esta acción no se puede deshacer, y eliminará permanentemente los elementos seleccionados.", + "Assigned operators": "Operadores asignados", + "Assigments": "Asignaciones", + "Working Tasks": "Tareas en ejecución", + "You are not working on any task": "No estás trabajando en ninguna tarea", + "Update": "Actualizar", + "Update status": "Actualizar estado", + "Archived": "Archivado", + "archived": "archivado", + "Archive": "Archivar", + "archive": "archivar", + "General": "General", + "Sidebar": "Barra lateral", + "Aspect": "Aspecto", + "Language": "Idioma", + "Choose a language for the application": "Elige un idioma para la aplicación.", + "Edit Sidebar": "Editar barra lateral", + "Auto Collapse": "Auto colapsar", + "Collapse the sidebar when loose focus": "Colapsar la barra lateral cuando pierda el foco.", + "Reduce animation": "Reducir animación", + "Primary color": "Color primario", + "Change primary color of the application.": "Cambia el color primario de la aplicación.", + "Dark mode": "Modo oscuro", + "Images": "Imágenes", + "Add others": "Añadir otros", + "Export tokens": "Exportar bonos de trabajo", + "Description of the task. It should be a general description of the product. Do not include information that may vary. e.g. 'The product is a white shirt with a elastic red collar, size M'": "Descripción de la tarea. Debe ser una descripción general del producto. No incluya información que pueda variar. Por ejemplo, 'El producto es una camisa blanca con un collar de color rojo, tamaño M'", + "Define variants for this item. Only the types of variations that may exist of a product should be included. e.g. Size, Color, Material, etc.": "Defina las variantes para este artículo. Sólo deben incluirse los tipos de variaciones que pueden existir de un producto. Por ejemplo, Tamaño, Color, Material, etc.", + "Append some images to describe this item.": "Agregue algunas imágenes para describir este artículo." + +} \ No newline at end of file diff --git a/packages/app/src/extensions/index.js b/packages/app/src/extensions/index.js new file mode 100644 index 00000000..93efe2eb --- /dev/null +++ b/packages/app/src/extensions/index.js @@ -0,0 +1,11 @@ +export * as Render from "./render" +export * as Splash from "./splash" +export * as Sound from "./sound" +export * as Theme from "./theme" +export * as i18n from "./i18n" +export * as Notifications from "./notifications" + +export { default as SettingsController } from "./settings" +export { default as API } from "./api" +export { default as Debug } from "./debug" +export { default as Shortcuts } from "./shortcuts" \ No newline at end of file diff --git a/packages/app/src/extensions/notifications/index.jsx b/packages/app/src/extensions/notifications/index.jsx new file mode 100644 index 00000000..fafb75e9 --- /dev/null +++ b/packages/app/src/extensions/notifications/index.jsx @@ -0,0 +1,86 @@ +import React from "react" +import { notification as Notf } from "antd" +import { Icons, createIconRender } from "components/Icons" +import { Translation } from "react-i18next" +import { Haptics } from "@capacitor/haptics" + +class NotificationController { + getSoundVolume = () => { + return (window.app.settings.get("notifications_sound_volume") ?? 50) / 100 + } + + new = (notification, options = {}) => { + this.notify(notification, options) + this.playHaptic(options) + this.playAudio(options) + } + + notify = (notification, options = {}) => { + if (typeof notification === "string") { + notification = { + title: "New notification", + description: notification + } + } + + Notf.open({ + message: + {(t) => t(notification.title)} + , + description: + {(t) => t(notification.description)} + , + duration: notification.duration ?? 4, + icon: React.isValidElement(notification.icon) ? notification.icon : (createIconRender(notification.icon) ?? ), + }) + } + + playHaptic = async (options = {}) => { + const vibrationEnabled = options.vibrationEnabled ?? window.app.settings.get("notifications_vibrate") + + if (vibrationEnabled) { + await Haptics.vibrate() + } + } + + playAudio = (options = {}) => { + const soundEnabled = options.soundEnabled ?? window.app.settings.get("notifications_sound") + const soundVolume = options.soundVolume ? options.soundVolume / 100 : this.getSoundVolume() + + if (soundEnabled) { + window.app.SoundEngine.play("notification", { + volume: soundVolume, + }) + } + } +} + +const extension = { + key: "notification", + expose: [ + { + initialization: [ + async (app, main) => { + app.NotificationController = new NotificationController() + + main.eventBus.on("changeNotificationsSoundVolume", (value) => { + app.NotificationController.playAudio({ soundVolume: value }) + }) + main.eventBus.on("changeNotificationsVibrate", (value) => { + app.NotificationController.playHaptic({ + vibrationEnabled: value, + }) + }) + main.setToWindowContext("notifications", app.NotificationController) + }, + ], + }, + ], +} + +export { + extension, + NotificationController, +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/extensions/render/index.jsx b/packages/app/src/extensions/render/index.jsx new file mode 100644 index 00000000..0ad09810 --- /dev/null +++ b/packages/app/src/extensions/render/index.jsx @@ -0,0 +1,225 @@ +import React from "react" +import { EvitePureComponent } from "evite" +import routes from "virtual:generated-pages" +import progressBar from "nprogress" + +import NotFoundRender from "./statics/404" +import CrashRender from "./statics/crash" + +export const ConnectWithApp = (component) => { + return window.app.bindContexts(component) +} + +export function GetRoutesMap() { + return routes.map((route) => { + const { path } = route + route.name = + path + .replace(/^\//, "") + .replace(/:/, "") + .replace(/\//, "-") + .replace("all(.*)", "not-found") || "home" + + route.path = route.path.includes("*") ? "*" : route.path + + return route + }) +} + +export function GetRoutesComponentMap() { + return routes.reduce((acc, route) => { + const { path, component } = route + + acc[path] = component + + return acc + }, {}) +} + +// class PageStatement { +// constructor() { +// this.state = {} + +// } + +// getProxy() { + +// } +// } + +export class RouteRender extends EvitePureComponent { + state = { + renderInitialization: true, + renderComponent: null, + renderError: null, + //pageStatement: new PageStatement(), + routes: GetRoutesComponentMap() ?? {}, + crash: null, + } + + handleBusEvents = { + "render_initialization": () => { + this.setState({ renderInitialization: true }) + }, + "render_initialization_done": () => { + this.setState({ renderInitialization: false }) + }, + "crash": (message, error) => { + this.setState({ crash: { message, error } }) + }, + "locationChange": (event) => { + this.loadRender() + }, + } + + componentDidMount() { + this._ismounted = true + this._loadBusEvents() + this.loadRender() + } + + componentWillUnmount() { + this._ismounted = false + this._unloadBusEvents() + } + + loadRender = (path) => { + if (!this._ismounted) { + console.warn("RouteRender is not mounted, skipping render load") + return false + } + + let componentModule = this.state.routes[path ?? this.props.path ?? window.location.pathname] ?? this.props.staticRenders?.NotFound ?? NotFoundRender + + // TODO: in a future use, we can use `pageStatement` class for managing statement + window.app.pageStatement = Object.freeze(componentModule.pageStatement) ?? Object.freeze({}) + + return this.setState({ renderComponent: componentModule }) + } + + componentDidCatch(info, stack) { + this.setState({ renderError: { info, stack } }) + } + + render() { + if (this.state.crash) { + const StaticCrashRender = this.props.staticRenders?.Crash ?? CrashRender + + return + } + + if (this.state.renderError) { + if (this.props.staticRenders?.RenderError) { + return React.createElement(this.props.staticRenders?.RenderError, { error: this.state.renderError }) + } + + return JSON.stringify(this.state.renderError) + } + + if (this.state.renderInitialization) { + const StaticInitializationRender = this.props.staticRenders?.initialization ?? null + + return + } + + if (!this.state.renderComponent) { + return null + } + + return React.createElement(ConnectWithApp(this.state.renderComponent), this.props) + } +} + +export const extension = { + key: "customRender", + expose: [ + { + initialization: [ + async (app, main) => { + app.bindContexts = (component) => { + let contexts = { + main: {}, + app: {}, + } + + if (typeof component.bindApp === "string") { + if (component.bindApp === "all") { + Object.keys(app).forEach((key) => { + contexts.app[key] = app[key] + }) + } + } else { + if (Array.isArray(component.bindApp)) { + component.bindApp.forEach((key) => { + contexts.app[key] = app[key] + }) + } + } + + if (typeof component.bindMain === "string") { + if (component.bindMain === "all") { + Object.keys(main).forEach((key) => { + contexts.main[key] = main[key] + }) + } + } else { + if (Array.isArray(component.bindMain)) { + component.bindMain.forEach((key) => { + contexts.main[key] = main[key] + }) + } + } + + return (props) => React.createElement(component, { ...props, contexts }) + } + + main.setToWindowContext("bindContexts", app.bindContexts) + }, + async (app, main) => { + const defaultTransitionDelay = 150 + + main.progressBar = progressBar.configure({ parent: "html", showSpinner: false }) + + main.history.listen((event) => { + main.eventBus.emit("transitionDone", event) + main.eventBus.emit("locationChange", event) + main.progressBar.done() + }) + + main.history.setLocation = (to, state, delay) => { + const lastLocation = main.history.lastLocation + + if (typeof lastLocation !== "undefined" && lastLocation?.pathname === to && lastLocation?.state === state) { + return false + } + + main.progressBar.start() + main.eventBus.emit("transitionStart", delay) + + setTimeout(() => { + main.history.push({ + pathname: to, + }, state) + main.history.lastLocation = main.history.location + }, delay ?? defaultTransitionDelay) + } + + main.setToWindowContext("setLocation", main.history.setLocation) + }, + ], + mutateContext: { + validateLocationSlash: (location) => { + let key = location ?? window.location.pathname + + while (key[0] === "/") { + key = key.slice(1, key.length) + } + + return key + }, + }, + }, + ], +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/extensions/render/statics/404/index.jsx b/packages/app/src/extensions/render/statics/404/index.jsx new file mode 100644 index 00000000..c349d3a2 --- /dev/null +++ b/packages/app/src/extensions/render/statics/404/index.jsx @@ -0,0 +1,7 @@ +import React from 'react' + +export default () => { + return
+ Not Found +
+} \ No newline at end of file diff --git a/packages/app/src/extensions/render/statics/crash/index.jsx b/packages/app/src/extensions/render/statics/crash/index.jsx new file mode 100644 index 00000000..dd35336f --- /dev/null +++ b/packages/app/src/extensions/render/statics/crash/index.jsx @@ -0,0 +1,15 @@ +import React from "react" +import "./index.less" + +export default (props) => { + return
+
+

Crash

+
+

{props.crash.message}

+
{props.crash.error}
+
+ +
+
+} \ No newline at end of file diff --git a/packages/app/src/extensions/render/statics/crash/index.less b/packages/app/src/extensions/render/statics/crash/index.less new file mode 100644 index 00000000..dd65293b --- /dev/null +++ b/packages/app/src/extensions/render/statics/crash/index.less @@ -0,0 +1,27 @@ +.app_crash { + position: absolute; + z-index: 9999; + + top: 0; + right: 0; + + width: 100vw; + height: 100vh; + + display: flex; + flex-direction: column; + + justify-content: center; + align-items: center; + + .header { + display: flex; + text-align: center; + flex-direction: column; + justify-content: center; + svg { + width: 100px; + height: 100px; + } + } +} \ No newline at end of file diff --git a/packages/app/src/extensions/settings/index.js b/packages/app/src/extensions/settings/index.js new file mode 100644 index 00000000..b40df8c2 --- /dev/null +++ b/packages/app/src/extensions/settings/index.js @@ -0,0 +1,66 @@ +import store from "store" +import defaultSettings from "schemas/defaultSettings.json" + +class SettingsController { + constructor() { + this.storeKey = "app_settings" + this.settings = store.get(this.storeKey) ?? {} + + this._setDefaultUndefined() + } + + _setDefaultUndefined = () => { + Object.keys(defaultSettings).forEach((key) => { + const value = defaultSettings[key] + + // Only set default if value is undefined + if (typeof this.settings[key] === "undefined") { + this.settings[key] = value + } + }) + } + + defaults = (key) => { + if (typeof key === "undefined") { + return defaultSettings + } + + return defaultSettings[key] + } + + is = (key, value) => { + return this.settings[key] === value + } + + set = (key, value) => { + this.settings[key] = value + store.set(this.storeKey, this.settings) + + window.app.eventBus.emit("setting.update", { key, value }) + window.app.eventBus.emit(`setting.update.${key}`, value) + + return this.settings + } + + get = (key) => { + if (typeof key === "undefined") { + return this.settings + } + + return this.settings[key] + } +} + +export default { + key: "settings", + expose: [ + { + initialization: [ + (app, main) => { + app.settingsController = new SettingsController() + window.app.settings = app.settingsController + } + ] + }, + ] +} \ No newline at end of file diff --git a/packages/app/src/extensions/shortcuts/index.js b/packages/app/src/extensions/shortcuts/index.js new file mode 100644 index 00000000..f3814e9f --- /dev/null +++ b/packages/app/src/extensions/shortcuts/index.js @@ -0,0 +1,76 @@ +export class ShortcutsController { + constructor() { + this.shortcuts = {} + + document.addEventListener("keydown", (event) => { + const key = event.key.toLowerCase() + + const shortcut = this.shortcuts[key] + + if (shortcut) { + event.preventDefault() + + if (typeof shortcut.ctrl === "boolean" && event.ctrlKey !== shortcut.ctrl) { + return + } + + if (typeof shortcut.shift === "boolean" && event.shiftKey !== shortcut.shift) { + return + } + + if (typeof shortcut.alt === "boolean" && event.altKey !== shortcut.alt) { + return + } + + if (typeof shortcut.meta === "boolean" && event.metaKey !== shortcut.meta) { + return + } + + if (typeof shortcut.fn === "function") { + shortcut.fn() + } + } + }) + } + + register = (keybind = {}, fn) => { + if (typeof keybind === "string") { + keybind = { + key: keybind, + } + } + + + this.shortcuts[keybind.key] = { + ...keybind, + fn, + } + } + + remove = (array) => { + if (typeof array === "string") { + array = [array] + } + + array.forEach(key => { + delete this.shortcuts[key] + }) + } +} + +export const extension = { + key: "shortcuts", + expose: [ + { + initialization: [ + (app, main) => { + app.ShortcutsController = new ShortcutsController() + + main.setToWindowContext("ShortcutsController", app.ShortcutsController) + } + ], + }, + ] +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/extensions/sound/index.js b/packages/app/src/extensions/sound/index.js new file mode 100644 index 00000000..bc950e0a --- /dev/null +++ b/packages/app/src/extensions/sound/index.js @@ -0,0 +1,53 @@ +import { Howl } from "howler" +import config from "config" + +export class SoundEngine { + constructor() { + this.sounds = {} + } + + initialize = async () => { + this.sounds = await this.getSounds() + } + + getSounds = async () => { + // TODO: Load custom soundpacks manifests + let soundPack = config.defaultSoundPack ?? {} + + Object.keys(soundPack).forEach((key) => { + const src = soundPack[key] + + soundPack[key] = (options) => new Howl({ + volume: window.app.settings.get("generalAudioVolume") ?? 0.5, + ...options, + src: [src], + }) + }) + + return soundPack + } + + play = (name, options) => { + if (this.sounds[name]) { + return this.sounds[name](options).play() + } else { + console.error(`Sound ${name} not found.`) + return false + } + } +} + +export const extension = { + key: "soundEngine", + expose: [ + { + initialization: [ + async (app, main) => { + app.SoundEngine = new SoundEngine() + main.setToWindowContext("SoundEngine", app.SoundEngine) + await app.SoundEngine.initialize() + } + ] + } + ] +} \ No newline at end of file diff --git a/packages/app/src/extensions/splash/index.jsx b/packages/app/src/extensions/splash/index.jsx new file mode 100644 index 00000000..e5200e48 --- /dev/null +++ b/packages/app/src/extensions/splash/index.jsx @@ -0,0 +1,57 @@ +import React from "react" +import ReactDOM from "react-dom" + +import "./index.less" + +export const SplashComponent = ({ props = {}, logo }) => { + return ( +
+
+ +
+
+ ) +} + +export const extension = (params = {}) => { + return { + key: "splash", + expose: [ + { + initialization: [ + async (app, main) => { + const fadeOutVelocity = params.velocity ?? 1000 //on milliseconds + const splashElement = document.createElement("div") + + splashElement.style = ` + position: absolute; + top: 0; + left: 0; + + width: 100vw; + height: 100vh; + ` + + const show = () => { + document.body.appendChild(splashElement) + ReactDOM.render(, splashElement) + } + + const removeSplash = () => { + splashElement.style.animation = `${params.preset ?? "fadeOut"} ${fadeOutVelocity}ms` + + setTimeout(() => { + splashElement.remove() + }, fadeOutVelocity) + } + + main.eventBus.on("splash_show", show) + main.eventBus.on("splash_close", removeSplash) + }, + ], + }, + ], + } +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/extensions/splash/index.less b/packages/app/src/extensions/splash/index.less new file mode 100644 index 00000000..d6d2e6a3 --- /dev/null +++ b/packages/app/src/extensions/splash/index.less @@ -0,0 +1,44 @@ +.splash_wrapper { + overflow: hidden; + + //background-color: rgba(240, 242, 245, 0.8); + backdrop-filter: blur(10px); + --webkit-backdrop-filter: blur(10px); + + width: 100%; + height: 100%; + z-index: 1000; + + display: flex; + flex-direction: column; + + align-items: center; + justify-content: center; +} + +.splash_logo { + width: 100%; + height: 100%; + + display: flex; + flex-direction: column; + + align-items: center; + justify-content: center; + + img { + width: fit-content; + max-width: 50%; + max-height: 50%; + filter: drop-shadow(14px 10px 10px rgba(128, 128, 128, 0.5)); + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} \ No newline at end of file diff --git a/packages/app/src/extensions/theme/index.jsx b/packages/app/src/extensions/theme/index.jsx new file mode 100644 index 00000000..46cfc6f9 --- /dev/null +++ b/packages/app/src/extensions/theme/index.jsx @@ -0,0 +1,165 @@ +import config from "config" +import store from "store" +import { ConfigProvider } from "antd" + +export class ThemeController { + constructor(params) { + this.params = { ...params } + + this.themeManifestStorageKey = "theme" + this.modificationStorageKey = "themeModifications" + this.variantStorageKey = "themeVariation" + + this.theme = null + + this.mutation = null + this.currentVariant = null + + this.init() + + return this + } + + static get currentVariant() { + return document.documentElement.style.getPropertyValue("--themeVariant") + } + + init = () => { + let theme = this.getStoragedTheme() + const modifications = this.getStoragedModifications() + const variantKey = this.getStoragedVariant() + + if (!theme) { + // load default theme + theme = this.getDefaultTheme() + } else { + // load URL and initialize theme + } + + // set global theme + this.theme = theme + + // override with static vars + if (theme.staticVars) { + this.update(theme.staticVars) + } + + // override theme with modifications + if (modifications) { + this.update(modifications) + } + + // apply variation + this.applyVariant(variantKey) + } + + getRootVariables = () => { + let attributes = document.documentElement.getAttribute("style").trim().split(";") + attributes = attributes.slice(0, (attributes.length - 1)) + attributes = attributes.map((variable) => { + let [key, value] = variable.split(":") + key = key.split("--")[1] + + return [key, value] + }) + + return Object.fromEntries(attributes) + } + + getDefaultTheme = () => { + // TODO: Use evite CONSTANTS_API + return config.defaultTheme + } + + getStoragedTheme = () => { + return store.get(this.themeManifestStorageKey) + } + + getStoragedModifications = () => { + return store.get(this.modificationStorageKey) + } + + getStoragedVariant = () => { + return store.get(this.variantStorageKey) + } + + setVariant = (variationKey) => { + return store.set(this.variantStorageKey, variationKey) + } + + setModifications = (modifications) => { + return store.set(this.modificationStorageKey, modifications) + } + + resetDefault = () => { + store.remove(this.themeManifestStorageKey) + store.remove(this.modificationStorageKey) + + window.app.settings.set("primaryColor", this.theme.staticVars.primaryColor) + + return this.init() + } + + update = (update) => { + if (typeof update !== "object") { + return false + } + + this.mutation = { + ...this.theme.staticVars, + ...this.mutation, + ...update + } + + Object.keys(this.mutation).forEach(key => { + document.documentElement.style.setProperty(`--${key}`, this.mutation[key]) + }) + + document.documentElement.className = `theme-${this.currentVariant}` + document.documentElement.style.setProperty(`--themeVariant`, this.currentVariant) + + ConfigProvider.config({ theme: this.mutation }) + } + + applyVariant = (variant = (this.theme.defaultVariant ?? "light")) => { + const values = this.theme.variants[variant] + + if (values) { + this.currentVariant = variant + this.update(values) + this.setVariant(variant) + } + } +} + +export const extension = { + key: "theme", + expose: [ + { + initialization: [ + async (app, main) => { + app.ThemeController = new ThemeController() + + main.eventBus.on("darkMode", (value) => { + if (value) { + app.ThemeController.applyVariant("dark") + } else { + app.ThemeController.applyVariant("light") + } + }) + main.eventBus.on("modifyTheme", (value) => { + app.ThemeController.update(value) + app.ThemeController.setModifications(app.ThemeController.mutation) + }) + main.eventBus.on("resetTheme", () => { + app.ThemeController.resetDefault() + }) + + main.setToWindowContext("ThemeController", app.ThemeController) + }, + ], + }, + ], +} + +export default extension \ No newline at end of file diff --git a/packages/app/src/layout/bottombar/index.jsx b/packages/app/src/layout/bottombar/index.jsx new file mode 100644 index 00000000..c3cf963e --- /dev/null +++ b/packages/app/src/layout/bottombar/index.jsx @@ -0,0 +1,169 @@ +import React from "react" +import { Motion, spring } from "react-motion" +import { EviteComponent } from "evite" +import * as antd from "antd" +import { createIconRender } from "components/Icons" +import classnames from "classnames" + +import "./index.less" + +export default class BottomBar extends EviteComponent { + state = { + allowed: true, + show: false, + visible: false, + creatorActionsVisible: false, + render: null, + isManager: false, + } + + handleBusEvents = { + "render_initialization": () => { + this.toogle(false) + }, + "render_initialization_done": () => { + if (this.isAllowed()) { + this.toogle(true) + } + }, + "crash": () => { + this.toogle(false) + }, + "locationChange": () => { + this.toogle(this.isAllowed()) + } + } + + componentDidMount = () => { + this._loadBusEvents() + + window.app.BottomBarController = { + toogleVisible: this.toogle, + isVisible: () => this.state.visible, + render: (fragment) => { + this.setState({ render: fragment }) + }, + clear: () => { + this.setState({ render: null }) + }, + } + } + + componentWillUnmount = () => { + this._unloadBusEvents() + delete window.app.BottomBarController + } + + isAllowed() { + return app.pageStatement?.bottomBarAllowed !== "undefined" && app.pageStatement?.bottomBarAllowed !== false + } + + toogle = (to) => { + if (!window.isMobile) { + to = false + } else { + to = to ?? !this.state.visible + } + + if (!to) { + this.setState({ show: to }, () => { + setTimeout(() => { + this.setState({ visible: to }) + }, 500) + }) + } else { + this.setState({ visible: to }, () => { + this.setState({ show: to }) + }) + } + } + + onClickItemId = (id) => { + window.app.setLocation(`/${id}`) + } + + render() { + if (this.state.render) { + return
+ {this.state.render} +
+ } + + if (!this.state.visible) { + return null + } + + return + {({ y }) =>
+
+ +
window.app.goMain()} + > +
+ {createIconRender("Home")} +
+
+ +
window.app.openCreateNew()} + > +
+ {createIconRender("PlusCircle")} +
+
+
window.app.openSettings()} + > +
+ {createIconRender("Settings")} +
+
+ {this.props.user ?
window.app.goToAccount()} + > +
+ +
+
:
this.onClickItemId("login")} + className="item" + > +
+ {createIconRender("LogIn")} +
+
} +
+
} +
+ } +} \ No newline at end of file diff --git a/packages/app/src/layout/bottombar/index.less b/packages/app/src/layout/bottombar/index.less new file mode 100644 index 00000000..c61b0ddc --- /dev/null +++ b/packages/app/src/layout/bottombar/index.less @@ -0,0 +1,91 @@ +@bottomBar_height: 80px; +@bottomBar_iconSize: 24px; + +.bottomBar { + position: sticky; + z-index: 9999; + + left: 0; + bottom: 0; + + width: 100vw; + min-width: 100vw; + max-width: 100vw; + + overflow: hidden; + + display: flex; + flex-direction: row; + + align-items: center; + justify-content: center; + + background-color: var(--background-color-accent); + border-radius: 12px 12px 0 0; + + height: @bottomBar_height; + + padding: 10px; + + .items { + display: inline-flex; + align-items: center; + justify-content: center; + //white-space: nowrap; + //overflow-x: overlay; + + height: 100%; + width: 100vw; + + .item { + display: inline-flex; + + height: 100%; + align-items: center; + justify-content: center; + + transition: all 150ms ease-in; + + width: 20vw; + min-width: 20vw; + max-width: 20vw; + + .icon { + border-radius: 360px; + height: 100%; + width: fit-content; + + display: flex; + flex-direction: column; + + align-items: center; + justify-content: center; + + color: var(--background-color-contrast); + font-size: 2rem; + + padding: 12px; + transition: all 70ms ease-in-out; + + svg{ + margin: 0!important; + } + } + + &.primary { + .icon { + color: var(--background-color-primary); + background-color: var(--primaryColor); + } + } + } + + .item:active { + .icon { + background-color: var(--background-color-primary); + color: var(--background-color-contrast); + transform: scale(0.9); + } + } + } +} \ No newline at end of file diff --git a/packages/app/src/layout/drawer/index.jsx b/packages/app/src/layout/drawer/index.jsx new file mode 100644 index 00000000..1599fe4b --- /dev/null +++ b/packages/app/src/layout/drawer/index.jsx @@ -0,0 +1,172 @@ +import React from "react" +import { DraggableDrawer } from "components" +import EventEmitter from "@foxify/events" + +import "./index.less" + +export default class DrawerController extends React.Component { + constructor(props) { + super(props) + this.state = { + addresses: {}, + refs: {}, + drawers: [], + } + + this.DrawerController = { + open: this.open, + close: this.close, + closeAll: this.closeAll, + } + + window.app["DrawerController"] = this.DrawerController + } + + sendEvent = (id, ...context) => { + const ref = this.state.refs[id]?.current + return ref.events.emit(...context) + } + + open = (id, component, options) => { + const refs = this.state.refs ?? {} + const drawers = this.state.drawers ?? [] + const addresses = this.state.addresses ?? {} + + const instance = { + id, + key: id, + ref: React.createRef(), + children: component, + options, + controller: this, + } + + if (typeof addresses[id] === "undefined") { + drawers.push() + addresses[id] = drawers.length - 1 + refs[id] = instance.ref + } else { + const ref = refs[id].current + const isLocked = ref.state.locked + + if (!isLocked) { + drawers[addresses[id]] = + refs[id] = instance.ref + } else { + console.warn("Cannot update an locked drawer.") + } + } + + this.setState({ refs, addresses, drawers }) + } + + destroy = (id) => { + let { addresses, drawers, refs } = this.state + const index = addresses[id] + + if (typeof drawers[index] !== "undefined") { + drawers = drawers.filter((value, i) => i !== index) + } + delete addresses[id] + delete refs[id] + + this.setState({ addresses, drawers }) + } + + close = (id) => { + const ref = this.state.refs[id]?.current + + if (typeof ref !== "undefined") { + if (ref.state.locked && ref.state.visible) { + return console.warn("This drawer is locked and cannot be closed") + } else { + return ref.close() + } + } else { + return console.warn("This drawer not exists") + } + } + + closeAll = () => { + this.state.drawers.forEach((drawer) => { + drawer.ref.current.close() + }) + } + + render() { + return this.state.drawers + } +} + +export class Drawer extends React.Component { + options = this.props.options ?? {} + events = new EventEmitter() + state = { + visible: true, + } + + componentDidMount = async () => { + if (typeof this.props.controller === "undefined") { + throw new Error(`Cannot mount an drawer without an controller`) + } + if (typeof this.props.children === "undefined") { + throw new Error(`Empty component`) + } + } + + toogleVisibility = (to) => { + this.setState({ visible: to ?? !this.state.visible }) + } + + close = () => { + this.toogleVisibility(false) + this.events.emit("beforeClose") + + setTimeout(() => { + if (typeof this.options.onClose === "function") { + this.options.onClose() + } + + this.props.controller.destroy(this.props.id) + }, 500) + } + + sendEvent = (...context) => { + return this.props.controller.sendEvent(this.props.id, ...context) + } + + handleDone = (...context) => { + if (typeof this.options.onDone === "function") { + this.options.onDone(this, ...context) + } + } + + handleFail = (...context) => { + if (typeof this.options.onFail === "function") { + this.options.onFail(this, ...context) + } + } + + render() { + const drawerProps = { + ...this.options.props, + ref: this.props.ref, + key: this.props.id, + onRequestClose: this.close, + open: this.state.visible, + containerElementClass: "drawer", + modalElementClass: "body", + } + const componentProps = { + ...this.options.componentProps, + events: this.events, + close: this.close, + handleDone: this.handleDone, + handleFail: this.handleFail, + } + + return + {React.createElement(this.props.children, componentProps)} + + } +} \ No newline at end of file diff --git a/packages/app/src/layout/drawer/index.less b/packages/app/src/layout/drawer/index.less new file mode 100644 index 00000000..591016b7 --- /dev/null +++ b/packages/app/src/layout/drawer/index.less @@ -0,0 +1,26 @@ +.drawer { + .body { + position: absolute; + top: 50px; + + padding: 30px 10px 10px 10px; + background-color: var(--background-color-primary); + width: 100%; + max-width: 700px; + min-height: 100%; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + } + + .body::before{ + content: ""; + background-color: var(--background-color-contrast); + width: 100px; + height: 8px; + position: absolute; + top: 10px; + left: 50%; + transform: translateX(-50%); + border-radius: 8px; + } +} \ No newline at end of file diff --git a/packages/app/src/layout/header/index.jsx b/packages/app/src/layout/header/index.jsx new file mode 100644 index 00000000..760c4373 --- /dev/null +++ b/packages/app/src/layout/header/index.jsx @@ -0,0 +1,49 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/Icons" +import { AppSearcher } from "components" +import classnames from "classnames" + +import "./index.less" + +export default class Header extends React.Component { + constructor(props) { + super(props) + + this.state = { + visible: true, + } + + this.HeaderController = { + toogleVisible: (to) => { + if (window.isMobile) { + to = true + } + + this.setState({ visible: to ?? !this.state.visible }) + }, + isVisible: () => this.state.visible, + } + + window.app["HeaderController"] = this.HeaderController + } + + render() { + return ( + +
+ } + /> +
+ {!window.isMobile && +
+ +
} +
+ ) + } +} diff --git a/packages/app/src/layout/header/index.less b/packages/app/src/layout/header/index.less new file mode 100644 index 00000000..aa967eb6 --- /dev/null +++ b/packages/app/src/layout/header/index.less @@ -0,0 +1,31 @@ +@import "theme/index.less"; + +.app_header { + user-select : none; + --webkit-user-select: none; + + display : flex; + flex-direction: row; + align-items : center; + z-index : 100; + + height : @app_header_height !important; + padding: 10px; + + transition: all ease-in-out 150ms; + + background : var(--background-color-primary) !important; + background-color: var(--background-color-primary) !important; + + border-bottom: 1px var(--border-color) solid; + + >div { + margin-right: 16px; + } + + &.hidden { + opacity: 0; + height : 0 !important; + padding: 0 !important; + } +} \ No newline at end of file diff --git a/packages/app/src/layout/index.jsx b/packages/app/src/layout/index.jsx new file mode 100644 index 00000000..a3bd56ef --- /dev/null +++ b/packages/app/src/layout/index.jsx @@ -0,0 +1,96 @@ +import React from "react" +import classnames from "classnames" +import * as antd from "antd" + +import Sidebar from "./sidebar" +import Header from "./header" +import Drawer from "./drawer" +import Sidedrawer from "./sidedrawer" +import BottomBar from "./bottomBar" + +const LayoutRenders = { + mobile: (props) => { + return + + +
+ {props.children} +
+
+
+ + +
+ }, + default: (props) => { + return + + + +
+ +
+ {props.children} +
+
+ + + + } +} + +export default class Layout extends React.Component { + state = { + layoutType: "default", + isOnTransition: false, + } + + setLayout = (layout) => { + if (typeof LayoutRenders[layout] === "function") { + return this.setState({ + layoutType: layout, + }) + } + + return console.error("Layout type not found") + } + + componentDidMount() { + window.app.eventBus.on("transitionStart", () => { + this.setState({ isOnTransition: true }) + }) + window.app.eventBus.on("transitionDone", () => { + this.setState({ isOnTransition: false }) + }) + + if (window.app.settings.get("forceMobileMode") || window.app.isAppCapacitor() || Math.min(window.screen.width, window.screen.height) < 768 || navigator.userAgent.indexOf("Mobi") > -1) { + window.isMobile = true + this.setLayout("mobile") + } else { + window.isMobile = false + } + + window.app.eventBus.on("forceMobileMode", (to) => { + if (to) { + window.isMobile = true + this.setLayout("mobile") + } else { + window.isMobile = false + this.setLayout("default") + } + }) + } + + render() { + const layoutComponentProps = { + ...this.props, + ...this.state, + } + + if (LayoutRenders[this.state.layoutType]) { + return LayoutRenders[this.state.layoutType](layoutComponentProps) + } + + return LayoutRenders.default(layoutComponentProps) + } +} \ No newline at end of file diff --git a/packages/app/src/layout/sidebar/components/editor/index.jsx b/packages/app/src/layout/sidebar/components/editor/index.jsx new file mode 100644 index 00000000..7fdbc5be --- /dev/null +++ b/packages/app/src/layout/sidebar/components/editor/index.jsx @@ -0,0 +1,266 @@ +import React from "react" +import { Button } from "antd" +import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd" + +import { ActionsBar } from "components" +import { Icons, createIconRender } from "components/Icons" +import sidebarItems from "schemas/routes.json" +import { sidebarKeys as defaultSidebarKeys } from "schemas/defaultSettings" + +import Selector from "../selector" +import "./index.less" + +const allItemsMap = [...sidebarItems].map((item, index) => { + item.key = index.toString() + item.index = index + return item +}) + +const getAllItems = () => { + let items = {} + + allItemsMap.forEach((item) => { + items[item.id] = { + ...item, + content: ( + <> + {createIconRender(item.icon)} {item.title} + + ), + } + }) + + return items +} + +const allItems = getAllItems() + +export default class SidebarEditor extends React.Component { + state = { + items: [], + lockedIndex: [], + } + + componentDidMount() { + this.loadItems() + } + + loadItems = () => { + const storagedKeys = window.app.settings.get("sidebarKeys") ?? defaultSidebarKeys + const active = [] + const lockedIndex = [] + + // set current active items + storagedKeys.forEach((key) => { + if (typeof allItems[key] !== "undefined") { + if (allItems[key].locked) { + lockedIndex.push(allItems[key].index) + } + active.push(key) + } + }) + + this.setState({ items: active, lockedIndex }) + } + + onSave = () => { + window.app.settings.set("sidebarKeys", this.state.items) + window.app.SidebarController.toogleEdit(false) + } + + onDiscard = () => { + window.app.SidebarController.toogleEdit(false) + } + + onSetDefaults = () => { + window.app.settings.set("sidebarKeys", defaultSidebarKeys) + this.loadItems() + } + + reorder = (list, startIndex, endIndex) => { + const result = Array.from(list) + const [removed] = result.splice(startIndex, 1) + result.splice(endIndex, 0, removed) + + return result + } + + onDragEnd = (result) => { + if (!result.destination) { + return false + } + + if (this.state.lockedIndex.includes(result.destination.index)) { + return false + } + + if (allItems[result.draggableId].locked) { + console.warn("Cannot move an locked item") + return false + } + + const items = this.reorder(this.state.items, result.source.index, result.destination.index) + + this.setState({ items }) + } + + deleteItem = (key) => { + // check if item is locked + if (allItems[key].locked) { + console.warn("Cannot delete an locked item") + return false + } + + this.setState({ items: this.state.items.filter((item) => item !== key) }) + } + + addItem = () => { + const keys = [] + + // filter by active keys + allItemsMap.forEach((item) => { + if (!this.state.items.includes(item.id)) { + keys.push(item.id) + } + }) + + window.app.DrawerController.open("sidebar_item_selector", Selector, { + props: { + width: "65%", + }, + componentProps: { + items: keys + }, + onDone: (drawer, selectedKeys) => { + drawer.close() + + if (Array.isArray(selectedKeys)) { + const update = this.state.items ?? [] + + selectedKeys.forEach((key) => { + if (update.includes(key)) { + return false + } + + update.push(key) + }) + + this.setState({ items: update }) + } + }, + }) + } + + render() { + const grid = 6 + + const getItemStyle = (isDragging, draggableStyle, component, isDraggingOver) => ({ + cursor: component.locked ? "not-allowed" : "grab", + userSelect: "none", + padding: grid * 2, + margin: `0 0 ${grid}px 0`, + borderRadius: "6px", + transition: "150ms all ease-in-out", + width: "100%", + + border: isDraggingOver ? "2px dashed #e0e0e0" : "none", + + color: component.locked ? "rgba(145,145,145,0.6)" : "#000", + background: component.locked + ? "rgba(145, 145, 145, 0.2)" + : isDragging + ? "rgba(145, 145, 145, 0.5)" + : "transparent", + ...draggableStyle, + }) + + const getListStyle = (isDraggingOver) => ({ + background: "transparent", + transition: "150ms all ease-in-out", + + padding: grid, + width: "100%", + }) + + return ( +
+ + + {(droppableProvided, droppableSnapshot) => ( +
+ {this.state.items.map((key, index) => { + const itemComponent = allItems[key] + + return ( + + {(draggableProvided, draggableSnapshot) => ( +
+ {!allItems[key].locked && + this.deleteItem(key)} + className="sidebar_editor_deleteBtn" + /> + } + {itemComponent.icon && createIconRender(itemComponent.icon)} + {itemComponent.title ?? itemComponent.id} +
+ )} +
+ ) + })} + {droppableProvided.placeholder} +
+ )} +
+
+ + +
+
+
+ +
+ +
+ +
+
+ +
+
+
+ ) + } +} diff --git a/packages/app/src/layout/sidebar/components/editor/index.less b/packages/app/src/layout/sidebar/components/editor/index.less new file mode 100644 index 00000000..d6ad8388 --- /dev/null +++ b/packages/app/src/layout/sidebar/components/editor/index.less @@ -0,0 +1,14 @@ +.app_sidebar_sider_edit .ant-layout-sider-children{ + margin-top: 15px!important; + + .app_sidebar_menu_wrapper { + opacity: 0; + height: 0; + overflow: hidden; + } +} + +.sidebar_editor_deleteBtn:hover{ + color: red; + cursor: pointer; +} \ No newline at end of file diff --git a/packages/app/src/layout/sidebar/components/index.js b/packages/app/src/layout/sidebar/components/index.js new file mode 100644 index 00000000..75ce2055 --- /dev/null +++ b/packages/app/src/layout/sidebar/components/index.js @@ -0,0 +1 @@ +export { default as SidebarEditor } from './editor'; \ No newline at end of file diff --git a/packages/app/src/layout/sidebar/components/selector/index.jsx b/packages/app/src/layout/sidebar/components/selector/index.jsx new file mode 100644 index 00000000..b778816f --- /dev/null +++ b/packages/app/src/layout/sidebar/components/selector/index.jsx @@ -0,0 +1,76 @@ +import React from "react" +import { Icons, createIconRender } from "components/Icons" +import { SelectableList } from "components" +import { List } from "antd" + +import sidebarItems from "schemas/routes.json" + +import "./index.less" + +const getStoragedKeys = () => { + return window.app.settings.get("sidebarKeys") ?? [] +} + +const getAllItems = () => { + const obj = {} + + sidebarItems.forEach((item) => { + obj[item.id] = item + }) + + return obj +} + +const allItems = getAllItems() + +export default class SidebarItemSelector extends React.Component { + state = { + items: null, + } + + componentDidMount = () => { + const source = (this.props.items ?? getStoragedKeys() ?? []).map((key) => { + return { key } + }) + + this.setState({ items: source }) + } + + handleDone = (selectedKeys) => { + if (typeof this.props.onDone === "function") { + this.props.onDone(selectedKeys) + } + } + + render() { + return ( +
+

+ Select items to add +

+ {this.state.items && ( + { + const item = allItems[i.key] + + return ( + + {createIconRender(item.icon)} + {item.title ?? item.id} + + ) + }} + /> + )} +
+ ) + } +} diff --git a/packages/app/src/layout/sidebar/components/selector/index.less b/packages/app/src/layout/sidebar/components/selector/index.less new file mode 100644 index 00000000..a9e1a0d6 --- /dev/null +++ b/packages/app/src/layout/sidebar/components/selector/index.less @@ -0,0 +1,4 @@ +.sidebar_selector_item{ + height: fit-content; + padding: 0; +} \ No newline at end of file diff --git a/packages/app/src/layout/sidebar/index.jsx b/packages/app/src/layout/sidebar/index.jsx new file mode 100644 index 00000000..04146229 --- /dev/null +++ b/packages/app/src/layout/sidebar/index.jsx @@ -0,0 +1,326 @@ +import React from "react" +import { Layout, Menu, Avatar } from "antd" +import classnames from "classnames" + +import config from "config" +import { Icons, createIconRender } from "components/Icons" +import { sidebarKeys as defaultSidebarItems } from "schemas/defaultSettings" +import sidebarItems from "schemas/routes.json" +import { Translation } from "react-i18next" + +import { SidebarEditor } from "./components" +import "./index.less" + +const { Sider } = Layout + +const onClickHandlers = { + settings: (event) => { + window.app.openSettings() + }, +} + +export default class Sidebar extends React.Component { + constructor(props) { + super(props) + + this.state = { + editMode: false, + visible: true, + loading: true, + collapsed: window.app.settings.get("collapseOnLooseFocus") ?? false, + pathResolve: {}, + menus: {}, + extraItems: { + bottom: [], + top: [], + }, + } + + this.SidebarController = { + toogleVisible: (to) => { + this.setState({ visible: to ?? !this.state.visible }) + }, + toogleEdit: this.toogleEditMode, + isVisible: () => this.state.visible, + isEditMode: () => this.state.visible, + isCollapsed: () => this.state.collapsed, + } + + window.app["SidebarController"] = this.SidebarController + window.app.eventBus.on("edit_sidebar", () => this.toogleEditMode()) + window.app.eventBus.on("settingChanged.sidebar_collapse", (value) => { + this.toogleCollapse(value) + }) + } + + collapseDebounce = null + + componentDidMount = () => { + this.loadSidebarItems() + } + + getStoragedKeys = () => { + return window.app.settings.get("sidebarKeys") + } + + appendItem = (item = {}) => { + const { position } = item + + if (typeof position === "undefined" && typeof this.state.extraItems[position] === "undefined") { + console.error("Invalid position") + return false + } + + const state = this.state.extraItems + + state[position].push(item) + + this.setState({ extraItems: state }) + } + + loadSidebarItems = () => { + const items = {} + const itemsMap = [] + + // parse all items from schema + sidebarItems.forEach((item, index) => { + items[item.id] = { + ...item, + index, + content: ( + <> + {createIconRender(item.icon)} {item.title} + + ), + } + }) + + // filter undefined to avoid error + let keys = (this.getStoragedKeys() ?? defaultSidebarItems).filter((key) => { + if (typeof items[key] !== "undefined") { + return true + } + }) + + // short items + keys.forEach((id, index) => { + const item = items[id] + + if (item.locked) { + if (item.index !== index) { + keys = keys.move(index, item.index) + + //update index + window.app.settings.set("sidebarKeys", keys) + } + } + }) + + // set items from scoped keys + keys.forEach((key, index) => { + const item = items[key] + + try { + // avoid if item is duplicated + if (itemsMap.includes(item)) { + return false + } + + let valid = true + + if (typeof item.requireState === "object") { + const { key, value } = item.requireState + //* TODO: check global state + } + + // end validation + if (!valid) { + return false + } + + if (typeof item.path !== "undefined") { + let resolvers = this.state.pathResolve ?? {} + resolvers[item.id] = item.path + this.setState({ pathResolve: resolvers }) + } + + itemsMap.push(item) + } catch (error) { + return console.log(error) + } + }) + + // update states + this.setState({ items, menus: itemsMap, loading: false }) + } + + renderMenuItems(items) { + const handleRenderIcon = (icon) => { + if (typeof icon === "undefined") { + return null + } + return createIconRender(icon) + } + + return items.map((item) => { + if (Array.isArray(item.children)) { + return ( + + + {t => t(item.title)} + + } + {...item.props} + > + {this.renderMenuItems(item.children)} + + ) + } + + return ( + + + {t => t(item.title ?? item.id)} + + + ) + }) + } + + handleClick = (e) => { + if (typeof e.key === "undefined") { + window.app.eventBus.emit("invalidSidebarKey", e) + return false + } + + if (typeof onClickHandlers[e.key] === "function") { + return onClickHandlers[e.key](e) + } + if (typeof this.state.pathResolve[e.key] !== "undefined") { + return window.app.setLocation(`/${this.state.pathResolve[e.key]}`, 150) + } + + return window.app.setLocation(`/${e.key}`, 150) + } + + toogleEditMode = (to) => { + if (typeof to === "undefined") { + to = !this.state.editMode + } + + if (to) { + window.app.eventBus.emit("clearAllOverlays") + } else { + if (this.itemsMap !== this.getStoragedKeys()) { + this.loadSidebarItems() + } + } + + this.setState({ editMode: to, collapsed: false }) + } + + toogleCollapse = (to) => { + if (!this.state.editMode) { + this.setState({ collapsed: to ?? !this.state.collapsed }) + } + } + + onMouseEnter = () => { + if (window.app.settings.is("collapseOnLooseFocus", false)) { + return false + } + + clearTimeout(this.collapseDebounce) + this.collapseDebounce = null + + if (this.state.collapsed) { + this.toogleCollapse(false) + } + } + + handleMouseLeave = () => { + if (window.app.settings.is("collapseOnLooseFocus", false)) { + return false + } + + if (!this.state.collapsed) { + this.collapseDebounce = setTimeout(() => { this.toogleCollapse(true) }, window.app.settings.get("autoCollapseDelay") ?? 500) + } + } + + renderExtraItems = (position) => { + return this.state.extraItems[position].map((item = {}) => { + if (typeof item.icon !== "undefined") { + if (typeof item.props !== "object") { + item.props = Object() + } + + item.props["icon"] = createIconRender(item.icon) + } + + return {item.children} + }) + } + + render() { + if (this.state.loading) return null + + const { user } = this.props + + return ( + this.props.onCollapse()} + className={classnames("sidebar", { ["edit_mode"]: this.state.editMode, ["hidden"]: !this.state.visible })} + > +
+
+ +
+
+ + {this.state.editMode && ( +
+ +
+ )} + + {!this.state.editMode && ( +
+ + {this.renderMenuItems(this.state.menus)} + {this.renderExtraItems("top")} + +
+ )} + + {!this.state.editMode && ( +
+ + }> + + {t => t("Settings")} + + + + +
+ +
+
+ + {this.renderExtraItems("bottom")} +
+
+ )} +
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/layout/sidebar/index.less b/packages/app/src/layout/sidebar/index.less new file mode 100644 index 00000000..67ae8cb2 --- /dev/null +++ b/packages/app/src/layout/sidebar/index.less @@ -0,0 +1,154 @@ +@import "theme/vars.less"; + +// SIDEBAR +.ant-layout-sider { + background : var(--sidebar-background-color) !important; + background-color: var(--sidebar-background-color) !important; + + border-radius: 0 @app_sidebar_borderRadius @app_sidebar_borderRadius 0; + overflow : hidden; + border : 1px solid var(--sidebar-background-color) !important; + + transition: all 150ms ease-in-out; + + &.hidden { + flex : 0 !important; + min-width : 0 !important; + background-color: transparent !important; + width : 0 !important; + } +} + +.ant-menu-item { + color: var(--background-color-contrast); + + h1, + h2, + h3, + h4, + h5, + h6, + span, + p { + color: var(--background-color-contrast); + } +} + +.ant-menu, +.ant-menu ul { + background : transparent !important; + background-color: transparent !important; + + border-right: 0 !important; +} + +.sidebar .ant-layout-sider-children { + margin-top : 15px !important; + margin-bottom: 15px !important; + + background : transparent !important; + background-color: transparent !important; + + user-select : none; + --webkit-user-select: none; + + transition : all 150ms ease-in-out; + height : 100%; + display : flex; + flex-direction: column; + + &.edit_mode .ant-layout-sider-children { + background : transparent !important; + background-color: transparent !important; + + margin-top: 15px !important; + + .app_sidebar_menu_wrapper { + opacity : 0; + height : 0; + overflow: hidden; + } + } +} + +.app_sidebar_menu_wrapper { + transition: all 450ms ease-in-out; + + height: 100%; + width : 100%; +} + +.app_sidebar_header { + background : transparent !important; + background-color: transparent !important; + + user-select : none; + --webkit-user-select: none; + + display : flex; + flex-direction: column; + height : 15%; + margin-top : 5%; + margin-bottom : 5%; +} + +.app_sidebar_header_logo { + user-select : none; + --webkit-user-select: none; + + display : flex; + align-items : center; + justify-content: center; + + img { + user-select : none; + --webkit-user-select: none; + + width : 80%; + max-height: 80px; + } + + &.collapsed { + img { + max-width: 40px; + } + } +} + +.app_sidebar_menu { + background : transparent !important; + background-color: transparent !important; + + height : 65%; + overflow : overlay; + overflow-x: hidden; +} + +.app_sidebar_bottom { + position : absolute; + bottom : 0; + padding-bottom: 30px; + z-index : 50; + left : 0; + + background : transparent !important; + background-color : transparent !important; + backdrop-filter : blur(10px); + --webkit-backdrop-filter: blur(10px); + + width : 100%; + height: fit-content; + + .ant-menu, + ul { + background : transparent !important; + background-color: transparent !important; + } +} + +.user_avatar { + display : flex; + align-items : center; + justify-content: center; + padding : 0 !important; +} \ No newline at end of file diff --git a/packages/app/src/layout/sidedrawer/index.jsx b/packages/app/src/layout/sidedrawer/index.jsx new file mode 100644 index 00000000..6de1e851 --- /dev/null +++ b/packages/app/src/layout/sidedrawer/index.jsx @@ -0,0 +1,83 @@ +import React from "react" +import classnames from "classnames" + +import "./index.less" + +export default class Sidedrawer extends React.Component { + constructor(props) { + super(props) + this.state = { + render: null + } + + this.SidedrawerController = { + render: this._render, + close: this._close + } + + window.app["SidedrawerController"] = this.SidedrawerController + } + + containerRef = React.createRef() + + componentWillUnmount = () => { + this.unlistenEscape() + } + + _render = (component) => { + this.listenEscape() + this.setState({ render: component }) + } + + close = () => { + this.unlistenEscape() + this.setState({ render: null }) + } + + listenEscape = () => { + document.addEventListener("keydown", this.handleKeyPress) + } + + unlistenEscape = () => { + document.removeEventListener("keydown", this.handleKeyPress) + } + + handleKeyPress = (event) => { + // avoid handle keypress when is nothing to render + if (!this.state.render) { + return false + } + + let isEscape = false + + if ("key" in event) { + isEscape = event.key === "Escape" || event.key === "Esc" + } else { + isEscape = event.keyCode === 27 + } + + if (isEscape) { + this.close() + } + } + + renderComponent = (component) => { + if (!component) { + return null + } + + if (React.isValidElement(component)) { + return React.cloneElement(component) + } + + return React.createElement(component) + } + + render() { + return ( +
+ {this.renderComponent(this.state.render)} +
+ ) + } +} diff --git a/packages/app/src/layout/sidedrawer/index.less b/packages/app/src/layout/sidedrawer/index.less new file mode 100644 index 00000000..7d7aec2a --- /dev/null +++ b/packages/app/src/layout/sidedrawer/index.less @@ -0,0 +1,21 @@ +@import "theme/vars.less"; + +.sidedrawer { + width: 30vw; // by default + + background-color: var(--sidedrawer-background-color); + border-radius: @app_sidebar_borderRadius 0 0 @app_sidebar_borderRadius; + + word-break: break-all; + + transition: all 150ms ease-out; + + padding: 20px; + overflow-x: hidden; + overflow-y: overlay; + + &.hided { + width: 0; + padding: 0; + } +} \ No newline at end of file diff --git a/packages/app/src/models/index.js b/packages/app/src/models/index.js new file mode 100644 index 00000000..b70d767f --- /dev/null +++ b/packages/app/src/models/index.js @@ -0,0 +1,2 @@ +export { default as Session } from "./session" +export { default as User } from "./user" \ No newline at end of file diff --git a/packages/app/src/models/session/index.js b/packages/app/src/models/session/index.js new file mode 100644 index 00000000..677c0e0a --- /dev/null +++ b/packages/app/src/models/session/index.js @@ -0,0 +1,142 @@ +import cookies from "js-cookie" +import jwt_decode from "jwt-decode" +import config from "config" +import { Storage } from '@capacitor/storage' + +export default class Session { + static get bridge() { + return window.app?.request + } + + static capStorage = async (method, value) => { + const res = await Storage[method]({ key: this.tokenKey, value }) + return res.value + } + + static tokenKey = config.app?.storage?.token ?? "token" + + static get token() { + if (window.app.isAppCapacitor()) { + return this.capStorage("get") + } + return cookies.get(this.tokenKey) + } + + static set token(token) { + if (window.app.isAppCapacitor()) { + return this.capStorage("set", token) + } + return cookies.set(this.tokenKey, token) + } + + static async delToken() { + if (window.app.isAppCapacitor()) { + return this.capStorage("remove") + } + return cookies.remove(Session.tokenKey) + } + + static async decodedToken() { + const token = await this.token + return token && jwt_decode(token) + } + + //* BASIC HANDLERS + login = (payload, callback) => { + const body = { + username: window.btoa(payload.username), + password: window.btoa(payload.password), + } + + return this.generateNewToken(body, (err, res) => { + if (typeof callback === "function") { + callback(err, res) + } + + if (!err || res.status === 200) { + let token = res.data + + if (typeof token === "object") { + token = token.token + } + + Session.token = token + window.app.eventBus.emit("new_session") + } + }) + } + + logout = async () => { + await this.destroyCurrentSession() + this.forgetLocalSession() + } + + //* GENERATORS + generateNewToken = async (payload, callback) => { + const request = await Session.bridge.post.login(payload, undefined, { + parseData: false + }) + + if (typeof callback === "function") { + callback(request.error, request.response) + } + + return request + } + + //* GETTERS + getAllSessions = async () => { + return await Session.bridge.get.sessions() + } + + getTokenInfo = async () => { + const session = await Session.token + + return await Session.bridge.post.validateSession({ session }) + } + + getCurrentSession = async () => { + return await Session.bridge.get.currentSession() + } + + isCurrentTokenValid = async () => { + const health = await this.getTokenInfo() + + return health.valid + } + + forgetLocalSession = () => { + return Session.delToken() + } + + destroyAllSessions = async () => { + const session = await Session.decodedToken() + + if (!session) { + return false + } + + const result = await Session.bridge.delete.sessions({ user_id: session.user_id }) + this.forgetLocalSession() + window.app.eventBus.emit("destroyed_session") + + return result + } + + destroyCurrentSession = async () => { + const token = await Session.token + const session = await Session.decodedToken() + + if (!session || !token) { + return false + } + + const result = await Session.bridge.delete.session({ user_id: session.user_id, token: token }) + this.forgetLocalSession() + window.app.eventBus.emit("destroyed_session") + + return result + } + + logout = this.destroyCurrentSession +} \ No newline at end of file diff --git a/packages/app/src/models/user/index.js b/packages/app/src/models/user/index.js new file mode 100644 index 00000000..dda14f57 --- /dev/null +++ b/packages/app/src/models/user/index.js @@ -0,0 +1,79 @@ +import Session from "../session" + +export default class User { + static get bridge() { + return window.app?.request + } + + static async data() { + const token = await Session.decodedToken() + + if (!token || !User.bridge) { + return false + } + + return User.bridge.get.user(undefined, { username: token.username, _id: token.user_id }) + } + + static async roles() { + const token = await Session.decodedToken() + + if (!token || !User.bridge) { + return false + } + + return User.bridge.get.userRoles(undefined, { username: token.username }) + } + + static async hasRole(role) { + const roles = await User.roles() + + if (!roles) { + return false + } + + return Array.isArray(roles) && roles.includes(role) + } + + static async selfUserId() { + const token = await Session.decodedToken() + + if (!token) { + return false + } + + return token.user_id + } + + getAssignedWorkorders = async () => { + const token = await Session.decodedToken() + + if (!token || !User.bridge) { + return false + } + + return User.bridge.get.workorders({ username: token.username }) + } + + getData = async (payload, callback) => { + const request = await User.bridge.get.user(undefined, { username: payload.username, _id: payload.user_id }, { + parseData: false + }) + + if (typeof callback === "function") { + callback(request.error, request.response) + } + + return request.response.data + } + + hasAdmin = async () => { + const roles = await User.roles() + + if (!roles) { + return false + } + + return Array.isArray(roles) && roles.includes("admin") + } +} \ No newline at end of file diff --git a/packages/app/src/pages/account/components/index.js b/packages/app/src/pages/account/components/index.js new file mode 100644 index 00000000..79765944 --- /dev/null +++ b/packages/app/src/pages/account/components/index.js @@ -0,0 +1,2 @@ +export { default as SessionsView } from './sessionsView' +export { default as StatisticsView } from './statisticsView' \ No newline at end of file diff --git a/packages/app/src/pages/account/components/sessionsView/index.jsx b/packages/app/src/pages/account/components/sessionsView/index.jsx new file mode 100644 index 00000000..e6c33bcb --- /dev/null +++ b/packages/app/src/pages/account/components/sessionsView/index.jsx @@ -0,0 +1,114 @@ +import React from "react" +import * as antd from "antd" +import { Skeleton } from "components" +import { Icons } from "components/Icons" +import { Session } from "models" + +import "./index.less" + +const SessionsList = (props) => { + const sessions = props.sessions.map((session) => { + const header = ( +
+
+ +
+
{session.session_uuid}
+
{props.current === session.session_uuid ? Current : ""}
+
+ ) + + const renderDate = () => { + const dateNumber = Number(session.date) + + if (dateNumber) { + return new Date(dateNumber).toString() + } + return session.date + } + + return ( + +
+
+ + {renderDate()} +
+
+ + {session.location} +
+
+
+ ) + }) + + if (!props.sessions || !Array.isArray(props.sessions)) { + return
+ + Cannot find any valid sessions + +
+ } + + return
+ + {sessions} + +
+} + +export default class SessionsView extends React.Component { + state = { + currentSessionUUID: null, + } + + componentDidMount = async () => { + const currentSession = await Session.decodedToken() + this.setState({ currentSessionUUID: currentSession?.session_uuid }) + } + + signOutAll = () => { + antd.Modal.warning({ + title: "Caution", + content: "This action will cause all sessions to be closed, you will have to log in again.", + onOk: () => { + if (typeof this.props.handleSignOutAll === "function") { + this.props.handleSignOutAll() + } else { + antd.message.error("Sign out all sessions failed") + console.error("handleSignOutAll is not a function") + } + }, + okCancel: true, + }) + } + + render() { + const { sessions } = this.props + + if (!sessions) { + return + } + + return ( +
+
+
+

All Sessions

+
+
+ {sessions && ( + + Destroy all sessions + + )} +
+
+
+ +
+
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/pages/account/components/sessionsView/index.less b/packages/app/src/pages/account/components/sessionsView/index.less new file mode 100644 index 00000000..99378dd8 --- /dev/null +++ b/packages/app/src/pages/account/components/sessionsView/index.less @@ -0,0 +1,52 @@ +.sessions_wrapper { + .ant-collapse-borderless { + background-color: transparent !important; + } + + .header { + h1, + h2, + h3 { + margin: 0; + } + + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + } + + > div { + margin-bottom: 10px; + } +} + +.session_entry { + display: flex; + flex-direction: column; + + background: transparent; + margin-bottom: 10px; + + border: 1px solid #ccc !important; + border-radius: 12px !important; + + .session_entry_info { + > div { + padding: 4px 40px; + } + } + .ant-collapse-header { + display: flex; + align-items: center; + } +} + +.session_header { + display: flex; + flex-direction: row; + + > div { + padding: 0 10px; + } +} diff --git a/packages/app/src/pages/account/components/statisticsView/index.jsx b/packages/app/src/pages/account/components/statisticsView/index.jsx new file mode 100644 index 00000000..e8eb1114 --- /dev/null +++ b/packages/app/src/pages/account/components/statisticsView/index.jsx @@ -0,0 +1,17 @@ +import React from "react" + +export default class StatisticsView extends React.Component { + state = { + statistics: null + } + + componentDidMount = async () => { + + } + + render() { + return
+ +
+ } +} diff --git a/packages/app/src/pages/account/index.jsx b/packages/app/src/pages/account/index.jsx new file mode 100644 index 00000000..51619be7 --- /dev/null +++ b/packages/app/src/pages/account/index.jsx @@ -0,0 +1,86 @@ +import React from "react" +import * as antd from "antd" +import { Translation } from "react-i18next" + +import { Icons } from "components/Icons" +import { Skeleton, PostsFeed } from "components" +import { Session, User } from "models" + +import "./index.less" + +export default class Account extends React.Component { + static bindApp = ["userController", "sessionController"] + + state = { + isSelf: false, + user: null, + sessions: null + } + + api = window.app.request + + componentDidMount = async () => { + const token = await Session.decodedToken() + const location = window.app.history.location + const query = new URLSearchParams(location.search) + + const requestedUser = location.state?.username ?? query.get("username") ?? token?.username + let state = this.state + + if (requestedUser != null) { + if (token.username === requestedUser) { + state.isSelf = true + state.sessions = await this.props.contexts.app.sessionController.getAllSessions() + } + + state.user = await this.props.contexts.app.userController.getData({ username: requestedUser }) + } + + state.hasAdmin = await User.hasRole("admin") + + this.setState(state) + } + + render() { + const user = this.state.user + + if (!user) { + return + } + + return ( +
+
+
+ +
+ {Boolean(user.fullName) ? + <> +

{user.fullName}

+ @{user.username}#{user._id} + : + <> +

@{user.username}

+ #{user._id} + + } +
+
+
+
+ {user.badges.map((role, index) => { + return {role} + })} +
+
+
+ +
+ +
+
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/pages/account/index.less b/packages/app/src/pages/account/index.less new file mode 100644 index 00000000..5a6d7d90 --- /dev/null +++ b/packages/app/src/pages/account/index.less @@ -0,0 +1,76 @@ +@borderColor : #dddddd; +@borderRadius: 12px; + +.account_wrapper { + .card { + display : flex; + flex-direction: column; + color : var(--background-color-contrast); + + h1, + h2, + h3, + h4, + h5, + h6, + span { + color: var(--background-color-contrast); + } + + .header { + position : relative; + display : inline-flex; + align-items: center; + + z-index: 15; + width : 100%; + padding: 12px; + + font-family: "Roboto Mono", monospace; + + color : var(--background-color-contrast); + border : 1px solid var(--border-color); + border-radius: @borderRadius; + + word-break: break-all; + + img { + width : 70px; + height: 70px; + } + + h1 { + margin : 0; + font-size: 35px; + + span { + font-size: 12px; + } + } + } + + .extension { + position: relative; + display : inline-flex; + + top : -10px; + width : 100%; + padding: 19px 10px 10px 10px; + + border-top : 0; + border-right: 0; + + border-style: solid; + border-width: 1px; + + border-color : var(--border-color); + border-top-color: transparent; + + border-radius: 0 0 @borderRadius @borderRadius; + } + } + + >div { + margin-bottom: 10px; + } +} \ No newline at end of file diff --git a/packages/app/src/pages/changelogs/index.jsx b/packages/app/src/pages/changelogs/index.jsx new file mode 100644 index 00000000..fc62d919 --- /dev/null +++ b/packages/app/src/pages/changelogs/index.jsx @@ -0,0 +1,9 @@ +import React from "react" + +export default () => { + // TODO: Fetch API Release notes + + return
+

Changelog

+
+} \ No newline at end of file diff --git a/packages/app/src/pages/explore/index.jsx b/packages/app/src/pages/explore/index.jsx new file mode 100644 index 00000000..14298e2b --- /dev/null +++ b/packages/app/src/pages/explore/index.jsx @@ -0,0 +1,15 @@ +import React from "react" +import { PostCreator, PostsFeed } from "components" + +import "./index.less" + +export default class PostsExplorer extends React.Component { + render() { + return
+
+ +
+ +
+ } +} \ No newline at end of file diff --git a/packages/app/src/pages/explore/index.less b/packages/app/src/pages/explore/index.less new file mode 100644 index 00000000..7a9b0cdd --- /dev/null +++ b/packages/app/src/pages/explore/index.less @@ -0,0 +1,22 @@ +.explore { + display : flex; + flex-direction : column; + align-items : center; + justify-content: center; + + width: 100%; + + .header { + display : flex; + flex-direction : column; + align-items : center; + justify-content: center; + + width : 100%; + max-width: 40vw; + } + + >div { + margin-bottom: 15px; + } +} \ No newline at end of file diff --git a/packages/app/src/pages/licenses/index.jsx b/packages/app/src/pages/licenses/index.jsx new file mode 100644 index 00000000..7f223228 --- /dev/null +++ b/packages/app/src/pages/licenses/index.jsx @@ -0,0 +1,34 @@ +import React from "react" +import config from "config" + +import "./index.less" + +export default () => { + const [licenses, setLicenses] = React.useState([]) + + const loadLicenses = async () => { + const deps = Object.entries(config.package.dependencies).reduce((acc, [name, version]) => { + acc.push({ + name, + version, + }) + + return acc + }, []) + + setLicenses(deps) + } + + React.useEffect(() => { + loadLicenses() + }, []) + + return
+ {licenses.map((license) => { + return
+

{license.name}

+

{license.version}

+
+ })} +
+} diff --git a/packages/app/src/pages/licenses/index.less b/packages/app/src/pages/licenses/index.less new file mode 100644 index 00000000..0f86c2dc --- /dev/null +++ b/packages/app/src/pages/licenses/index.less @@ -0,0 +1,9 @@ +.tpd_list { + display: inline-flex; + flex-direction: column; + overflow-y: scroll!important; + + .item { + + } +} \ No newline at end of file diff --git a/packages/app/src/pages/login/index.jsx b/packages/app/src/pages/login/index.jsx new file mode 100644 index 00000000..05313e36 --- /dev/null +++ b/packages/app/src/pages/login/index.jsx @@ -0,0 +1,145 @@ +import React from "react" +import * as antd from "antd" +import { FormGenerator } from "components" +import { Icons } from "components/Icons" + +import config from "config" + +import "./index.less" + +const formInstance = [ + { + id: "username", + element: { + component: "Input", + icon: "User", + placeholder: "Username", + props: { + autocorrect: "off", + autocapitalize: "none", + className: "login-form-username", + }, + }, + item: { + hasFeedback: true, + rules: [ + { + required: true, + message: 'Please input your Username!', + }, + ], + } + }, + { + id: "password", + element: { + component: "Input", + icon: "Lock", + placeholder: "Password", + props: { + type: "password" + } + }, + item: { + hasFeedback: true, + rules: [ + { + required: true, + message: 'Please input your Password!', + }, + ], + } + }, + { + id: "login_btn", + withValidation: true, + element: { + component: "Button", + props: { + icon: "User", + children: "Login", + type: "primary", + htmlType: "submit" + } + } + }, +] + +export default class Login extends React.Component { + static bindApp = ["sessionController"] + + static pageStatement = { + bottomBarAllowed: false + } + + handleFinish = async (values, ctx) => { + ctx.toogleValidation(true) + + const payload = { + username: values.username, + password: values.password, + allowRegenerate: values.allowRegenerate, + } + + this.props.contexts.app.sessionController.login(payload, (error, response) => { + ctx.toogleValidation(false) + ctx.clearErrors() + + if (error) { + ctx.shake("all") + return ctx.error("result", error) + } else { + if (response.status === 200) { + this.onDone() + } + } + }) + } + + onDone = () => { + if (typeof this.props.onDone === "function") { + this.props.onDone() + } + } + + componentWillUnmount() { + window.app.SidebarController.toogleVisible(true) + window.app.HeaderController.toogleVisible(true) + } + + componentDidMount() { + const sidebarVisible = window.app.SidebarController.isVisible() + const headerVisible = window.app.HeaderController.isVisible() + + if (sidebarVisible) { + window.app.SidebarController.toogleVisible(false) + } + + if (headerVisible) { + window.app.HeaderController.toogleVisible(false) + } + } + + render() { + return ( +
+ {this.props.session &&
+

You already have a valid session.

+
+ @{this.props.session.username} +
+ window.app.setLocation(config.app?.mainPath ?? "/main")} >Go to main +
} +
+ +
+
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/pages/login/index.less b/packages/app/src/pages/login/index.less new file mode 100644 index 00000000..30f1dad9 --- /dev/null +++ b/packages/app/src/pages/login/index.less @@ -0,0 +1,55 @@ +.app_login { + height: 100vh; + width: 100vw; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + > div { + margin-bottom: 20px; + } +} + +.login-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.login-form-username { + font-size: 20px!important; + + input { + padding: 20px!important; + font-size: 20px!important; + } +} + +.session_available { + width: fit-content; + height: fit-content; + + padding: 20px; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + border: 1px solid #e5e5e5; + border-radius: 8px; + + .session_card { + width: fit-content; + height: fit-content; + + margin: 10px; + padding: 5px 10px; + + border: 1px solid #e5e5e5; + border-radius: 8px; + } +} diff --git a/packages/app/src/pages/main/index.jsx b/packages/app/src/pages/main/index.jsx new file mode 100644 index 00000000..62e4a297 --- /dev/null +++ b/packages/app/src/pages/main/index.jsx @@ -0,0 +1,58 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/Icons" + +import { AppSearcher, ServerStatus, Clock, } from "components" +import { Translation } from "react-i18next" + +import "./index.less" + +// TODO: Customizable main menu +export default class Main extends React.Component { + componentDidMount = async () => { + if (!window.isMobile && window.app?.HeaderController?.isVisible()) { + window.app.HeaderController.toogleVisible(false) + } + } + + componentWillUnmount() { + if (!window.isMobile && !window.app?.HeaderController?.isVisible()) { + window.app.HeaderController.toogleVisible(true) + } + } + + render() { + const user = this.props.user ?? {} + + return ( +
+
+
+ +
+
+
+ +
+
+ { + (t) =>

{t("main_welcome")} {user.fullName ?? user.username ?? "Guest"}

+ }
+
+ {!window.isMobile &&
+ +
} +
+
+ + {!window.isMobile &&
+ +
} +
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/pages/main/index.less b/packages/app/src/pages/main/index.less new file mode 100644 index 00000000..3e23b7de --- /dev/null +++ b/packages/app/src/pages/main/index.less @@ -0,0 +1,51 @@ +.dashboard { + padding: 20px; + width: 100%; + height: 100%; + + h1 { + font-size: 28px; + margin: 0; + } + + > div { + margin-bottom: 20px; + } + + .header { + display: flex; + + > div { + margin-right: 20px; + } + } + + .content { + > div { + margin-left: 20px; + } + } + + .quick_actions { + display: flex; + flex-wrap: wrap; + + > div { + margin: 6px 10px; + } + } + + .widgets { + display: flex; + flex-direction: column; + + .widget { + //background-color: var(--background-color-accent); + //padding: 10px; + } + + > div { + margin-bottom: 20px; + } + } +} diff --git a/packages/app/src/pages/streams/index.jsx b/packages/app/src/pages/streams/index.jsx new file mode 100644 index 00000000..59110796 --- /dev/null +++ b/packages/app/src/pages/streams/index.jsx @@ -0,0 +1,57 @@ +import React from 'react' +import axios from "axios" +import * as antd from "antd" +import { SelectableList, ActionsBar } from "components" + +export default class Streams extends React.Component { + state = { + list: [], + } + + api = window.app.request + + componentDidMount = async () => { + await this.updateStreamsList() + } + + updateStreamsList = async () => { + const streams = await this.api.get.streams().catch(error => { + console.error(error) + antd.message.error(error) + + return false + }) + + this.setState({ list: streams }) + } + + + onClickItem = (item) => { + window.app.setLocation(`/streams/viewer?key=${item}`) + } + + renderListItem = (stream) => { + stream.StreamPath = stream.StreamPath.replace(/^\/live\//, "") + + return
this.onClickItem(stream.StreamPath)}> +

@{stream.StreamPath} #{stream.id}

+
+ } + + render() { + return
+ +
+ Refresh +
+
+
+ +
+
+ } +} \ No newline at end of file diff --git a/packages/app/src/pages/streams/viewer/index.jsx b/packages/app/src/pages/streams/viewer/index.jsx new file mode 100644 index 00000000..815b3c27 --- /dev/null +++ b/packages/app/src/pages/streams/viewer/index.jsx @@ -0,0 +1,99 @@ +import React from 'react' +import * as antd from "antd" +import Plyr from 'plyr' +import Hls from 'hls.js' +import mpegts from 'mpegts.js' + +import "plyr/dist/plyr.css" + +const streamsSource = "http://media.ragestudio.net/live" + +export default class StreamViewer extends React.Component { + state = { + player: null, + streamKey: null, + streamSource: null, + loadedProtocol: "flv", + protocolInstance: null, + defaultOptions: undefined, + } + + videoPlayerRef = React.createRef() + + componentDidMount = async () => { + const query = new URLSearchParams(window.location.search) + const requested = query.get("key") + + const source = `${streamsSource}/${requested}` + const player = new Plyr('#player') + + await this.setState({ + player, + streamKey: requested, + streamSource: source, + }) + + await this.loadWithProtocol[this.state.loadedProtocol]() + } + + updateQuality = (newQuality) => { + if (loadedProtocol === "hls") { + this.state.protocolInstance.levels.forEach((level, levelIndex) => { + if (level.height === newQuality) { + console.log("Found quality match with " + newQuality); + this.state.protocolInstance.currentLevel = levelIndex; + } + }) + } + else { + console.error("Unsupported protocol") + } + } + + switchProtocol = (protocol) => { + if (typeof this.state.protocolInstance.destroy === "function") { + this.state.protocolInstance.destroy() + } + + this.setState({ protocolInstance: null }) + + console.log("Switching to " + protocol) + this.loadWithProtocol[protocol]() + } + + loadWithProtocol = { + hls: () => { + const source = `${this.state.streamSource}.m3u8` + const hls = new Hls() + + hls.loadSource(source) + hls.attachMedia(this.videoPlayerRef.current) + + this.setState({ protocolInstance: hls, loadedProtocol: "hls" }) + }, + flv: () => { + const source = `${this.state.streamSource}.flv` + + const instance = mpegts.createPlayer({ type: 'flv', url: source, isLive: true }) + + instance.attachMediaElement(this.videoPlayerRef.current) + instance.load() + instance.play() + + this.setState({ protocolInstance: instance, loadedProtocol: "flv" }) + }, + } + + render() { + return
+ this.switchProtocol(value)} + value={this.state.loadedProtocol} + > + HLS + FLV + +
+ } +} \ No newline at end of file diff --git a/packages/app/src/pages/users/index.jsx b/packages/app/src/pages/users/index.jsx new file mode 100644 index 00000000..503ded1a --- /dev/null +++ b/packages/app/src/pages/users/index.jsx @@ -0,0 +1,93 @@ +import React from "react" +import * as antd from "antd" +import { Icons } from "components/icons" +import { ActionsBar, SelectableList } from "components" + +import "./index.less" + +export default class Users extends React.Component { + state = { + data: null, + selectionEnabled: false, + } + + api = window.app.request + + componentDidMount = async () => { + await this.loadData() + } + + loadData = async () => { + this.setState({ data: null }) + const data = await this.api.get.users() + this.setState({ data }) + } + + toogleSelection = (to) => { + this.setState({ selectionEnabled: to ?? !this.state.selectionEnabled }) + } + + openUser(username) { + if (this.state.selectionEnabled) { + return false + } + + window.app.setLocation(`/account`, { username }) + } + + renderRoles(roles) { + return roles.map((role) => { + return {role} + }) + } + + renderItem = (item) => { + return ( +
this.openUser(item.username)} + className="user_item" + > +
+ +
+
+
+
+

{item.fullName ?? item.username}

+
+
+

#{item._id}

+
+
+
{this.renderRoles(item.roles)}
+
+
+ ) + } + + render() { + return ( +
+
+ +
+ : } type={this.state.selectionEnabled ? "default" : "primary"} onClick={() => this.toogleSelection()}> + {this.state.selectionEnabled ? "Done" : "Select"} + +
+
+ }>New User +
+
+ {!this.state.data ? : + } +
+
+ ) + } +} diff --git a/packages/app/src/pages/users/index.less b/packages/app/src/pages/users/index.less new file mode 100644 index 00000000..86403e0b --- /dev/null +++ b/packages/app/src/pages/users/index.less @@ -0,0 +1,52 @@ +.users_list { + display: flex; + flex-direction: column; + + > div { + margin-bottom: 20px; + } + + .selectableList_item { + padding: 0; + } +} + +.user_item { + display: flex; + + > div { + margin: 7px; + } + + .title { + width: 100%; + display: flex; + + flex-direction: row; + align-items: center; + justify-content: space-between; + + h1 { + cursor: text; + margin: 0; + font-size: 16px; + user-select: all; + } + h3 { + font-family: "Roboto Mono", monospace !important; + cursor: text; + margin: 0; + font-size: 13px; + user-select: all; + } + + .line { + display: flex; + flex-direction: row; + align-items: center; + > div { + margin-right: 8px; + } + } + } +} \ No newline at end of file diff --git a/packages/app/src/theme/fonts.css b/packages/app/src/theme/fonts.css new file mode 100644 index 00000000..77c1b20a --- /dev/null +++ b/packages/app/src/theme/fonts.css @@ -0,0 +1,12 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@200;300;400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Alata&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Poppins:300,300i,500,500i,700'); +@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Kulim+Park&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Nunito&display=swap'); +@import url("https://fonts.googleapis.com/css?family=Manrope:300,400,500,600,700&display=swap&subset=latin-ext"); +@import url('https://fonts.googleapis.com/css2?family=Varela+Round&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Space+Mono&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,300;0,400;1,300;1,400&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Recursive:wght@300;400;500;600;700;800;900&display=swap'); \ No newline at end of file diff --git a/packages/app/src/theme/index.less b/packages/app/src/theme/index.less new file mode 100644 index 00000000..7f6143cc --- /dev/null +++ b/packages/app/src/theme/index.less @@ -0,0 +1,267 @@ +@import "antd/dist/antd.variable.less"; +@import "theme/vars.less"; +@import "theme/fonts.css"; + +::-webkit-scrollbar { + display: none; + + width : 0; + height : 0; + z-index: 0; +} + +::-webkit-scrollbar-thumb { + position: absolute; + z-index : 200; + + height : 6px; + margin : 5px 10px 5px 5px; + transition: all 200ms ease-in-out; + + border : 4px solid rgba(0, 0, 0, 0); + background-color: rgba(0, 0, 0, 0.15); + background-clip : padding-box; + + -webkit-border-radius: 7px; +} + +::-webkit-scrollbar-button { + width : 0; + height : 0; + display: none; +} + +::-webkit-scrollbar-corner { + background-color: transparent; +} + +html { + overflow : hidden; + height : 100%; + -webkit-overflow-scrolling: touch; + + background-color: var(--background-color-primary) !important; + + svg { + margin-right : 10px; + vertical-align: -0.125em; + } +} + +body { + overflow : hidden; + -webkit-overflow-scrolling: touch; + -webkit-app-region : no-drag; + + height: 100%; + + user-select : none; + --webkit-user-select: none; + + scroll-behavior: smooth; + text-rendering : optimizeLegibility !important; + + background-color: var(--background-color-primary) !important; + font-family : var(--fontFamily); +} + +#root { + -webkit-overflow-scrolling: touch; + + position: fixed; + overflow: hidden; + + width : 100%; + height: 100%; + + background-color: var(--background-color-primary) !important; +} + +#nprogress { + position: absolute; + top : 0; + width : 100vw; + + .bar { + height : 2px; + background: #48acf0; + } +} + +.ant-layout, +.content_layout, +.app_layout { + background : var(--background-color-primary) !important; + background-color: var(--background-color-primary) !important; + + position : relative; + -webkit-overflow-scrolling: touch; + + width : 100%; + height : 100%; + max-height: 100vh; + + overflow : hidden; + transition: all 150ms ease-in-out; + + ::-webkit-scrollbar { + display : block; + position: absolute; + + width : 14px; + height : 18px; + z-index : 200; + transition: all 200ms ease-in-out; + } + + &.mobile { + //padding-top: 20px; + + ::-webkit-scrollbar { + display: none !important; + width : 0; + height : 0; + z-index: 0; + } + } +} + +.layout_page { + position : relative; + -webkit-overflow-scrolling: touch; + + height: 100%; + + margin: 10px 10px 30px 16px; + + overflow-x: hidden; + overflow-y: overlay; +} + +@media (max-width: 768px) { + .layout_page { + padding: 10px; + margin : 0; + } + + h1, + h2, + h3, + h4, + h5, + h6, + span, + p { + user-select : none; + -webkit-user-select: none; + } +} + +.fade-transverse-active { + transition: all 250ms; + height : fit-content; + width : 100%; +} + +.fade-transverse-enter { + opacity : 0; + transform: translateX(-30px); +} + +.fade-transverse-leave { + opacity : 0; + transform: translateX(30px); +} + +.fade-scale-leave-active, +.fade-scale-enter-active { + transition: all 0.3s; +} + +.fade-scale-enter { + opacity : 0; + transform: scale(1.2); +} + +.fade-scale-leave { + opacity : 0; + transform: scale(0.8); +} + +.fade-opacity-active { + transition: all 250ms; + opacity : 1; +} + +.fade-opacity-leave { + opacity: 0; +} + +.fade-opacity-enter { + opacity: 1; +} + +.app_initialization { + width : 100vw; + height : 100vh; + padding: 50px; + + display : flex; + flex-direction : column; + justify-content: center; + align-items : center; + + >div { + width : 100%; + height: fit-content; + + display : flex; + flex-direction : column; + justify-content: center; + align-items : center; + + margin-bottom: 50px; + } +} + +.app_crash_wrapper { + width : 100vw; + height : 100vh; + display : flex; + flex-direction : column; + justify-content: center; + align-items : center; +} + +// Fixments +.ant-btn { + display : flex; + align-items : center; + justify-content: center; + + user-select : none; + --webkit-user-select: none; +} + +.ant-result-extra { + display : flex; + align-items : center; + justify-content: center; +} + +.ant-modal-confirm-btns { + display: flex; +} + +.ant-message { + svg { + margin: 0; + } +} + +*:not(input):not(textarea) { + -webkit-user-select : none; + /* disable selection/Copy of UIWebView */ + -webkit-touch-callout: none; + /* disable the IOS popup when long-press on a link */ +} \ No newline at end of file diff --git a/packages/app/src/theme/variations/dark.less b/packages/app/src/theme/variations/dark.less new file mode 100644 index 00000000..fc07b936 --- /dev/null +++ b/packages/app/src/theme/variations/dark.less @@ -0,0 +1,78 @@ +div { + color: var(--text-color); +} + +h1, h2, h3, h4, h5, h6 { + color: var(--header-text-color); +} + +a, p { + color: var(--text-color); +} + +i { + color: var(--text-color); +} + +span:not(.ant-tag) { + color: var(--text-color); +} + +svg:not(.ant-tag *) { + color: var(--svg-color); +} + +input, .ant-input-affix-wrapper, .ant-input { + color: var(--text-color)!important; + background-color: var(--background-color-accent); +} + +input:disabled{ + background-color: var(--background_disabled); +} + +// MODAL +.ant-modal-content { + background-color: var(--background-color-accent)!important; +} + +// TABLE +tr { + background-color: var(--background-color-accent)!important; +} + +.ant-table, .ant-table-content, .ant-table-thead, .ant-table-cell { + background-color: var(--background-color-accent); +} + +.ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before { + background-color: var(--background-color-contrast); +} + +// MENU +.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected { + background-color: var(--background-color-primary); +} + +// BUTTONS +.ant-btn:not(.ant-btn-link) { + background-color: var(--button-background-color); +} + +.ant-btn span{ + color: var(--button-text-color)!important; +} + +.ant-btn svg { + color: var(--button-text-color)!important; +} + +// DRAWER +.ant-page-header span { + color: var(--text-color); +} + +.ant-drawer-content { + background: var(--background-color-primary); + background-color: var(--background-color-primary); +} \ No newline at end of file diff --git a/packages/app/src/theme/vars.less b/packages/app/src/theme/vars.less new file mode 100644 index 00000000..8532cd78 --- /dev/null +++ b/packages/app/src/theme/vars.less @@ -0,0 +1,17 @@ +//* Now this only works as an fallback for unset dynamic theme values + +// borders & radius +@app_sidebar_borderRadius: 18px; + +// SIZES +@app_header_height: 5vh; +@fixedHeader100VH: @app_header_height - 100vh; + +@app_menuItemSize: 100px; +@app_menuItemIconSize: 30px; +@app_menuItemTextSize: 12px; + +// TRANSITIONS +@transition-ease-in: all 0.3s ease-out; +@transition-ease-out: all 0.3s ease-out; +@transition-ease-inout: all 150ms ease-in-out; \ No newline at end of file diff --git a/packages/app/src/utils/cursorPosition/index.js b/packages/app/src/utils/cursorPosition/index.js new file mode 100644 index 00000000..f56808a8 --- /dev/null +++ b/packages/app/src/utils/cursorPosition/index.js @@ -0,0 +1 @@ +export default (event) => event.touches ? event.touches[0].clientX : event.clientX \ No newline at end of file diff --git a/packages/app/src/utils/findChildById/index.js b/packages/app/src/utils/findChildById/index.js new file mode 100644 index 00000000..3fc98611 --- /dev/null +++ b/packages/app/src/utils/findChildById/index.js @@ -0,0 +1,24 @@ +const findChildById = (element, id,) => { + let returnElement = null + let lastChildren = element.childNodes + + for (let index = 0; index < lastChildren.length; index++) { + const child = lastChildren[index] + + if (child.id === id) { + returnElement = child + break + } + + if (child.childNodes.length > 0) { + returnElement = findChildById(child, id) + if (returnElement) { + break + } + } + } + + return returnElement +} + +export default findChildById \ No newline at end of file diff --git a/packages/app/src/utils/getBase64/index.js b/packages/app/src/utils/getBase64/index.js new file mode 100644 index 00000000..a8991081 --- /dev/null +++ b/packages/app/src/utils/getBase64/index.js @@ -0,0 +1,8 @@ +export default (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = () => resolve(reader.result) + reader.onerror = error => reject(error) + }) +} \ No newline at end of file diff --git a/packages/app/src/utils/haptics/index.js b/packages/app/src/utils/haptics/index.js new file mode 100644 index 00000000..7a70992c --- /dev/null +++ b/packages/app/src/utils/haptics/index.js @@ -0,0 +1,34 @@ +import { Haptics, ImpactStyle } from "@capacitor/haptics" + +export default { + selectionStart: async () => { + const enabled = window.app.settings.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionStart() + } + }, + selectionChanged: async () => { + const enabled = window.app.settings.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionChanged() + } + }, + selectionEnd: async () => { + const enabled = window.app.settings.get("haptic_feedback") + + if (enabled) { + await Haptics.selectionEnd() + } + }, + impact: async (style = "Medium") => { + const enabled = window.app.settings.get("haptic_feedback") + + if (enabled) { + style = String(style).toTitleCase() + + await Haptics.impact({ style: ImpactStyle[style] }) + } + } +} \ No newline at end of file diff --git a/packages/app/src/utils/index.js b/packages/app/src/utils/index.js new file mode 100644 index 00000000..84ddf0ab --- /dev/null +++ b/packages/app/src/utils/index.js @@ -0,0 +1,5 @@ +export { default as useLongPress } from "./useLongPress" +export { default as findChildById } from "./findChildById" +export { default as cursorPosition } from "./cursorPosition" +export { default as getBase64 } from "./getBase64" +export { default as Haptics } from "./haptics" \ No newline at end of file diff --git a/packages/app/src/utils/useLongPress/index.jsx b/packages/app/src/utils/useLongPress/index.jsx new file mode 100644 index 00000000..258719c7 --- /dev/null +++ b/packages/app/src/utils/useLongPress/index.jsx @@ -0,0 +1,74 @@ +import { useCallback, useRef, useState } from "react" + +export default ( + onLongPress, + onClick, + { + shouldPreventDefault = true, + delay = 300, + onTouchStart, + onTouchEnd, + } = {} +) => { + const [longPressTriggered, setLongPressTriggered] = useState(false) + const timeout = useRef() + const target = useRef() + + const start = useCallback( + event => { + if (shouldPreventDefault && event.target) { + event.target.addEventListener("touchend", preventDefault, { + passive: false + }) + target.current = event.target + } + + if (typeof onTouchStart === "function") { + onTouchStart() + } + + timeout.current = setTimeout(() => { + onLongPress(event) + setLongPressTriggered(true) + }, delay) + }, + [onLongPress, delay, shouldPreventDefault] + ) + + const clear = useCallback( + (event, shouldTriggerClick = true) => { + timeout.current && clearTimeout(timeout.current) + shouldTriggerClick && !longPressTriggered && onClick() + setLongPressTriggered(false) + + if (typeof onTouchEnd === "function") { + onTouchEnd() + } + + if (shouldPreventDefault && target.current) { + target.current.removeEventListener("touchend", preventDefault) + } + }, + [shouldPreventDefault, onClick, longPressTriggered] + ) + + return { + onMouseDown: e => start(e), + onTouchStart: e => start(e), + onMouseUp: e => clear(e), + onMouseLeave: e => clear(e, false), + onTouchEnd: e => clear(e) + } +} + +const isTouchEvent = event => { + return "touches" in event +} + +const preventDefault = event => { + if (!isTouchEvent(event)) return + + if (event.touches.length < 2 && event.preventDefault) { + event.preventDefault() + } +} \ No newline at end of file diff --git a/packages/app/src/vite.entry.jsx b/packages/app/src/vite.entry.jsx new file mode 100644 index 00000000..09b07127 --- /dev/null +++ b/packages/app/src/vite.entry.jsx @@ -0,0 +1,5 @@ +import React from "react" +import ReactDOM from "react-dom" +import App from "./App" + +ReactDOM.render(, document.getElementById("root")) \ No newline at end of file diff --git a/packages/app/vite.config.js b/packages/app/vite.config.js new file mode 100644 index 00000000..8cc58984 --- /dev/null +++ b/packages/app/vite.config.js @@ -0,0 +1,18 @@ +import getConfig from "./.config.js" + +import { defineConfig } from "vite" +import reactRefresh from "@vitejs/plugin-react-refresh" + +import Pages from "vite-plugin-pages" + +export default defineConfig({ + plugins: [ + reactRefresh(), + Pages({ + react: true, + routeStyle: "next", + extensions: ["jsx", "tsx"], + }), + ], + ...getConfig(), +}) \ No newline at end of file diff --git a/packages/comty-electron/README.md b/packages/comty-electron/README.md deleted file mode 100644 index 560a9edb..00000000 --- a/packages/comty-electron/README.md +++ /dev/null @@ -1 +0,0 @@ -# @undefined/comty-electron diff --git a/packages/comty-electron/main/index.js b/packages/comty-electron/main/index.js deleted file mode 100644 index 6dc830f2..00000000 --- a/packages/comty-electron/main/index.js +++ /dev/null @@ -1,272 +0,0 @@ -const { - app, - BrowserWindow, - ipcMain, - Tray, - Menu, - MenuItem, - dialog, - shell, - screen, - BrowserView, - systemPreferences, - Notification, - globalhortcut -} = require('electron') -const path = require('path') -// const { spawn, exec } = require('child_process') -// const { autoUpdater } = require('electron-updater') -const log = require('electron-log'); -const packagejson = require('../../../package.json') -const is = require('electron-is') -const waitOn = require('wait-on'); -const { getDoNotDisturb } = require('electron-notification-state'); -const RuntimeConfig = require("../../comty/config"); - -let app_path = is.dev()? "localhost:8000" : `file://${path.join(__dirname, '..', 'renderer')}/index.html`; -let mainWindow; -let tray; -let watcher; - -// This gets rid of this: https://github.com/electron/electron/issues/13186 -process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true -// app.commandLine.appendSwitch("disable-web-security") -//app.commandLine.appendSwitch('disable-gpu-vsync=gpu') -app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors') - -const gotTheLock = app.requestSingleInstanceLock() -const notifySupport = Notification.isSupported() -const isNotDisturb = getDoNotDisturb() - -// Prevent multiple instances -if (!gotTheLock) { - app.quit() -} - -function relaunchApp(){ - mainWindow.close() - app.relaunch() -} - -function resumeApp(){ - if (mainWindow) { - mainWindow.show() - mainWindow.focus() - }else{ - createWindow() - } -} - -function notify(params) { - if(!notifySupport || !params) return false - let options = { - title: "", - body: "", - icon: null, - timeoutType: "default" - } - - const keys = Object.keys(params) - const values = Object.values(params) - - for (let i = 0; i < keys.length; i++) { - options[keys[i]] = values[i] - } - - new Notification(options).show() -} - -async function __init() { - createWindow() -} - -function createWindow() { - mainWindow = new BrowserWindow({ - title: packagejson.title, - icon: path.join(__dirname, './icon.png'), - width: 1100, - height: 700, - minWidth: 1256, - minHeight: 755, - show: true, - frame: false, - transparent: false, - hasShadow: true, - //webgl: true, - visualEffectState: "followWindow", - backgroundColor: '#00ffffff', - webPreferences: { - //enableRemoteModule: true, - enableBlinkFeatures: true, - experimentalFeatures: true, - nodeIntegration: true, - // Disable in dev since I think hot reload is messing with it - webSecurity: !is.dev() - } - }) - - if (is.dev()) { - app.commandLine.appendSwitch('remote-debugging-port', '9222') - globalhortcut.register('CommandOrControl+R', () => { - mainWindow.reload() - }) - - globalhortcut.register('F5', () => { - mainWindow.reload() - }) - } - - mainWindow.webContents.session.webRequest.onHeadersReceived( - { - urls: ['http://*/*', 'https://*/*'] - }, - (details, callback) => { - delete details.responseHeaders['Access-Control-Allow-Origin'] - delete details.responseHeaders['access-control-allow-origin'] - if (details.url.includes('www.google-analytics.com')) { - details.responseHeaders['Access-Control-Allow-Origin'] = [ app_path ] - } else { - details.responseHeaders['Access-Control-Allow-Origin'] = ['*'] - } - callback({ - cancel: false, - responseHeaders: details.responseHeaders - }) - } - ) - - tray = new Tray( - is.dev() - ? path.join(__dirname, './icon.png') - : path.join(__dirname, '../build/icon.png') - ); - - const trayMenuTemplate = [ - { - label: '🧰 Open DevTools', - click: () => mainWindow.webContents.openDevTools() - }, - { - label: '🔄 Relaunch', - click: () => { - relaunchApp() - } - }, - { - label: '🛑 Quit', - click: () => app.quit() - } - ]; - - tray.setContextMenu(Menu.buildFromTemplate(trayMenuTemplate)) - tray.setToolTip(RuntimeConfig.siteName) - tray.on('double-click', () => resumeApp()) - - mainWindow.loadURL(app_path) - mainWindow.focus() - - if (is.dev()) { - mainWindow.webContents.openDevTools() - } - - // const handleRedirect = (e, url) => { - // if (url !== mainWindow.webContents.getURL()) { - // e.preventDefault() - // shell.openExternal(url) - // } - // }; - - // mainWindow.webContents.on('will-navigate', handleRedirect) - // mainWindow.webContents.on('new-window', handleRedirect) -} - -app.on('ready', () => { - if (is.dev()) { - loadWindow = new BrowserWindow({ - width: 700, - height: 500, - frame: false, - resizable: false, - center: true, - transparent: true, - backgroundColor: "#00000000", - }); - loadWindow.loadURL(`file://${__dirname}/statics/loading_dev.html`) - notify({title: "Starting development server..."}) - waitOn({ resources: [app_path] }, function (err) { - if (err) { - return log.log(err) - } - __init() - loadWindow.close() - }) - }else{ - __init() - } -}) - -app.on('window-all-closed', () => { - mainWindow = null; -}) - -app.on('before-quit', async () => { - mainWindow.removeAllListeners('close'); - mainWindow = null; -}) - -ipcMain.handle('update-progress-bar', (event, p) => { - mainWindow.setProgressBar(p); -}) - -ipcMain.handle('hide-window', () => { - if (mainWindow) { - mainWindow.hide(); - } -}) - -ipcMain.handle('show-window', () => { - if (mainWindow) { - mainWindow.show(); - mainWindow.focus(); - } -}) - -ipcMain.handle('min-max-window', () => { - if (mainWindow.isMaximized()) { - mainWindow.unmaximize(); - } else if (mainWindow.maximizable) { - mainWindow.maximize(); - } -}) - -ipcMain.handle('getSystemPreferences', () => { - return systemPreferences -}) - -ipcMain.handle('minimize-window', () => { - mainWindow.minimize(); -}) - -ipcMain.handle('quit-app', () => { - app.quit(); -}) - -ipcMain.handle('open-devtools', () => { - mainWindow.webContents.openDevTools({ mode: 'undocked' }); -}) - -ipcMain.handle('appRelaunch', () => { - relaunchApp() -}) - -ipcMain.handle('app_notify', (event, payload) => { - notify(payload) -}) - -ipcMain.handle('contextualMenu', (event, payload) => { - contextualMenu(payload) -}) - -ipcMain.handle('inspectElement', (event, payload) => { - mainWindow.inspectElement(payload.x, payload.y) -}) \ No newline at end of file diff --git a/packages/comty-electron/package.json b/packages/comty-electron/package.json deleted file mode 100644 index 8cf964be..00000000 --- a/packages/comty-electron/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "@ragestudio/comty-electron", - "version": null, - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist", - "src" - ], - "repository": { - "type": "git", - "url": false - }, - "license": "MIT", - "publishConfig": { - "access": "public" - } -} diff --git a/packages/comty/.gitignore b/packages/comty/.gitignore deleted file mode 100644 index 3ce7af6b..00000000 --- a/packages/comty/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# dependencies -/node_modules -/npm-debug.log* -/yarn-error.log -/yarn.lock - -# production -/build -/dist -/out - -# umi -src/.umi -src/.umi-production -src/.umi-test -.env.local \ No newline at end of file diff --git a/packages/comty/.umirc.js b/packages/comty/.umirc.js deleted file mode 100644 index 10611925..00000000 --- a/packages/comty/.umirc.js +++ /dev/null @@ -1,55 +0,0 @@ -import config from './config/index.js' -import { defineConfig } from 'umi' -import { resolve } from 'path' - -let configs = { - hash: true, - title: config.app.siteName ?? null, - dynamicImport: { - loading: 'components/Loader', - }, - targets: { ie: 11 }, - dva: { immer: true, hmr: true }, - ignoreMomentLocale: true, - mountElementId: "root", - nodeModulesTransform: { - type: 'none', - }, - exportStatic: { - dynamicRoot: false, - }, - // ssr: { - // devServerRender: true, - // }, - alias: { - antd: resolve(__dirname, './node_modules/antd'), - api: resolve(__dirname, './node_modules/@ragestudio/nodecore-api-lib/src'), - plugins: resolve(__dirname, './plugins'), - schemas: resolve(__dirname, './schemas'), - debuggers: resolve(__dirname, './src/debuggers'), - core: resolve(__dirname, './src/core'), - theme: resolve(__dirname, './src/theme'), - config: resolve(__dirname, './config'), - pages: resolve(__dirname, './src/pages'), - components: resolve(__dirname, './src/components'), - models: resolve(__dirname, './src/models'), - node_modules: resolve(__dirname, './node_modules') - }, - extraBabelPlugins: [ - [ - 'import', - { - libraryName: 'lodash', - libraryDirectory: '', - camel2DashComponentName: false, - }, - 'lodash', - ], - ], -} - -if (typeof(config.runtime) !== "undefined") { - configs = { ...configs, ...config.runtime } -} - -export default defineConfig(configs) diff --git a/packages/comty/README.md b/packages/comty/README.md deleted file mode 100644 index 89f53e8c..00000000 --- a/packages/comty/README.md +++ /dev/null @@ -1 +0,0 @@ -# @comty diff --git a/packages/comty/config/endpoints.js b/packages/comty/config/endpoints.js deleted file mode 100644 index 2cbb3dea..00000000 --- a/packages/comty/config/endpoints.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - auth_server: 'POST /auth_server', - auth: 'POST /auth', - sessions: 'POST /sessions', - posts: 'POST /posts', - post_actions: 'POST /post-actions', - - get_data: 'POST /get_user_data', - basicData: 'POST /early_user', - profileData: 'POST /get-user-data-username' -}; diff --git a/packages/comty/config/handlers/errToFlag.js b/packages/comty/config/handlers/errToFlag.js deleted file mode 100644 index 66361b9e..00000000 --- a/packages/comty/config/handlers/errToFlag.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - SESSION_INVALID: "DISRUPT", - OVERLAY_BADPOSITION: "IGNORE", - INTERNAL_PROCESS_FAILED: "CRITICAL", - INVALID_DATA: "DISRUPT", - INVALID_PROPS: "IGNORE", - INVALID_INDEX: "IGNORE", - MISSING_REQUIRED_PAYLOAD: "IGNORE", -} - \ No newline at end of file diff --git a/packages/comty/config/handlers/errToStrings.js b/packages/comty/config/handlers/errToStrings.js deleted file mode 100644 index 28f816e3..00000000 --- a/packages/comty/config/handlers/errToStrings.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - SESSION_INVALID: `This session is not valid`, - OVERLAY_BADPOSITION: `Invalid overlay position! Was expected "primary" or "secondary"`, - INTERNAL_PROCESS_FAILED: `An internal error has occurred! `, - INVALID_DATA: `A function has been executed with invalid data and has caused an error!`, - INVALID_PROPS: `Some props failed!`, - INVALID_INDEX: "This request could not be indexed", - MISSING_REQUIRED_PAYLOAD: "Error has occurred because the function needed data that does not exist" -} - \ No newline at end of file diff --git a/packages/comty/config/handlers/flagToBehavior.js b/packages/comty/config/handlers/flagToBehavior.js deleted file mode 100644 index f73321b8..00000000 --- a/packages/comty/config/handlers/flagToBehavior.js +++ /dev/null @@ -1,34 +0,0 @@ -import { notification, message } from 'antd' -import { FieldTimeOutlined } from 'components/Icons' -import errStrings from 'config/handlers/errToStrings.js' -import errNumbers from 'config/handlers/numToError.js' -import errFlags from 'config/handlers/errToFlag.js' - -export default { - SESSION_INVALID: (payload) => { - notification.error({ - message: payload.msg ?? 'Hey', - icon: , - description: errStrings[payload.out] ?? "This session is not valid", - placement: 'bottomLeft', - }) - }, - OVERLAY_BADPOSITION: () => { - - }, - INTERNAL_PROCESS_FAILED: () => { - - }, - INVALID_DATA: () => { - - }, - INVALID_PROPS: () => { - - }, - MISSING_REQUIRED_PAYLOAD: () => { - - }, - INVALID_INDEX: () => { - - } -} \ No newline at end of file diff --git a/packages/comty/config/handlers/numToError.js b/packages/comty/config/handlers/numToError.js deleted file mode 100644 index 945efc2e..00000000 --- a/packages/comty/config/handlers/numToError.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - 403: "SESSION_INVALID", - 210: "OVERLAY_BADPOSITION", - 110: "INTERNAL_PROCESS_FAILED", - 120: "INVALID_DATA", - 130: "INVALID_PROPS", - 140: "INVALID_INDEX", - 150: "MISSING_REQUIRED_PAYLOAD" -} - \ No newline at end of file diff --git a/packages/comty/config/index.js b/packages/comty/config/index.js deleted file mode 100644 index 3a0c81f9..00000000 --- a/packages/comty/config/index.js +++ /dev/null @@ -1,82 +0,0 @@ -module.exports = { - app: { - guid: "7d6b74b5-1b3b-432f-97df-2c5fc2c2b6ae", - siteName: 'Comty™', - copyright: 'RageStudio©', - MainPath: '/', - defaultStyleClass: "app_", - - LogoPath: '/logo.svg', - FullLogoPath: '/full_logo.svg', - DarkFullLogoPath: '/dark_full_logo.svg', - DarkLogoPath: '/dark_logo.svg', - - endpoint_v3prefix: 'ycorejs_apiv3', - endpoint_websocket: 'eu_es01.ragestudio.net', - - storage: { - theme: "app_theme", - settings: "app_settings", - token: "cid", - data: "data" - }, - - storage_authFrame: 'cid', - storage_dataFrame: 'data', - storage_theme: 'app_theme', - - appTheme_desiredContrast: 7, - // Contrast level AA = 4.5, Level AAA = 7 - // Reference: https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0&showtechniques=143#qr-visual-audio-contrast-contrast - }, - - i18n: { - languages: [ - { - key: 'en', - title: 'English', - }, - ], - defaultLanguage: 'en', - }, - - layouts: [ - { - name: 'primary', - include: [/\/main/, /\/settings/, /\/saves/, /\/pro/, /\/chats/, /\//], - exclude: [/\/publics/, /\/login/], - }, - { - name: 'public', - include: [/.*/] - } - ], - - // Default Behaviors - defaults: { - app_model: "app", - verbosity: false, - sidebarCollaped: false, - session_noexpire: false, - search_ontype: false, - post_autoposition: true, - overlay_loosefocus: true, - render_pagetransition_preset: 'moveToRightScaleUp', - post_catchlimit: '20', - post_hidebar: true, - - feed_autorefresh: false, - keybinds: { - nextElement: "J", - prevElement: "U", - createNew: "N" - } - }, - - stricts: { - post_maxlenght: '512', - // In KB - api_maxpayload: '101376', - api_maxovertick: 10, - } -} diff --git a/packages/comty/config/keys.js b/packages/comty/config/keys.js deleted file mode 100644 index 3f01036e..00000000 --- a/packages/comty/config/keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - unsplash_key: 'slrHmuo9FEJajV4xvWl38TUhbib6BhhGI4VIZ1-cqnw', - unsplash_secret: 'dh3UlgLTdunO7a_l_iKjotXbz0xB7w5EuDIBU8Pa8pA', - g_recaptcha_key: '6Lc55uUUAAAAAEIACMVf3BUzAJSNCmI3RrjEirZ6', - g_recaptcha_secret: '6Lc55uUUAAAAAOP4OgUa5DpqJC-70t53AmW0lyYf', - server_key: 'f706b0a535b6c2d36545c4137a0a3a26853ea8b5-1223c9ba7923152cae28e5a2e7501b2b-50600768', -}; diff --git a/packages/comty/package-lock.json b/packages/comty/package-lock.json deleted file mode 100644 index 155ef801..00000000 --- a/packages/comty/package-lock.json +++ /dev/null @@ -1,14071 +0,0 @@ -{ - "name": "comty", - "version": "0.12.8", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ahooksjs/use-request": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@ahooksjs/use-request/-/use-request-2.8.6.tgz", - "integrity": "sha512-oOxr55Vym5/yf7c7qs8l8PPrHf5zAKGvWDqpaXI3bhDADigFU7FID1WOivG8DggQ6DBmjXvffj7IC8ii+iJLhA==", - "requires": { - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1" - } - }, - "@ant-design/colors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", - "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", - "requires": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "@ant-design/icons": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.6.2.tgz", - "integrity": "sha512-QsBG2BxBYU/rxr2eb8b2cZ4rPKAPBpzAR+0v6rrZLp/lnyvflLH3tw1vregK+M7aJauGWjIGNdFmUfpAOtw25A==", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-svg": "^4.0.0", - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-util": "^5.9.4" - } - }, - "@ant-design/icons-svg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz", - "integrity": "sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ==" - }, - "@ant-design/react-slick": { - "version": "0.28.3", - "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.28.3.tgz", - "integrity": "sha512-u3onF2VevGRbkGbgpldVX/nzd7LFtLeZJE0x2xIFT2qYHKkJZ6QT/jQ7KqYK4UpeTndoyrbMqLN4DiJza4BVBg==", - "requires": { - "@babel/runtime": "^7.10.4", - "classnames": "^2.2.5", - "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.0" - } - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - }, - "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.13.tgz", - "integrity": "sha512-9qQ8Fgo8HaSvHEt6A5+BATP7XktD/AdAnObUeTRz5/e2y3kbrxZgz32qUJJsdmwUvBJzF4AeV21nGTNwv05Mpw==", - "requires": { - "@babel/types": "^7.12.13", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "requires": { - "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", - "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==" - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "requires": { - "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.14.tgz", - "integrity": "sha512-xcfxDq3OrBnDsA/Z8eK5/2iPcLD8qbOaSSfOw4RA6jp4i7e6dEQ7+wTwxItEwzcXPQcsry5nZk96gmVPKletjQ==" - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "requires": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==" - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/types": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", - "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@bloomberg/record-tuple-polyfill": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@bloomberg/record-tuple-polyfill/-/record-tuple-polyfill-0.0.3.tgz", - "integrity": "sha512-sBnCqW0nqofE47mxFnw+lvx6kzsQstwaQMVkh66qm/A6IlsnH7WsyGuVXTou8RF2wL4W7ybOoHPvP2WgIo6rhQ==" - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true - }, - "@ctrl/tinycolor": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", - "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" - }, - "@formatjs/intl-displaynames": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-1.2.10.tgz", - "integrity": "sha512-GROA2RP6+7Ouu0WnHFF78O5XIU7pBfI19WM1qm93l6MFWibUk67nCfVCK3VAYJkLy8L8ZxjkYT11VIAfvSz8wg==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-listformat": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-1.4.8.tgz", - "integrity": "sha512-WNMQlEg0e50VZrGIkgD5n7+DAMGt3boKi1GJALfhFMymslJb5i+5WzWxyj/3a929Z6MAFsmzRIJjKuv+BxKAOQ==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-pluralrules": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-1.5.9.tgz", - "integrity": "sha512-37E1ZG+Oqo3qrpUfumzNcFTV+V+NCExmTkkQ9Zw4FSlvJ4WhbbeYdieVapUVz9M0cLy8XrhCkfuM/Kn03iKReg==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-relativetimeformat": { - "version": "4.5.16", - "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-4.5.16.tgz", - "integrity": "sha512-IQ0haY97oHAH5OYUdykNiepdyEWj3SAT+Fp9ZpR85ov2JNiFx+12WWlxlVS8ehdyncC2ZMt/SwFIy2huK2+6/A==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-unified-numberformat": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz", - "integrity": "sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag==", - "requires": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "@formatjs/intl-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz", - "integrity": "sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==" - }, - "@icons-pack/react-simple-icons": { - "version": "3.13.0", - "resolved": "https://registry.yarnpkg.com/@icons-pack/react-simple-icons/-/react-simple-icons-3.13.0.tgz", - "integrity": "sha512-y66dozS9pBBMDopswZfrdDnDXqrlc+XL8LSmKZTJngtdHPL+WJoBTzXTQVzc7H3NyVGJQWhQuqt09CgnbPwNZw==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": {}, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@lingui/babel-plugin-extract-messages": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.3.0.tgz", - "integrity": "sha512-IKysHLSAO4W8p2dvv09Tq2/812dtvRPkEkOZZ12wJAcR69UNllQLPcIRUaLIeYgliKZ9QEqxxqCxXun0ygPXlg==", - "dev": true, - "requires": { - "@babel/generator": "^7.11.6", - "@babel/runtime": "^7.11.2", - "@lingui/conf": "^3.3.0", - "mkdirp": "^1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@lingui/babel-plugin-transform-js": { - "version": "2.9.2", - "resolved": "https://registry.yarnpkg.com/@lingui/babel-plugin-transform-js/-/babel-plugin-transform-js-2.9.2.tgz", - "integrity": "sha512-yWoyhOfjRa9744TbVb/WN1OWxZYFLuXcWH5aVCu/sZ2b1YpsGCtfhplc5lRVWN8QcsfpjYmFiPqzU6swE5OFdQ==", - "dev": true - }, - "@lingui/babel-plugin-transform-react": { - "version": "2.9.2", - "resolved": "https://registry.yarnpkg.com/@lingui/babel-plugin-transform-react/-/babel-plugin-transform-react-2.9.2.tgz", - "integrity": "sha512-bxvrepiS6J9vZqRtpRiAgBIASQscjvu7aFmPqH4Y6001TDXrYuyhhNRt1BI3k2E6C2SckHh5vRtSpsqpjEiY3A==", - "dev": true - }, - "@lingui/babel-preset-react": { - "version": "2.9.2", - "resolved": "https://registry.yarnpkg.com/@lingui/babel-preset-react/-/babel-preset-react-2.9.2.tgz", - "integrity": "sha512-M+nfK/83+FnLEr63bBox5DKsSYgwPPmhfiLJAbc2BZBlmF1Nfqv/dHL+d2ynyEKNKCSVts476eDeiOFwv2MTNw==", - "dev": true, - "requires": { - "@lingui/babel-plugin-transform-js": "2.9.2", - "@lingui/babel-plugin-transform-react": "2.9.2" - } - }, - "@lingui/cli": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.3.0.tgz", - "integrity": "sha512-OE9rOlcMH6WKGPSxfscKCV7Mr/EhlyFMimvI2cMx/R7rEbKwhazqDHrLpzwxDJMbEnS08ZGYNAF2PPkj2xjjAQ==", - "dev": true, - "requires": { - "@babel/generator": "^7.11.6", - "@babel/parser": "^7.11.5", - "@babel/plugin-syntax-jsx": "^7.10.4", - "@babel/runtime": "^7.11.2", - "@babel/types": "^7.11.5", - "@lingui/babel-plugin-extract-messages": "^3.3.0", - "@lingui/conf": "^3.3.0", - "babel-plugin-macros": "^2.8.0", - "bcp-47": "^1.0.7", - "chalk": "^4.1.0", - "cli-table": "^0.3.1", - "commander": "^6.1.0", - "date-fns": "^2.16.1", - "fs-extra": "^9.0.1", - "fuzzaldrin": "^2.1.0", - "glob": "^7.1.4", - "inquirer": "^7.3.3", - "make-plural": "^6.2.2", - "messageformat-parser": "^4.1.3", - "micromatch": "4.0.2", - "mkdirp": "^1.0.4", - "node-gettext": "^3.0.0", - "normalize-path": "^3.0.0", - "ora": "^5.1.0", - "papaparse": "^5.3.0", - "plurals-cldr": "^1.0.4", - "pofile": "^1.1.0", - "pseudolocale": "^1.1.0", - "ramda": "^0.27.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==", - "dev": true - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - } - } - }, - "@lingui/conf": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.3.0.tgz", - "integrity": "sha512-gUUY8TputDkwdiUZpS68jsC/IW13gVJ2zDvjk2L/IuaeEZ8Yw7jPVy5PfJDrfNpeJFHFGns3HlXnsjFKrBhXog==", - "dev": true, - "requires": { - "@babel/runtime": "^7.11.2", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "jest-validate": "^26.5.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@lingui/core": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.3.0.tgz", - "integrity": "sha512-qPCHA2b/XT7ptTgpmnfQzQgAKPKHIcIGDfp4rppa0h+c1gmvI+uQKU8DEKmU0GplcykEfL7VZ8asdIXe0WrH6Q==", - "requires": { - "@babel/runtime": "^7.11.2", - "make-plural": "^6.2.2", - "messageformat-parser": "^4.1.3" - } - }, - "@lingui/loader": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/loader/-/loader-3.3.0.tgz", - "integrity": "sha512-MFHAQnr/dRuVmPGH+2k7F6qJlqed79hI4vVHE6y+IZlryRNB6RFDr+09pY0pKZhG1qeKevYIu+k4lUsiMZXqMw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.11.2", - "@lingui/cli": "^3.3.0", - "@lingui/conf": "^3.3.0", - "loader-utils": "^2.0.0", - "ramda": "^0.27.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "@lingui/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lingui/react/-/react-3.3.0.tgz", - "integrity": "sha512-7T7SFVZR09qKFajBZZamJ+K9pOm2bc7IGKb/ery0le/dSDrZnG4Zi7zeRyM2rlC51FU+Nda7LXODvqE/NkKLkw==", - "requires": { - "@babel/runtime": "^7.11.2", - "@lingui/core": "^3.3.0" - } - }, - "@qixian.cs/path-to-regexp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@qixian.cs/path-to-regexp/-/path-to-regexp-6.1.0.tgz", - "integrity": "sha512-2jIiLiVZB1jnY7IIRQKtoV8Gnr7XIhk4mC88ONGunZE3hYt5IHUG4BE/6+JiTBjjEWQLBeWnZB8hGpppkufiVw==" - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "requires": { - "@types/node": "*" - } - }, - "@types/history": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", - "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==" - }, - "@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==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/invariant": { - "version": "2.2.34", - "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.34.tgz", - "integrity": "sha512-lYUtmJ9BqUN688fGY1U1HZoWT1/Jrmgigx2loq4ZcJpICECm/Om3V314BxdzypO0u5PORKGMM6x0OXaljV1YFg==" - }, - "@types/isomorphic-fetch": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz", - "integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==" - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==" - }, - "@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.6.tgz", - "integrity": "sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA==" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/react": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.5.tgz", - "integrity": "sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.12", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", - "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", - "dev": true, - "requires": { - "@types/react": "^16" - }, - "dependencies": { - "@types/react": { - "version": "16.14.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.6.tgz", - "integrity": "sha512-Ol/aFKune+P0FSFKIgf+XbhGzYGyz0p7g5befSt4rmbzfGLaZR0q7jPew9k7d3bvrcuaL8dPy9Oz3XGZmf9n+w==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - } - } - }, - "@types/react-helmet": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.1.tgz", - "integrity": "sha512-VmSCMz6jp/06DABoY60vQa++h1YFt0PfAI23llxBJHbowqFgLUL0dhS1AQeVPNqYfRp9LAfokrfWACTNeobOrg==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-redux": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", - "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", - "requires": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "@types/react-router": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.14.tgz", - "integrity": "sha512-LAJpqYUaCTMT2anZheoidiIymt8MuX286zoVFPM3DVb23aQBH0mAkFvzpd4LKqiolV8bBtZWT5Qp7hClCNDENw==", - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.2.tgz", - "integrity": "sha512-WOSetDV3YPxbkVJAdv/bqExJjmcdCi/vpCJh3NfQOy1X15vHMSiMioXIcGekXDJJYhqGUMDo9e337mh508foAA==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", - "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==" - }, - "@types/yargs": { - "version": "15.0.5", - "resolved": "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz", - "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" - }, - "@umijs/ast": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/ast/-/ast-3.4.20.tgz", - "integrity": "sha512-yluYEr4styP2hV16el2aHtc3lX2ZKz/Q05S9sehFr0+YfxaHsT7b5QerEb+vbqH9UGSvVUjet/eT/Ch0hyrq8w==", - "dev": true, - "requires": { - "@umijs/utils": "3.4.20" - } - }, - "@umijs/babel-plugin-auto-css-modules": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/babel-plugin-auto-css-modules/-/babel-plugin-auto-css-modules-3.4.20.tgz", - "integrity": "sha512-kEjK7pnJtsTlzoHSZgmP+Hlx/6lUdYMdP9Lfu3haU9J6XTnMiibRFsy38uS+A1spl8/oD4RduUvPjGxCXM5W6Q==" - }, - "@umijs/babel-plugin-import-to-await-require": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/babel-plugin-import-to-await-require/-/babel-plugin-import-to-await-require-3.4.20.tgz", - "integrity": "sha512-z4fQA0jOKF/6DLcNUIIGxK3JoSsUjG74MayErQmeosKO2Wq3IprKshrbnMlJHovKCSvOEaZia34yeR9Le7lNRQ==", - "requires": { - "@umijs/utils": "3.4.20" - } - }, - "@umijs/babel-plugin-lock-core-js-3": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/babel-plugin-lock-core-js-3/-/babel-plugin-lock-core-js-3-3.4.20.tgz", - "integrity": "sha512-mJGMwuHb0Y54n6s99CuLYGW2FGrF8PnnB3ynOscC3keQvttmkXlZ/JhjCyM0hpTqo8doi6QhqgTtJ+Iszz3bCw==", - "requires": { - "@umijs/utils": "3.4.20", - "core-js": "3.6.5" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } - } - }, - "@umijs/babel-plugin-no-anonymous-default-export": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/babel-plugin-no-anonymous-default-export/-/babel-plugin-no-anonymous-default-export-3.4.20.tgz", - "integrity": "sha512-CrN1TLiFydLgxLGVDahAWdzK0E4ujwiQBTBW5y2rnkkKH5f5G/FKZEjbG5H26VOnDH6uemE5i9su8cAzJ7Nw9A==", - "requires": { - "@umijs/utils": "3.4.20" - } - }, - "@umijs/babel-preset-umi": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/babel-preset-umi/-/babel-preset-umi-3.4.20.tgz", - "integrity": "sha512-YUwerpS4jhN1VUYDFQmWXxY8sINFNL9moJx4gLGn/ur6tiZRl/t2y+h/1gFniFkzTNJ0Km4H7QoR8X/POhTEcQ==", - "requires": { - "@babel/runtime": "7.12.5", - "@umijs/babel-plugin-auto-css-modules": "3.4.20", - "@umijs/babel-plugin-import-to-await-require": "3.4.20", - "@umijs/babel-plugin-lock-core-js-3": "3.4.20", - "@umijs/babel-plugin-no-anonymous-default-export": "3.4.20" - } - }, - "@umijs/bundler-utils": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/bundler-utils/-/bundler-utils-3.4.20.tgz", - "integrity": "sha512-xqyfjVHlMUKrfQq0C7apRuMRUgWkVya1ra+XatvsEwyNjgT4+z+Hp8K6iI0dk2j8UWjFaLX8gdEMWMTBOKTrvw==", - "dev": true, - "requires": { - "@umijs/babel-preset-umi": "3.4.20", - "@umijs/types": "3.4.20", - "@umijs/utils": "3.4.20" - } - }, - "@umijs/bundler-webpack": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/bundler-webpack/-/bundler-webpack-3.4.20.tgz", - "integrity": "sha512-FwmvYgzNs29VUieqa/tOGgznLX2o8vpqr3GKgbeJDnXF83masXUrS1t/v9NjhJXR00DJ8n2qk1SJ8WyTRoRlWw==", - "dev": true, - "requires": { - "@umijs/bundler-utils": "3.4.20", - "@umijs/deps": "3.4.20", - "@umijs/types": "3.4.20", - "@umijs/utils": "3.4.20", - "jest-worker": "26.6.2", - "node-libs-browser": "2.2.1", - "normalize-url": "1.9.1", - "postcss": "7.0.32", - "postcss-flexbugs-fixes": "4.2.1", - "postcss-loader": "3.0.0", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "4.0.2", - "terser": "5.6.0", - "webpack-chain": "6.5.1" - } - }, - "@umijs/core": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/core/-/core-3.4.20.tgz", - "integrity": "sha512-K4IWjYdmhZmlMIVICUmCIb7p2vugANEIXIBJ6nO2aSwbqTPzlx0NlNhbmzaxKCJrmrwJ9Y4JWp+g09XiIqKwbg==", - "dev": true, - "requires": { - "@umijs/ast": "3.4.20", - "@umijs/babel-preset-umi": "3.4.20", - "@umijs/deps": "3.4.20", - "@umijs/utils": "3.4.20" - } - }, - "@umijs/deps": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/deps/-/deps-3.4.20.tgz", - "integrity": "sha512-eANA/O/4Bx5xjDhZ0DZAdWdpLNYJWV9S+udUgMvAs1FdxNK0EPY/+yg5VE8Lah57qukj8EYH6mtBoukO97+8Xg==", - "requires": { - "@bloomberg/record-tuple-polyfill": "0.0.3", - "chokidar": "3.5.1", - "clipboardy": "2.3.0", - "jest-worker": "24.9.0", - "prettier": "2.2.1" - }, - "dependencies": { - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@umijs/plugin-access": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@umijs/plugin-access/-/plugin-access-2.3.3.tgz", - "integrity": "sha512-ZTeivGpELVEB0BAvXnoFoUrgCFtIwNl6ZTSlz0YoQv+WPa5FNgsiLq2qo2NN/ORXyWckjDvSczZgrgJvy2oUGg==" - }, - "@umijs/plugin-analytics": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@umijs/plugin-analytics/-/plugin-analytics-0.2.2.tgz", - "integrity": "sha512-dVDzUfgIdEwdCC6a5IsMYpIPI+bEZjBEqIhAvw9dic6Vk77w9RxQxyRfW11dDmdXLAwWphp22NntQNt1ejZPtg==" - }, - "@umijs/plugin-antd": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@umijs/plugin-antd/-/plugin-antd-0.9.1.tgz", - "integrity": "sha512-MG+RifLIovPRvf5qPUfTIRqkiq1QBaKCE/pP3mM72DwAkDh6ZXn8oql/8tqFR3k1+m3XUbDEiOCH+Zx+eNiFew==", - "requires": { - "antd": "^4.1.3", - "antd-mobile": "^2.3.1" - } - }, - "@umijs/plugin-crossorigin": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@umijs/plugin-crossorigin/-/plugin-crossorigin-1.2.0.tgz", - "integrity": "sha512-/3y8PELpL/mNo6tBeegXVZwn75lG/8Z9FN6L1huKm3UQFQUjhKeJy8Sw8p3IkwXjwSYyE5gjuSB3Bb6NZlLDUQ==" - }, - "@umijs/plugin-dva": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@umijs/plugin-dva/-/plugin-dva-0.12.1.tgz", - "integrity": "sha512-wSCpN8AZRnipLk03x9HmRZkS5DYEdvrRdRWmYduYJzD02ydtOTbojQGjhime5vh1wLpr1PQoWkjWq8Z7E9Dl9Q==", - "requires": { - "babel-plugin-dva-hmr": "^0.4.2", - "dva": "^2.6.0-beta.20", - "dva-immer": "^0.5.2", - "dva-loading": "^3.0.20" - } - }, - "@umijs/plugin-helmet": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@umijs/plugin-helmet/-/plugin-helmet-1.1.3.tgz", - "integrity": "sha512-X4GRFlvOb8DxMDm1vExfpWOvxl6bp0oZz114DyhwnMSriJ8RcHAigTjtVJHYxJpKv7P6KayN3n13J4w/XZGWMg==", - "requires": { - "@types/react-helmet": "^6.1.0", - "react-helmet": "^6.1.0" - } - }, - "@umijs/plugin-initial-state": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@umijs/plugin-initial-state/-/plugin-initial-state-2.3.0.tgz", - "integrity": "sha512-R1hhzwFX3GA+kP0sjci2DwfLStCeOCdE0EjOV4HgzBkWR1YhX4ytof+eTgJlwx7o27zRqGNfk4DZVO3wmYpc0w==" - }, - "@umijs/plugin-layout": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@umijs/plugin-layout/-/plugin-layout-0.15.0.tgz", - "integrity": "sha512-/8f1kUePDn3ao3GmtGrMKgkuJZr3hCJvCg1BAyxk6kO+3ATi/b2dy05/bJtE+MjcomWWV1SHfKDoEj4qaPR4Ww==", - "requires": { - "@umijs/route-utils": "^1.0.7", - "antd": "^4.1.2", - "lodash": "^4.17.15", - "path-to-regexp": "1.x" - }, - "dependencies": { - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "@umijs/plugin-locale": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@umijs/plugin-locale/-/plugin-locale-0.11.2.tgz", - "integrity": "sha512-r/wbAQOoh/ogcG9xAiPXPCCKJ8+wAO7LeCEgGWlZdoIT+eJig+o/Ai0hBRTI/9cbowV3o9e1jovbFsO9feiHzQ==", - "requires": { - "@ant-design/icons": "^4.1.0", - "@formatjs/intl-pluralrules": "^1.5.0", - "@formatjs/intl-relativetimeformat": "^4.5.7", - "intl": "1.2.5", - "moment": "^2.29.1", - "react-intl": "3.12.1", - "warning": "^4.0.3" - } - }, - "@umijs/plugin-model": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@umijs/plugin-model/-/plugin-model-2.5.7.tgz", - "integrity": "sha512-TYUHFDGwNnJz7ptzNN4Ls4fD6Rj1r6nLJXcbpNgcxsYREkW2Gg70Ur5TgStCZEvsIL6C1jLqokImovOGTo9BZA==", - "requires": { - "fast-deep-equal": "3.1.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - } - } - }, - "@umijs/plugin-request": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@umijs/plugin-request/-/plugin-request-2.5.2.tgz", - "integrity": "sha512-EiLP/tzfcVhC2hj23AgGsxP0aFCY3SUF67q9EvBbj7J/Vs63iwo/ZiKfSgz+yPOsnk2DpHmIUJKhyUfrDpcGBA==", - "requires": { - "@ahooksjs/use-request": "^2.0.0", - "umi-request": "^1.2.14" - } - }, - "@umijs/plugin-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@umijs/plugin-test/-/plugin-test-1.0.0.tgz", - "integrity": "sha512-hWsyL+3oXCzEMgJs4WRtZhOJSdI9lvtuWLFkHhGLP5gLCsOKYmbO9OP2khUsuBQR471WFs+RBbyNyDlbqfIopg==", - "requires": { - "@umijs/test": "^3.0.7" - } - }, - "@umijs/preset-built-in": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/preset-built-in/-/preset-built-in-3.4.20.tgz", - "integrity": "sha512-Qvgcct4XY73p7nJaAnUl14SVv6IBixt9SLH/q0aMI+4ZyICgUXqKp3uibR+uXeo6OgtyStcdhp2uyThXoeJC9A==", - "dev": true, - "requires": { - "@types/react-router-config": "5.0.2", - "@umijs/babel-preset-umi": "3.4.20", - "@umijs/bundler-webpack": "3.4.20", - "@umijs/deps": "3.4.20", - "@umijs/renderer-mpa": "3.4.20", - "@umijs/renderer-react": "3.4.20", - "@umijs/runtime": "3.4.20", - "@umijs/server": "3.4.20", - "@umijs/types": "3.4.20", - "@umijs/utils": "3.4.20", - "es5-imcompatible-versions": "^0.1.62", - "history-with-query": "4.10.4", - "react-refresh": "0.9.0", - "react-router": "5.2.0", - "react-router-config": "5.1.1", - "react-router-dom": "5.2.0", - "regenerator-runtime": "0.13.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - } - } - }, - "@umijs/preset-react": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/@umijs/preset-react/-/preset-react-1.8.7.tgz", - "integrity": "sha512-31VWcTca1sQxebziITWJ0HzevMtaqI0FWbHwiUov/Vw/lNwDS4tOW/oydOsw2Kjw/GUP8EtkVEhuxqLJbWkP0w==", - "requires": { - "@umijs/plugin-access": "2.3.3", - "@umijs/plugin-analytics": "0.2.2", - "@umijs/plugin-antd": "0.9.1", - "@umijs/plugin-crossorigin": "1.2.0", - "@umijs/plugin-dva": "0.12.1", - "@umijs/plugin-helmet": "1.1.3", - "@umijs/plugin-initial-state": "2.3.0", - "@umijs/plugin-layout": "0.15.0", - "@umijs/plugin-locale": "0.11.2", - "@umijs/plugin-model": "2.5.7", - "@umijs/plugin-request": "2.5.2", - "@umijs/plugin-test": "1.0.0" - } - }, - "@umijs/renderer-mpa": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/renderer-mpa/-/renderer-mpa-3.4.20.tgz", - "integrity": "sha512-bp71yrHiIogv2kFsU37iRWw1zH+9bXD+7F1JO8JiOLPr0xlyRxqDcOrZdQdlbLNARHtWbi8KVAtpGvLSa9V+aw==", - "dev": true, - "requires": { - "@types/react": "^16.9.43", - "@types/react-dom": "^16.9.8", - "@umijs/runtime": "3.4.20" - }, - "dependencies": { - "@types/react": { - "version": "16.14.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.6.tgz", - "integrity": "sha512-Ol/aFKune+P0FSFKIgf+XbhGzYGyz0p7g5befSt4rmbzfGLaZR0q7jPew9k7d3bvrcuaL8dPy9Oz3XGZmf9n+w==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - } - } - }, - "@umijs/renderer-react": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/renderer-react/-/renderer-react-3.4.20.tgz", - "integrity": "sha512-Z8rkeG4Fh3t8SBd6eIMuRHFTVZX+1Hv+GmvD9UaEbeIy+uOr/OWuPIMkKt+ZqTv1GTHACgaSjiYLUymz2hgVEw==", - "dev": true, - "requires": { - "@types/react": "^16.9.43", - "@types/react-dom": "^16.9.8", - "@types/react-router-config": "^5.0.2", - "@umijs/runtime": "3.4.20", - "react-router-config": "5.1.1" - }, - "dependencies": { - "@types/react": { - "version": "16.14.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.6.tgz", - "integrity": "sha512-Ol/aFKune+P0FSFKIgf+XbhGzYGyz0p7g5befSt4rmbzfGLaZR0q7jPew9k7d3bvrcuaL8dPy9Oz3XGZmf9n+w==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - } - } - }, - "@umijs/route-utils": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/@umijs/route-utils/-/route-utils-1.0.37.tgz", - "integrity": "sha512-RQYMYd0w3mKWlCvhUqYN2/dcCD8LxQWsr46DXpaLtqe2Y/8662qXA3E6moaFpyfokKJK6UHt2VxNGhkKPNJIgQ==", - "requires": { - "@qixian.cs/path-to-regexp": "^6.1.0", - "fast-deep-equal": "^3.1.3", - "lodash.isequal": "^4.5.0", - "memoize-one": "^5.1.1" - } - }, - "@umijs/runtime": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/runtime/-/runtime-3.4.20.tgz", - "integrity": "sha512-nQwDxDGmJIxMo/9vnNGQk2TVOpNokUf0cel/ROZvvWAvz5UqYUMmh80OpAW+C72qnZazKEqn4IzNUXf4K+LWWg==", - "dev": true, - "requires": { - "@types/react-router": "5.1.12", - "@types/react-router-dom": "5.1.7", - "history-with-query": "4.10.4", - "react-router": "5.2.0", - "react-router-dom": "5.2.0", - "use-subscription": "1.5.1" - }, - "dependencies": { - "@types/react-router": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.12.tgz", - "integrity": "sha512-0bhXQwHYfMeJlCh7mGhc0VJTRm0Gk+Z8T00aiP4702mDUuLs9SMhnd2DitpjWFjdOecx2UXtICK14H9iMnziGA==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - } - } - }, - "@umijs/server": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/server/-/server-3.4.20.tgz", - "integrity": "sha512-W3NMKW1oIuQOKYDfaHE+XEOzRa/tvcj9amT85R2RNZafNdk/uDBhf6tuXnKPKo3s6UQzQ3c2TnSrjRT4TiKgNg==", - "dev": true, - "requires": { - "@umijs/deps": "3.4.20", - "@umijs/utils": "3.4.20" - } - }, - "@umijs/test": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/test/-/test-3.4.20.tgz", - "integrity": "sha512-SZ6p5liWzYowpvRFufPxMSQ6KKjOz27lNFqn4xq5H5SwsKxsxiNxmsu4OaQIprGs1jQ76XWCfq5vpkmy4D+Jtg==", - "requires": { - "@babel/core": "7.12.10", - "@umijs/babel-preset-umi": "3.4.20", - "@umijs/utils": "3.4.20", - "babel-core": "7.0.0-bridge.0", - "babel-jest": "^26.6.3", - "core-js": "3.8.2", - "identity-obj-proxy": "3.0.0", - "jest": "^26.6.3", - "jest-cli": "^26.6.3", - "jest-environment-jsdom-fourteen": "1.0.1", - "regenerator-runtime": "^0.13.7", - "whatwg-fetch": "^3.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "core-js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.2.tgz", - "integrity": "sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@umijs/types": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/types/-/types-3.4.20.tgz", - "integrity": "sha512-NknuWFeiNLZrUFbSxzuMzco4+xtu/g852T8zemK/qU1P94RhcgZ4/3BdcS8UgYoi7QUyjI6vKaL3KLzCT7dGFg==", - "dev": true, - "requires": { - "@umijs/babel-preset-umi": "3.4.20", - "@umijs/core": "3.4.20", - "@umijs/deps": "3.4.20", - "@umijs/server": "3.4.20", - "@umijs/utils": "3.4.20", - "webpack-chain": "6.5.1" - } - }, - "@umijs/utils": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/@umijs/utils/-/utils-3.4.20.tgz", - "integrity": "sha512-aWjmwd6EE0lzgJr3htHbzVeyh3o66wxtXnFjcAG5MC3rcMx6fv7UftrbpQJ5scgfKxv0nMu9g80XYLJBM6aI+g==", - "requires": { - "@umijs/deps": "3.4.20" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "add-dom-event-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", - "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", - "requires": { - "object-assign": "4.x" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "antd": { - "version": "4.15.5", - "resolved": "https://registry.npmjs.org/antd/-/antd-4.15.5.tgz", - "integrity": "sha512-zpdwZmdxZfSCVq6t329jXzq4oHZDDrMsD3L/bNilBJz9Y8yJZ0b4wGrWK7TSRipP2KcUB5Udm+bmfv2RBuzzNA==", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.6.2", - "@ant-design/react-slick": "~0.28.1", - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "classnames": "^2.2.6", - "copy-to-clipboard": "^3.2.0", - "lodash": "^4.17.21", - "moment": "^2.25.3", - "rc-cascader": "~1.4.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.1.0", - "rc-dialog": "~8.5.1", - "rc-drawer": "~4.3.0", - "rc-dropdown": "~3.2.0", - "rc-field-form": "~1.20.0", - "rc-image": "~5.2.4", - "rc-input-number": "~7.1.0", - "rc-mentions": "~1.5.0", - "rc-menu": "~8.10.0", - "rc-motion": "^2.4.0", - "rc-notification": "~4.5.2", - "rc-pagination": "~3.1.6", - "rc-picker": "~2.5.10", - "rc-progress": "~3.1.0", - "rc-rate": "~2.9.0", - "rc-resize-observer": "^1.0.0", - "rc-select": "~12.1.6", - "rc-slider": "~9.7.1", - "rc-steps": "~4.1.0", - "rc-switch": "~3.2.0", - "rc-table": "~7.13.0", - "rc-tabs": "~11.7.0", - "rc-textarea": "~0.3.0", - "rc-tooltip": "~5.1.1", - "rc-tree": "~4.1.0", - "rc-tree-select": "~4.3.0", - "rc-trigger": "^5.2.1", - "rc-upload": "~4.2.0-alpha.0", - "rc-util": "^5.9.4", - "scroll-into-view-if-needed": "^2.2.25", - "warning": "^4.0.3" - } - }, - "antd-mobile": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/antd-mobile/-/antd-mobile-2.3.4.tgz", - "integrity": "sha512-Uw02Ghc+DPzaQceJQ+5p1ZnQFafvILA0chTTen7m7c89Uzbw6Ny3zsVZDE1gfteNEIsL4JpPe0I/+aI3Q/nPAA==", - "requires": { - "array-tree-filter": "~2.1.0", - "babel-runtime": "6.x", - "classnames": "^2.2.1", - "normalize.css": "^7.0.0", - "rc-checkbox": "~2.0.0", - "rc-collapse": "~1.9.1", - "rc-slider": "~8.2.0", - "rc-swipeout": "~2.0.0", - "rmc-calendar": "^1.0.0", - "rmc-cascader": "~5.0.0", - "rmc-date-picker": "^6.0.8", - "rmc-dialog": "^1.0.1", - "rmc-drawer": "^0.4.11", - "rmc-feedback": "^2.0.0", - "rmc-input-number": "^1.0.0", - "rmc-list-view": "^0.11.0", - "rmc-notification": "~1.0.0", - "rmc-nuka-carousel": "~3.0.0", - "rmc-picker": "~5.0.0", - "rmc-pull-to-refresh": "~1.0.1", - "rmc-steps": "~1.0.0", - "rmc-tabs": "~1.2.0", - "rmc-tooltip": "~1.0.0" - }, - "dependencies": { - "rc-align": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", - "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", - "requires": { - "babel-runtime": "^6.26.0", - "dom-align": "^1.7.0", - "prop-types": "^15.5.8", - "rc-util": "^4.0.4" - } - }, - "rc-checkbox": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.0.3.tgz", - "integrity": "sha1-Q2qdUIlI4iSYDwU16nOLSBd6jyU=", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "prop-types": "15.x", - "rc-util": "^4.0.4" - } - }, - "rc-collapse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.9.3.tgz", - "integrity": "sha512-8cG+FzudmgFCC9zRGKXJZA36zoI9Dmyjp6UDi8N80sXUch0JOpsZDxgcFzw4HPpPpK/dARtTilEe9zyuspnW0w==", - "requires": { - "classnames": "2.x", - "css-animation": "1.x", - "prop-types": "^15.5.6", - "rc-animate": "2.x" - } - }, - "rc-slider": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.2.0.tgz", - "integrity": "sha1-rjfRcUTK1g4dpurA7k/8/qCwpug=", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.4", - "rc-tooltip": "^3.4.2", - "rc-util": "^4.0.4", - "shallowequal": "^1.0.1", - "warning": "^3.0.0" - } - }, - "rc-tooltip": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz", - "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==", - "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.2" - } - }, - "rc-trigger": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz", - "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "15.x", - "rc-align": "^2.4.0", - "rc-animate": "2.x", - "rc-util": "^4.4.0", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-util": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", - "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "prop-types": "^15.5.10", - "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0" - } - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-validator": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz", - "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-dva-hmr": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/babel-plugin-dva-hmr/-/babel-plugin-dva-hmr-0.4.2.tgz", - "integrity": "sha512-QP5W0IT9LDFgoqkXD0g7wn/FMn7zO562P8qys23twXri4i3E1SGOQ3z7jqcPrqzfTZHx+Ufr+cXy9oI6OLMYZg==" - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcp-47": { - "version": "1.0.8", - "resolved": "https://registry.yarnpkg.com/bcp-47/-/bcp-47-1.0.8.tgz", - "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.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" - } - } - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chart.js": { - "version": "2.9.4", - "resolved": "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.4.tgz", - "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", - "requires": { - "chartjs-color": "^2.1.0", - "moment": "^2.10.2" - } - }, - "chartjs-color": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.4.1.tgz", - "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", - "requires": { - "chartjs-color-string": "^0.6.0", - "color-convert": "^1.9.3" - } - }, - "chartjs-color-string": { - "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", - "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", - "requires": { - "color-name": "^1.0.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true - }, - "cli-table": { - "version": "0.3.4", - "resolved": "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.4.tgz", - "integrity": "sha512-1vinpnX/ZERcmE443i3SZTmU5DF0rPO9DrL4I2iVAllhxzCM9SzPlHnz19fsZB78htkKZvYBvj6SZ6vXnaxmTA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "string-width": "^4.2.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "requires": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - }, - "dependencies": { - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-classes": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", - "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", - "requires": { - "component-indexof": "0.0.3" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "component-indexof": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", - "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" - }, - "compute-scroll-into-view": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", - "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "concurrently": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "date-fns": "^2.0.1", - "lodash": "^4.17.15", - "read-pkg": "^4.0.1", - "rxjs": "^6.5.2", - "spawn-command": "^0.0.2-1", - "supports-color": "^6.1.0", - "tree-kill": "^1.2.2", - "yargs": "^13.3.0" - }, - "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "connected-react-router": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.5.2.tgz", - "integrity": "sha512-qzsLPZCofSI80fwy+HgxtEgSGS4ndYUUZAWaw1dqaOGPLKX/FVwIOEb7q+hjHdnZ4v5pKZcNv5GG4urjujIoyA==", - "requires": { - "immutable": "^3.8.1", - "prop-types": "^15.7.2", - "seamless-immutable": "^7.1.3" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie_js": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/cookie_js/-/cookie_js-1.4.0.tgz", - "integrity": "sha512-5TZ/A3eSbN6+MayQPCNlEdU07dYyIyacJ+BIkkIe58hSzRjD68kG/W+imyFtKwoHVvWW9LyU1TpsS//7IHsCAw==" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "cryptr": { - "version": "6.0.2", - "resolved": "https://registry.yarnpkg.com/cryptr/-/cryptr-6.0.2.tgz", - "integrity": "sha512-1TRHI4bmuLIB8WgkH9eeYXzhEg1T4tonO4vVaMBKKde8Dre51J68nAgTVXTwMYXAf7+mV2gBCkm/9wksjSb2sA==" - }, - "css-animation": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", - "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", - "requires": { - "babel-runtime": "6.x", - "component-classes": "^1.2.5" - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-line-break": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/css-line-break/-/css-line-break-1.1.1.tgz", - "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==", - "requires": { - "base64-arraybuffer": "^0.2.0" - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" - } - }, - "csstype": { - "version": "3.0.5", - "resolved": "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz", - "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "disposables": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/disposables/-/disposables-1.0.2.tgz", - "integrity": "sha1-NsamdEdfVaLWkTVnpgFETkh7S24=" - }, - "dnd-core": { - "version": "2.6.0", - "resolved": "https://registry.yarnpkg.com/dnd-core/-/dnd-core-2.6.0.tgz", - "integrity": "sha1-ErrWbVh0LG5ffPKUP7aFlED4CcQ=", - "requires": { - "asap": "^2.0.6", - "invariant": "^2.0.0", - "lodash": "^4.2.0", - "redux": "^3.7.1" - }, - "dependencies": { - "redux": { - "version": "3.7.2", - "resolved": "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - } - } - }, - "dom-align": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.1.tgz", - "integrity": "sha512-CdTD9EdA5WviP8oO3n+okOm0Xt7dSuWxRTLcJiW0memwUr3Tvz66JDDCh9cb50IZFHXvBmLoyX454uJU/EVg+g==" - }, - "dom-helpers": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz", - "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "dva": { - "version": "2.6.0-beta.22", - "resolved": "https://registry.npmjs.org/dva/-/dva-2.6.0-beta.22.tgz", - "integrity": "sha512-Q19fqiQxtl9L4a/woKoLTStagZR3QxTUEHuFhYBe0RLAf514HEuPmJXQrDz4p+QggNpTaI8lUzzId2TzntAFcQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@types/isomorphic-fetch": "^0.0.35", - "@types/react-redux": "^7.1.0", - "@types/react-router-dom": "^5.1.2", - "connected-react-router": "6.5.2", - "dva-core": "2.0.4", - "global": "^4.3.2", - "history": "^4.7.2", - "invariant": "^2.2.4", - "isomorphic-fetch": "^2.2.1", - "react-redux": "^7.1.0", - "react-router-dom": "^5.1.2", - "redux": "^4.0.1" - } - }, - "dva-core": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/dva-core/-/dva-core-2.0.4.tgz", - "integrity": "sha512-Zh39llFyItu9HKXKfCZVf9UFtDTcypdAjGBew1S+wK8BGVzFpm1GPTdd6uIMeg7O6STtCvt2Qv+RwUut1GFynA==", - "requires": { - "@babel/runtime": "^7.0.0", - "flatten": "^1.0.2", - "global": "^4.3.2", - "invariant": "^2.2.1", - "is-plain-object": "^2.0.3", - "redux-saga": "^0.16.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "dva-immer": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/dva-immer/-/dva-immer-0.5.2.tgz", - "integrity": "sha512-xg23ktGsrdzgiU0ACl8vFm2+E2GBWbtXndXRKM9wtHDR+yMH27NfttVuAZQWvv4aaj6f5/bC+TdsZ9t7n6cAhQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "immer": "^7.0.5" - } - }, - "dva-loading": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/dva-loading/-/dva-loading-3.0.22.tgz", - "integrity": "sha512-WReyAQwW42aimEwkjDLJSu3W4y1WjkOVcqdIY7x1ARrobgkNC3dVfLe4xUgdtHuLfSJzWa55FrdRrVM3b5QwcA==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" - }, - "emoji-annotation-to-unicode": { - "version": "0.3.0", - "resolved": "https://registry.yarnpkg.com/emoji-annotation-to-unicode/-/emoji-annotation-to-unicode-0.3.0.tgz", - "integrity": "sha1-t20Ygj4dcKlaAXxDjBaO2hKQLzs=" - }, - "emoji-emoticon-to-unicode": { - "version": "0.2.2", - "resolved": "https://registry.yarnpkg.com/emoji-emoticon-to-unicode/-/emoji-emoticon-to-unicode-0.2.2.tgz", - "integrity": "sha1-WuYNU4Utgyi2PzHRyimJfrt4MmA=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "engine.io-client": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.0.6.tgz", - "integrity": "sha512-5lPh8rrhxIruo5ZlgFt31KM626o5OCXrCHBweieWWuVicDtnYdz/iR93k6N9k0Xs61WrYxZKIWXzeSaJF6fpNA==", - "requires": { - "base64-arraybuffer": "0.1.4", - "component-emitter": "~1.3.0", - "debug": "~4.3.1", - "engine.io-parser": "~4.0.1", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - } - } - }, - "engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", - "requires": { - "base64-arraybuffer": "0.1.4" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - } - } - }, - "enquire-js": { - "version": "0.2.1", - "resolved": "https://registry.yarnpkg.com/enquire-js/-/enquire-js-0.2.1.tgz", - "integrity": "sha512-4vbcWD0ncK6VQ5M5giOImQb2hFPrKDZH5U+uRX9S6e9vfC6Q5PX6A38PVS6RMnCdr/luDTtJjjLuJinH/+a+Lw==", - "requires": { - "enquire.js": "^2.1.6" - } - }, - "enquire.js": { - "version": "2.1.6", - "resolved": "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz", - "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-imcompatible-versions": { - "version": "0.1.69", - "resolved": "https://registry.npmjs.org/es5-imcompatible-versions/-/es5-imcompatible-versions-0.1.69.tgz", - "integrity": "sha512-+QW+Q/HBO72pXHiRlWqGXwtxyM83iALRVPV0h/31UnAv5OJ75u1UCn32Kld67BoVMwaBHN2qBGi0SnNmKCkPZA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "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==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, - "feather-reactjs": { - "version": "2.0.13", - "resolved": "https://registry.yarnpkg.com/feather-reactjs/-/feather-reactjs-2.0.13.tgz", - "integrity": "sha512-GBUvl0Wo848AXJ9S67B/fK1/h5jW81x4Whzou7jGG6a/wWuriJ7cRvpaiogkNiGVS4dB6JQsQUo6VjeCXs9jRw==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "dependencies": { - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - } - } - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "fuzzaldrin": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz", - "integrity": "sha1-kCBMPi/appQbso0WZF1BgGOpDps=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "history-with-query": { - "version": "4.10.4", - "resolved": "https://registry.npmjs.org/history-with-query/-/history-with-query-4.10.4.tgz", - "integrity": "sha512-JnskQK8X+PbRFHSdDAExhoJyhLnlLZL+UuHQuQhys+Se9/ukRDRBWU4JVTjsiIfbv1fcEmR3oqKW56OYmk5M5w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "query-string": "^6.11.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - }, - "dependencies": { - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "dev": true - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "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" - } - }, - "howler": { - "version": "2.2.1", - "resolved": "https://registry.yarnpkg.com/howler/-/howler-2.2.1.tgz", - "integrity": "sha512-0iIXvuBO/81CcrQ/HSSweYmbT50fT2mIc9XMFb+kxIfk2pW/iKzDbX1n3fZmDXMEIpYvyyfrB+gXwPYSDqUxIQ==" - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html2canvas": { - "version": "1.0.0-rc.7", - "resolved": "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-rc.7.tgz", - "integrity": "sha512-yvPNZGejB2KOyKleZspjK/NruXVQuowu8NnV2HYG7gW7ytzl+umffbtUI62v2dCHQLDdsK6HIDtyJZ0W3neerA==", - "requires": { - "css-line-break": "1.1.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "immer": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.15.tgz", - "integrity": "sha512-yM7jo9+hvYgvdCQdqvhCNRRio0SCXc8xDPzA25SvKWa7b1WVPjLwQs1VYU5JPXjcJPTqAa5NP5dqpORGYBQ2AA==" - }, - "immutability-helper": { - "version": "2.9.1", - "resolved": "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.9.1.tgz", - "integrity": "sha512-r/RmRG8xO06s/k+PIaif2r5rGc3j4Yhc01jSBfwPCXDLYZwp/yxralI37Df1mwmuzcCsen/E/ITKcTEvc1PQmQ==", - "requires": { - "invariant": "^2.2.0" - } - }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "intl": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", - "integrity": "sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=" - }, - "intl-format-cache": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.3.1.tgz", - "integrity": "sha512-OEUYNA7D06agqPOYhbTkl0T8HA3QKSuwWh1HiClEnpd9vw7N+3XsQt5iZ0GUEchp5CW1fQk/tary+NsbF3yQ1Q==" - }, - "intl-messageformat": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-7.8.4.tgz", - "integrity": "sha512-yS0cLESCKCYjseCOGXuV4pxJm/buTfyCJ1nzQjryHmSehlptbZbn9fnlk1I9peLopZGGbjj46yHHiTAEZ1qOTA==", - "requires": { - "intl-format-cache": "^4.2.21", - "intl-messageformat-parser": "^3.6.4" - } - }, - "intl-messageformat-parser": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz", - "integrity": "sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA==", - "requires": { - "@formatjs/intl-unified-numberformat": "^3.2.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "@babel/core": {}, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - } - } - } - }, - "@jest/test-sequencer": {}, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "acorn-globals": {}, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "dependencies": { - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - } - } - }, - "jest-jasmine2": {}, - "jest-runner": {}, - "jest-snapshot": {}, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jsdom": {}, - "node-notifier": {}, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "requires": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==" - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "dependencies": { - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - } - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "requires": { - "whatwg-encoding": "^1.0.5" - }, - "dependencies": { - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - } - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - }, - "dependencies": { - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "requires": { - "punycode": "^2.1.1" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - } - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "dependencies": { - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - } - } - } - } - }, - "jest-environment-jsdom-fourteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", - "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", - "requires": { - "@jest/environment": "^24.3.0", - "@jest/fake-timers": "^24.3.0", - "@jest/types": "^24.3.0", - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", - "jsdom": "^14.1.0" - }, - "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", - "requires": { - "string-convert": "^0.2.0" - } - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "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" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "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.yarnpkg.com/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "less-vars-to-js": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/less-vars-to-js/-/less-vars-to-js-1.3.0.tgz", - "integrity": "sha512-xeiLLn/IMCGtdyCkYQnW8UuzoW2oYMCKg9boZRaGI58fLz5r90bNJDlqGzmVt/1Uqk75/DxIVtQSNCMkE5fRZQ==", - "requires": { - "strip-json-comments": "^2.0.1" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "localforage": { - "version": "1.9.0", - "resolved": "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz", - "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", - "requires": { - "lie": "3.1.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" - }, - "lodash.compact": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz", - "integrity": "sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-plural": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz", - "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==" - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "messageformat-parser": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz", - "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "mini-store": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-3.0.6.tgz", - "integrity": "sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==", - "requires": { - "hoist-non-react-statics": "^3.3.2", - "shallowequal": "^1.0.2" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-gettext": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-gettext/-/node-gettext-3.0.0.tgz", - "integrity": "sha512-/VRYibXmVoN6tnSAY2JWhNRhWYJ8Cd844jrZU/DwLVoI4vBI6ceYbd8i42sYZ9uOgDH3S7vslIKOWV/ZrT2YBA==", - "dev": true, - "requires": { - "lodash.get": "^4.4.2" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "normalize.css": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-7.0.0.tgz", - "integrity": "sha1-q/sd2CRwZ04DIrU86xqvQSk45L8=" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - } - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.2.0.tgz", - "integrity": "sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "papaparse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.0.tgz", - "integrity": "sha512-Lb7jN/4bTpiuGPrYy4tkKoUS8sTki8zacB5ke1p5zolhcSE4TlWgrlsxjrDTbG/dFVh07ck7X36hUf/b5V68pg==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "perfect-scrollbar": { - "version": "1.5.0", - "resolved": "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz", - "integrity": "sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "platform": { - "version": "1.3.6", - "resolved": "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - }, - "plurals-cldr": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/plurals-cldr/-/plurals-cldr-1.0.4.tgz", - "integrity": "sha512-4nLXqtel7fsCgzi8dvRZvUjfL8SXpP982sKg7b2TgpnR8rDnes06iuQ83trQ/+XdtyMIQkBBbKzX6x97eLfsJQ==", - "dev": true - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "pofile": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/pofile/-/pofile-1.1.0.tgz", - "integrity": "sha512-6XYcNkXWGiJ2CVXogTP7uJ6ZXQCldYLZc16wgRp8tqRaBTTyIfF+TUT3EQJPXTLAT7OTPpTAoaFdoXKfaTRU1w==", - "dev": true - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - } - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "pseudolocale": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/pseudolocale/-/pseudolocale-1.2.0.tgz", - "integrity": "sha512-k0OQFvIlvpRdzR0dPVrrbWX7eE9EaZ6gpZtTlFSDi1Gf9tMy9wiANCNu7JZ0drcKgUri/39a2mBbH0goiQmrmQ==", - "dev": true, - "requires": { - "commander": "*" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "rc-align": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.9.tgz", - "integrity": "sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "dom-align": "^1.7.0", - "rc-util": "^5.3.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-animate": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz", - "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "css-animation": "^1.3.2", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-util": "^4.15.3", - "react-lifecycles-compat": "^3.0.4" - }, - "dependencies": { - "rc-util": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", - "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "prop-types": "^15.5.10", - "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0" - } - } - } - }, - "rc-cascader": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-1.4.2.tgz", - "integrity": "sha512-JVuLGrSi+3G8DZyPvlKlGVWJjhoi9NTz6REHIgRspa5WnznRkKGm2ejb0jJtz0m2IL8Q9BG4ZA2sXuqAu71ltQ==", - "requires": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1", - "warning": "^4.0.1" - } - }, - "rc-checkbox": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.2.tgz", - "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-collapse": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.1.0.tgz", - "integrity": "sha512-EwpNPJcLe7b+5JfyaxM9ZNnkCgqArt3QQO0Cr5p5plwz/C9h8liAmjYY5I4+hl9lAjBqb7ZwLu94+z+rt5g1WQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.3.4", - "rc-util": "^5.2.1", - "shallowequal": "^1.1.0" - } - }, - "rc-dialog": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.5.2.tgz", - "integrity": "sha512-3n4taFcjqhTE9uNuzjB+nPDeqgRBTEGBfe46mb1e7r88DgDo0lL4NnxY/PZ6PJKd2tsCt+RrgF/+YeTvJ/Thsw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.6.1" - } - }, - "rc-drawer": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-4.3.1.tgz", - "integrity": "sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-util": "^5.7.0" - } - }, - "rc-dropdown": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz", - "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-trigger": "^5.0.4" - } - }, - "rc-field-form": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.20.0.tgz", - "integrity": "sha512-jkzsIfXR7ywEYdeAtktt1aLff88wxIPDLpq7KShHNl4wlsWrCE+TzkXBfjvVzYOVZt5GGrD8YDqNO/q6eaR/eA==", - "requires": { - "@babel/runtime": "^7.8.4", - "async-validator": "^3.0.3", - "rc-util": "^5.8.0" - } - }, - "rc-gesture": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/rc-gesture/-/rc-gesture-0.0.22.tgz", - "integrity": "sha512-6G6qrCE0MUTXyjh/powj91XkjRjoFL4HiJLPU5lALXHvGX+/efcUjGYUrHrrw0mwQdmrmg4POqnY/bibns+G3g==", - "requires": { - "babel-runtime": "6.x" - } - }, - "rc-image": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.2.4.tgz", - "integrity": "sha512-kWOjhZC1OoGKfvWqtDoO9r8WUNswBwnjcstI6rf7HMudz0usmbGvewcWqsOhyaBRJL9+I4eeG+xiAoxV1xi75Q==", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-dialog": "~8.5.0", - "rc-util": "^5.0.6" - } - }, - "rc-input-number": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.1.0.tgz", - "integrity": "sha512-ewgtKZaDmwbOWX8DXBGV+amp1IiGS8G+5xDqn85CK1BiQMwsQdrmMEqNkbTdxO8EmYbwN1iQQ4t82IkAaIoa3A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.9.8" - } - }, - "rc-mentions": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.5.3.tgz", - "integrity": "sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-menu": "^8.0.1", - "rc-textarea": "^0.3.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1" - } - }, - "rc-menu": { - "version": "8.10.7", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.7.tgz", - "integrity": "sha512-m/ypV7OjkkUsMdutzMUxEI8tWyi0Y1TQ5YkSDk7k2uv2aCKkHYEoDKsDAfcPeejo3HMo2z5unWE+jD+dCphraw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "mini-store": "^3.0.1", - "rc-motion": "^2.0.1", - "rc-trigger": "^5.1.2", - "rc-util": "^5.7.0", - "resize-observer-polyfill": "^1.5.0", - "shallowequal": "^1.1.0" - } - }, - "rc-motion": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.3.tgz", - "integrity": "sha512-GZLLFXHl/VqTfI7bSZNNZozcblNmDka1AAoQig7EZ6s0rWg5y0RlgrcHWO+W+nrOVbYfJDxoaQUoP2fEmvCWmA==", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.2.1" - } - }, - "rc-notification": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.5.5.tgz", - "integrity": "sha512-YIfhTSw+h5GsSdgMnuMx24wqiPlg3FeamuOlkh9RkyHx+SeZVAKzQ0juy2NGvPEF2hDWi5xTqxUqLdo0L2AmGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.2.0", - "rc-util": "^5.0.1" - } - }, - "rc-overflow": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.1.1.tgz", - "integrity": "sha512-bkGrxvWtz6xQfxBPBQcN8xOEHFCeG0R4pfLAku6kFLQF9NPMTt5HvT+Bq0+stqom9eI3WRlun6RPzfjTamPwew==", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.1" - } - }, - "rc-pagination": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.6.tgz", - "integrity": "sha512-Pb2zJEt8uxXzYCWx/2qwsYZ3vSS9Eqdw0cJBli6C58/iYhmvutSBqrBJh51Z5UzYc5ZcW5CMeP5LbbKE1J3rpw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-picker": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.10.tgz", - "integrity": "sha512-d2or2jql9SSY8CaRPybpbKkXBq3bZ6g88UKyWQZBLTCrc92Xm87RfRC/P3UEQo/CLmia3jVF7IXVi1HmNe2DZA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "date-fns": "^2.15.0", - "moment": "^2.24.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.4.0", - "shallowequal": "^1.1.0" - }, - "dependencies": { - "date-fns": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.3.tgz", - "integrity": "sha512-HeYdzCaFflc1i4tGbj7JKMjM4cKGYoyxwcIIkHzNgCkX8xXDNJDZXgDDVchIWpN4eQc3lH37WarduXFZJOtxfw==" - } - } - }, - "rc-progress": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.1.3.tgz", - "integrity": "sha512-Jl4fzbBExHYMoC6HBPzel0a9VmhcSXx24LVt/mdhDM90MuzoMCJjXZAlhA0V0CJi+SKjMhfBoIQ6Lla1nD4QNw==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6" - } - }, - "rc-rate": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.1.tgz", - "integrity": "sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.0.1" - } - }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-select": { - "version": "12.1.10", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.10.tgz", - "integrity": "sha512-LQdUhYncvcULlrNcAShYicc1obPtnNK7/rvCD+YCm0b2BLLYxl3M3b/HOX6o+ppPej+yZulkUPeU6gcgcp9nag==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-overflow": "^1.0.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.9.8", - "rc-virtual-list": "^3.2.0" - } - }, - "rc-slider": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.7.2.tgz", - "integrity": "sha512-mVaLRpDo6otasBs6yVnG02ykI3K6hIrLTNfT5eyaqduFv95UODI9PDS6fWuVVehVpdS4ENgOSwsTjrPVun+k9g==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-tooltip": "^5.0.1", - "rc-util": "^5.0.0", - "shallowequal": "^1.1.0" - } - }, - "rc-steps": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.3.tgz", - "integrity": "sha512-GXrMfWQOhN3sVze3JnzNboHpQdNHcdFubOETUHyDpa/U3HEKBZC3xJ8XK4paBgF4OJ3bdUVLC+uBPc6dCxvDYA==", - "requires": { - "@babel/runtime": "^7.10.2", - "classnames": "^2.2.3", - "rc-util": "^5.0.1" - } - }, - "rc-swipeout": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/rc-swipeout/-/rc-swipeout-2.0.11.tgz", - "integrity": "sha512-d37Lgn4RX4OOQyuA2BFo0rGlUwrmZk5q83srH3ixJ1Y1jidr2GKjgJDbNeGUVZPNfYBL91Elu6+xfVGftWf4Lg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "rc-gesture": "~0.0.22", - "react-native-swipeout": "^2.2.2" - } - }, - "rc-switch": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz", - "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.1" - } - }, - "rc-table": { - "version": "7.13.3", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.13.3.tgz", - "integrity": "sha512-oP4fknjvKCZAaiDnvj+yzBaWcg+JYjkASbeWonU1BbrLcomkpKvMUgPODNEzg0QdXA9OGW0PO86h4goDSW06Kg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.4.0", - "shallowequal": "^1.1.0" - } - }, - "rc-tabs": { - "version": "11.7.3", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.3.tgz", - "integrity": "sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w==", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "2.x", - "rc-dropdown": "^3.1.3", - "rc-menu": "^8.6.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" - } - }, - "rc-textarea": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.4.tgz", - "integrity": "sha512-ILUYx831ZukQPv3m7R4RGRtVVWmL1LV4ME03L22mvT56US0DGCJJaRTHs4vmpcSjFHItph5OTmhodY4BOwy81A==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0" - } - }, - "rc-tooltip": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.1.tgz", - "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", - "requires": { - "@babel/runtime": "^7.11.2", - "rc-trigger": "^5.0.0" - } - }, - "rc-tree": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-4.1.5.tgz", - "integrity": "sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-util": "^5.0.0", - "rc-virtual-list": "^3.0.1" - } - }, - "rc-tree-select": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-4.3.2.tgz", - "integrity": "sha512-tkouzhl8OpbTg4C9tVuP8nJ5jiZS7/wiusOIcFVgswhs1V3Jc+XHMKpLhR01egJ1bgsW1A6VrVCz3udxtdJSDA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-select": "^12.0.0", - "rc-tree": "^4.0.0", - "rc-util": "^5.0.5" - } - }, - "rc-trigger": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.7.tgz", - "integrity": "sha512-ttRWAd47pviWDeNDszhmuSgppmHY5aCr3y1+I6kvzS9QIlflsSC4GVjuF/eNl6F4cs7eB8B3tg7TxUCTWY7BHA==", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-align": "^4.0.0", - "rc-motion": "^2.0.0", - "rc-util": "^5.5.0" - } - }, - "rc-upload": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.2.0.tgz", - "integrity": "sha512-BXtvBs1PnwLjaUzBBU5z4yb9NMSaxc6mUIoPmS9LUAzaTz12L3TLrwu+8dnopYUiyLmYFS3LEO7aUfEWBqJfSA==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.2.0" - } - }, - "rc-util": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.12.2.tgz", - "integrity": "sha512-kzqG2lHY4oZsoj5Svov12K+9wi0xQHvGzfbLlsF1PDEH1aTbgdNTwlE7mejc3MGEr+7bNHa4+T5ZemCS8vQ1Gw==", - "requires": { - "@babel/runtime": "^7.12.5", - "react-is": "^16.12.0", - "shallowequal": "^1.1.0" - } - }, - "rc-virtual-list": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.6.tgz", - "integrity": "sha512-8FiQLDzm3c/tMX0d62SQtKDhLH7zFlSI6pWBAPt+TUntEqd3Lz9zFAmpvTu8gkvUom/HCsDSZs4wfV4wDPWC0Q==", - "requires": { - "classnames": "^2.2.6", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.0.7" - } - }, - "re-resizable": { - "version": "6.9.0", - "resolved": "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.0.tgz", - "integrity": "sha512-3cUDG81ylyqI0Pdgle/RHwwRYq0ORZzsUaySOCO8IbEtNyaRtrIHYm/jMQ5pjcNiKCxR3vsSymIQZHwJq4gg2Q==", - "requires": { - "fast-memoize": "^2.5.1" - } - }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-animations": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/react-animations/-/react-animations-1.0.0.tgz", - "integrity": "sha512-ePPpVgdKnNEXm+LP1ww5s3n0JzebBw9QdRfxRqogzeg1PDIn6kf0pmvgeTeVZQXXpGmHImkIeTiaQR1O6xjntA==" - }, - "react-async-script": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/react-async-script/-/react-async-script-1.2.0.tgz", - "integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==", - "requires": { - "hoist-non-react-statics": "^3.3.0", - "prop-types": "^15.5.0" - } - }, - "react-color": { - "version": "2.19.3", - "resolved": "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", - "requires": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - } - }, - "react-dazzle": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/react-dazzle/-/react-dazzle-1.4.0.tgz", - "integrity": "sha512-TX1dTt6ljHWNV1f+IJ7OU8MpjWLLwAJ8VXAb2AGlyXWL2xmLh6VbZH5IlU2NPhhkGIoxZAX7C1deuBuD8hx5Rw==", - "requires": { - "immutability-helper": "^2.3.1", - "jquery": "^3.3.1", - "popper.js": "^1.14.1", - "prop-types": "^15.5.10", - "react-dnd": "^2.6.0", - "react-dnd-html5-backend": "^2.6.0" - } - }, - "react-dnd": { - "version": "2.6.0", - "resolved": "https://registry.yarnpkg.com/react-dnd/-/react-dnd-2.6.0.tgz", - "integrity": "sha1-f6JWds+CfViokSk+PBq1naACVFo=", - "requires": { - "disposables": "^1.0.1", - "dnd-core": "^2.6.0", - "hoist-non-react-statics": "^2.1.0", - "invariant": "^2.1.0", - "lodash": "^4.2.0", - "prop-types": "^15.5.10" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-dnd-html5-backend": { - "version": "2.6.0", - "resolved": "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-2.6.0.tgz", - "integrity": "sha1-WQzRzKeEQbsnTt1XH+9MCxbdz44=", - "requires": { - "lodash": "^4.2.0" - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-draggable": { - "version": "4.4.3", - "resolved": "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz", - "integrity": "sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w==", - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - } - }, - "react-emoji": { - "version": "0.5.0", - "resolved": "https://registry.yarnpkg.com/react-emoji/-/react-emoji-0.5.0.tgz", - "integrity": "sha1-FLkcxrPOPDJG90Dn713i7AvuZks=", - "requires": { - "emoji-annotation-to-unicode": "^0.3.0", - "emoji-emoticon-to-unicode": "^0.2.2", - "escape-string-regexp": "^1.0.3", - "lodash.compact": "^3.0.0", - "object-assign": "^2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - } - } - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-google-recaptcha": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz", - "integrity": "sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==", - "requires": { - "prop-types": "^15.5.0", - "react-async-script": "^1.1.1" - } - }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - } - }, - "react-intl": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-3.12.1.tgz", - "integrity": "sha512-cgumW29mwROIqyp8NXStYsoIm27+8FqnxykiLSawWjOxGIBeLuN/+p2srei5SRIumcJefOkOIHP+NDck05RgHg==", - "requires": { - "@formatjs/intl-displaynames": "^1.2.0", - "@formatjs/intl-listformat": "^1.4.1", - "@formatjs/intl-relativetimeformat": "^4.5.9", - "@formatjs/intl-unified-numberformat": "^3.2.0", - "@formatjs/intl-utils": "^2.2.0", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/invariant": "^2.2.31", - "hoist-non-react-statics": "^3.3.2", - "intl-format-cache": "^4.2.21", - "intl-messageformat": "^7.8.4", - "intl-messageformat-parser": "^3.6.4", - "shallow-equal": "^1.2.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-linkify": { - "version": "1.0.0-alpha", - "resolved": "https://registry.yarnpkg.com/react-linkify/-/react-linkify-1.0.0-alpha.tgz", - "integrity": "sha512-7gcIUvJkAXXttt1fmBK9cwn+1jTa4hbKLGCZ9J1U6EOkyb2/+LKL1Z28d9rtDLMnpvImlNlLPdTPooorl5cpmg==", - "requires": { - "linkify-it": "^2.0.3", - "tlds": "^1.199.0" - } - }, - "react-native-swipeout": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-native-swipeout/-/react-native-swipeout-2.3.6.tgz", - "integrity": "sha512-t9suUCspzck4vp2pWggWe0frS/QOtX6yYCawHnEes75A7dZCEE74bxX2A1bQzGH9cUMjq6xsdfC94RbiDKIkJg==", - "requires": { - "create-react-class": "^15.6.0", - "prop-types": "^15.5.10", - "react-tween-state": "^0.1.5" - } - }, - "react-perfect-scrollbar": { - "version": "1.5.8", - "resolved": "https://registry.yarnpkg.com/react-perfect-scrollbar/-/react-perfect-scrollbar-1.5.8.tgz", - "integrity": "sha512-bQ46m70gp/HJtiBOF3gRzBISSZn8FFGNxznTdmTG8AAwpxG1bJCyn7shrgjEvGSQ5FJEafVEiosY+ccER11OSA==", - "requires": { - "perfect-scrollbar": "^1.5.0", - "prop-types": "^15.6.1" - } - }, - "react-redux": { - "version": "7.2.2", - "resolved": "https://registry.yarnpkg.com/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-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "dev": true - }, - "react-resizable": { - "version": "1.11.0", - "resolved": "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.11.0.tgz", - "integrity": "sha512-VoGz2ddxUFvildS8r8/29UZJeyiM3QJnlmRZSuXm+FpTqq/eIrMPc796Y9XQLg291n2hFZJtIoP1xC3hSTw/jg==", - "requires": { - "prop-types": "15.x", - "react-draggable": "^4.0.3" - } - }, - "react-reveal": { - "version": "1.2.2", - "resolved": "https://registry.yarnpkg.com/react-reveal/-/react-reveal-1.2.2.tgz", - "integrity": "sha512-JCv3fAoU6Z+Lcd8U48bwzm4pMZ79qsedSXYwpwt6lJNtj/v5nKJYZZbw3yhaQPPgYePo3Y0NOCoYOq/jcsisuw==", - "requires": { - "prop-types": "^15.5.10" - } - }, - "react-rnd": { - "version": "10.2.4", - "resolved": "https://registry.yarnpkg.com/react-rnd/-/react-rnd-10.2.4.tgz", - "integrity": "sha512-wseACIsxa1wuZz9XatO3/JAZR748Sddehh0NtJz1Yj3X5BQm5pwRShiadfnWrUajJATurHbN0NVTUn+jEkHkPw==", - "requires": { - "re-resizable": "6.9.0", - "react-draggable": "4.4.3", - "tslib": "2.0.3" - } - }, - "react-router": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - } - } - }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" - }, - "react-tween-state": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz", - "integrity": "sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=", - "requires": { - "raf": "^3.1.0", - "tween-functions": "^1.0.1" - } - }, - "react-virtualized": { - "version": "9.22.2", - "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.2.tgz", - "integrity": "sha512-5j4h4FhxTdOpBKtePSs1yk6LDNT4oGtUwjT7Nkh61Z8vv3fTG/XeOf8J4li1AYaexOwTXnw0HFVxsV0GBUqwRw==", - "requires": { - "@babel/runtime": "^7.7.2", - "clsx": "^1.0.4", - "dom-helpers": "^5.1.3", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "reactcss": { - "version": "1.2.3", - "resolved": "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "requires": { - "lodash": "^4.0.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "requires": { - "util.promisify": "^1.0.0" - } - }, - "redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "redux-saga": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-0.16.2.tgz", - "integrity": "sha512-iIjKnRThI5sKPEASpUvySemjzwqwI13e3qP7oLub+FycCRDysLSAOwt958niZW6LhxfmS6Qm1BzbU70w/Koc4w==" - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rmc-align": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rmc-align/-/rmc-align-1.0.0.tgz", - "integrity": "sha512-3gEa5/+hqqoEVoeQ25KoRc8DOsXIdSaVpaBq1zQFaV941LR3xvZIRTlxTDT/IagYwoGM1KZea/jd7cNMYP34Rg==", - "requires": { - "babel-runtime": "6.x", - "dom-align": "1.x", - "rc-util": "4.x" - }, - "dependencies": { - "rc-util": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", - "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "prop-types": "^15.5.10", - "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0" - } - } - } - }, - "rmc-calendar": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rmc-calendar/-/rmc-calendar-1.1.4.tgz", - "integrity": "sha512-xxQZaPFDnpHt4IFO8mukYrXSgC1W8LcNVp+EoX4iyeOJFimungOKB/iP5/cy+st8yXq8lUgk9TXsHNtM6Xo6ZA==", - "requires": { - "babel-runtime": "^6.26.0", - "rc-animate": "^2.4.4", - "rmc-date-picker": "^6.0.8" - } - }, - "rmc-cascader": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/rmc-cascader/-/rmc-cascader-5.0.3.tgz", - "integrity": "sha512-PxDhMjWViDdG4SMZqoXtAthGwgDyYnyxxZEE17IDDYsiCHpWtOhoIL8nsI+/hZ212UT/XF2LpqCsOlMoJiYk+w==", - "requires": { - "array-tree-filter": "2.1.x", - "babel-runtime": "6.x", - "rmc-picker": "~5.0.0" - } - }, - "rmc-date-picker": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/rmc-date-picker/-/rmc-date-picker-6.0.10.tgz", - "integrity": "sha512-/9+I6lm3EDEl6M7862V6++zFuxwsM0UEq8wSHbotYIPPmyB/65gx1cviblghOv2QfB0O9+U2w3qEJlRP/WsMrA==", - "requires": { - "babel-runtime": "6.x", - "rmc-picker": "~5.0.0" - } - }, - "rmc-dialog": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/rmc-dialog/-/rmc-dialog-1.1.1.tgz", - "integrity": "sha512-28aJqtPTX6v13Z/aU1WBy1AFIXkE74PxZXde7JvtEIy9hQDTjH8fqOi822BpzAbXCyNE7jF9iFomy3H2ClsDJA==", - "requires": { - "babel-runtime": "6.x", - "rc-animate": "2.x" - } - }, - "rmc-drawer": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/rmc-drawer/-/rmc-drawer-0.4.11.tgz", - "integrity": "sha512-YfB9XEJ8iM0MMuLWAK4313uOxSM8NAljC8Cqun1KamXutglYTuRviUuTLNSOzV8HHPp5kNpsVduvPCGLWXvThw==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.4", - "prop-types": "^15.5.10" - } - }, - "rmc-feedback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rmc-feedback/-/rmc-feedback-2.0.0.tgz", - "integrity": "sha512-5PWOGOW7VXks/l3JzlOU9NIxRpuaSS8d9zA3UULUCuTKnpwBHNvv1jSJzxgbbCQeYzROWUpgKI4za3X4C/mKmQ==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5" - } - }, - "rmc-input-number": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/rmc-input-number/-/rmc-input-number-1.0.5.tgz", - "integrity": "sha512-prPkEtoOVde77GnEnEaBeWjBobMOPgGqU5bd0gxfp1kt1pUN740mMpVAcH7uxpJjVfmw+kuGWtiz4S7CueagSg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.0", - "rmc-feedback": "^2.0.0" - } - }, - "rmc-list-view": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/rmc-list-view/-/rmc-list-view-0.11.5.tgz", - "integrity": "sha512-eMOC5394tLNawcdEEhF7boMpQgpjJGDdL5lS+LblAWdBec7Q4EYkUdnrKNbt+O9k5RGM6nSLAGZK5oB4FN85Lg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "fbjs": "^0.8.3", - "prop-types": "^15.5.8", - "warning": "^3.0.0", - "zscroller": "~0.4.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "rmc-notification": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rmc-notification/-/rmc-notification-1.0.0.tgz", - "integrity": "sha512-9sPxjltFvtRLt2v312Hu7OXwk53pHkBYgINRDmnJ3A5NF1qtJeCCcdN0Xr0fzJ6sbQvtGju822tWHdzYA9u7Vw==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "prop-types": "^15.5.8", - "rc-animate": "2.x", - "rc-util": "^4.0.4" - }, - "dependencies": { - "rc-util": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", - "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "prop-types": "^15.5.10", - "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0" - } - } - } - }, - "rmc-nuka-carousel": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rmc-nuka-carousel/-/rmc-nuka-carousel-3.0.1.tgz", - "integrity": "sha512-w2EPTERMUUZqcUSKFuejjin7xsMlhrLrtS0A/igTXpFJGq3kemDKcRi7q3pSYDuZBHYBl5iV4UqsLLkjdFtrYA==", - "requires": { - "exenv": "^1.2.0", - "raf": "^3.3.2" - } - }, - "rmc-picker": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rmc-picker/-/rmc-picker-5.0.10.tgz", - "integrity": "sha512-KZ70+WjcaZHnG5GyCxWCPFWAZ12s6NqyrbW73LeqH0WEqaTMMs0sOrk2f4mQAZ/CGT0XcFN6VZLw7Ozoxfn7LA==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "rmc-dialog": "^1.1.1", - "rmc-feedback": "^2.0.0" - } - }, - "rmc-pull-to-refresh": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/rmc-pull-to-refresh/-/rmc-pull-to-refresh-1.0.13.tgz", - "integrity": "sha512-iYLsURiR7G/sKmRA6p2kq6ZXicn7Hyeo6VQFljssV1eMW+fzDgihhaz0kv5mza0f88vphGJvjOihT9E6+xGb6Q==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5" - } - }, - "rmc-steps": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rmc-steps/-/rmc-steps-1.0.1.tgz", - "integrity": "sha512-8ijtwp4D1CYTtI2yerXJYqCv+GQbiBc9T12nrFngd/vM0y+58CnznGphTAueF6IWf7qbxBwcjTrcFgg7bP2YGA==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "^2.2.3" - } - }, - "rmc-tabs": { - "version": "1.2.29", - "resolved": "https://registry.npmjs.org/rmc-tabs/-/rmc-tabs-1.2.29.tgz", - "integrity": "sha512-wiJS9WSJi9JH9GQO+FqncX+zaHP31qHa/S8nDW9UXUx0qbCX294QcJEnvfB+WmsfUws7rXjs6sOQp5EDiObnHg==", - "requires": { - "babel-runtime": "6.x", - "rc-gesture": "~0.0.18" - } - }, - "rmc-tooltip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rmc-tooltip/-/rmc-tooltip-1.0.1.tgz", - "integrity": "sha512-fSDArf2BlMVrHExmBiqb2TkCRJHshvXFJQ/7tMraLellwaJLNiwrxtWpW329k3S+zTtoVG8UxFS1TjBGEsMzRg==", - "requires": { - "babel-runtime": "6.x", - "rmc-trigger": "1.x" - } - }, - "rmc-trigger": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/rmc-trigger/-/rmc-trigger-1.0.12.tgz", - "integrity": "sha512-AccQniX7PX7Pm8hBhHEsnf3JU6CA61Xc7fAt2WbO+oXrGaI/jqN8C3COhhOXG54S5iTOjLS26j858zshwAxR9A==", - "requires": { - "babel-runtime": "6.x", - "rc-animate": "2.x", - "rc-util": "4.x", - "rmc-align": "~1.0.0" - }, - "dependencies": { - "rc-util": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", - "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "prop-types": "^15.5.10", - "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0" - } - } - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "requires": { - "xmlchars": "^2.1.1" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "scroll-into-view-if-needed": { - "version": "2.2.28", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.28.tgz", - "integrity": "sha512-8LuxJSuFVc92+0AdNv4QOxRL4Abeo1DgLnGNkn1XlaujPH/3cCFz3QI60r2VNu4obJJROzgnIUw5TKQkZvZI1w==", - "requires": { - "compute-scroll-into-view": "^1.0.17" - } - }, - "seamless-immutable": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.4.tgz", - "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "optional": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socket.io-client": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-3.0.4.tgz", - "integrity": "sha512-qMvBuS+W9JIN2mkfAWDCxuIt+jpIKDf8C0604zEqx1JrPaPSS6cN0F3B2GYWC83TqBeVJXW66GFxWV3KD88n0Q==", - "requires": { - "@types/component-emitter": "^1.2.10", - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~4.1.0", - "engine.io-client": "~4.0.0", - "parseuri": "0.0.6", - "socket.io-parser": "~4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socket.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.2.tgz", - "integrity": "sha512-Bs3IYHDivwf+bAAuW/8xwJgIiBNtlvnjYRc4PbXgniLmcP1BrakBoq/QhO24rgtgW7VZ7uAaswRGxutUnlAK7g==", - "requires": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.1.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "store": { - "version": "2.0.12", - "resolved": "https://registry.yarnpkg.com/store/-/store-2.0.12.tgz", - "integrity": "sha1-jFNOKguDH3K3X8XxEZhXxE711ZM=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "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=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/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", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", - "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timeago.js": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/timeago.js/-/timeago.js-4.0.2.tgz", - "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" - }, - "tlds": { - "version": "1.216.0", - "resolved": "https://registry.yarnpkg.com/tlds/-/tlds-1.216.0.tgz", - "integrity": "sha512-y9A+eMRKLdAOclcFRTk3durpvCWiEdWcQhCOopCO654pckH9+o5Z5VgBsTTAFqtyxB8yFRXSG1q7BCCeHyrm0w==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.yarnpkg.com/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", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tween-functions": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", - "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8=" - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "umi": { - "version": "3.4.20", - "resolved": "https://registry.npmjs.org/umi/-/umi-3.4.20.tgz", - "integrity": "sha512-bmpE0UQXULw98VND7jzuV0AmC00vBP+jiRH5O5XajuH+cisstu4f1lDsGDfZ0HbMB3go9ELE66UIeLiWkaGqHA==", - "dev": true, - "requires": { - "@umijs/bundler-webpack": "3.4.20", - "@umijs/core": "3.4.20", - "@umijs/deps": "3.4.20", - "@umijs/preset-built-in": "3.4.20", - "@umijs/runtime": "3.4.20", - "@umijs/types": "3.4.20", - "@umijs/utils": "3.4.20", - "react": "16.x", - "react-dom": "16.x", - "v8-compile-cache": "2.3.0" - } - }, - "umi-request": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/umi-request/-/umi-request-1.3.5.tgz", - "integrity": "sha512-PqGz1mbLTkLjvL7ovM5Tmx/ChfY819T6P6VIsp4n15Lldn9Q85VYil4WuHSPpnur7I0thbWBuMnfLY7j5QWstg==", - "requires": { - "isomorphic-fetch": "^2.2.1", - "qs": "^6.9.1" - } - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "use-subscription": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", - "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "optional": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", - "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack-chain": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", - "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" - }, - "dependencies": { - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "dev": true - } - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "zscroller": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/zscroller/-/zscroller-0.4.8.tgz", - "integrity": "sha512-G5NiNLKx2+QhhvZi2yV1jjVXY50otktxkseX2hG2N/eixohOUk0AY8ZpbAxNqS9oJS/NxItCsowupy2tsXxAMw==", - "requires": { - "babel-runtime": "6.x" - } - } - } -} diff --git a/packages/comty/package.json b/packages/comty/package.json deleted file mode 100644 index 0500b8e6..00000000 --- a/packages/comty/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "comty", - "version": "0.12.8", - "description": "An prototype of a social network", - "author": "RageStudio", - "license": "LGPL-2.1", - "types": "index.d.ts", - "scripts": { - "start": "umi dev", - "build": "umi build", - "update:deps": "yarn upgrade-interactive --latest" - }, - "dependencies": { - "@icons-pack/react-simple-icons": "^3.8.0", - "@lingui/react": "^3.3.0", - "@types/lodash": "4.14.168", - "@umijs/preset-react": "1.8.7", - "antd": "4.15.5", - "axios": "^0.21.1", - "chart.js": "^2.9.4", - "classnames": "^2.2.6", - "colors": "^1.4.0", - "concat-stream": "^2.0.0", - "cookie_js": "^1.4.0", - "cryptr": "^6.0.2", - "dotenv": "^8.2.0", - "enquire-js": "^0.2.1", - "feather-reactjs": "^2.0.13", - "howler": "^2.2.1", - "html2canvas": "^1.0.0-rc.7", - "jsonwebtoken": "^8.5.1", - "less-vars-to-js": "^1.3.0", - "localforage": "^1.7.4", - "lodash": "^4.17.21", - "moment": "^2.28.0", - "path-to-regexp": "^6.1.0", - "platform": "^1.3.6", - "react-animations": "^1.0.0", - "react-color": "^2.19.3", - "react-dazzle": "^1.4.0", - "react-draggable": "^4.4.3", - "react-emoji": "^0.5.0", - "react-google-recaptcha": "^2.0.1", - "react-helmet": "^6.1.0", - "react-linkify": "^1.0.0-alpha", - "react-perfect-scrollbar": "^1.5.8", - "react-redux": "^7.2.2", - "react-resizable": "^1.11.0", - "react-reveal": "^1.2.2", - "react-rnd": "^10.2.3", - "react-virtualized": "^9.21.2", - "request": "^2.88.2", - "socket.io-client": "^3.0.4", - "stack-trace": "0.0.10", - "store": "^2.0.12", - "timeago.js": "^4.0.2" - }, - "devDependencies": { - "@lingui/babel-preset-react": "^2.9.2", - "@lingui/cli": "^3.3.0", - "@lingui/loader": "^3.3.0", - "@types/node": "^14.14.20", - "concurrently": "^5.3.0", - "cross-env": "^7.0.3", - "umi": "3.4.20" - } -} diff --git a/packages/comty/plugins/index.js b/packages/comty/plugins/index.js deleted file mode 100644 index 0bae7ffd..00000000 --- a/packages/comty/plugins/index.js +++ /dev/null @@ -1,21 +0,0 @@ -const http = require('http') -const vm = require("vm") -const concat = require("concat-stream") -const async = require("async") - -export function http_require(url, callback) { - http.get(url, (res) => { - res.setEncoding('utf8') - res.pipe(concat({encoding: 'string'}, function(data) { - callback(null, vm.runInThisContext(data)) - })) - }) -} - -export function usePlugins(array, callback){ - async.map(array, http_require, function(err, results) { - if(callback){ - callback(err, results) - } - }) -} \ No newline at end of file diff --git a/packages/comty/public/dark_full_logo.svg b/packages/comty/public/dark_full_logo.svg deleted file mode 100644 index 78e90e9a..00000000 --- a/packages/comty/public/dark_full_logo.svg +++ /dev/null @@ -1 +0,0 @@ -BalckComtyNG-Logo \ No newline at end of file diff --git a/packages/comty/public/dark_logo.svg b/packages/comty/public/dark_logo.svg deleted file mode 100644 index ef799d4a..00000000 --- a/packages/comty/public/dark_logo.svg +++ /dev/null @@ -1 +0,0 @@ -black_icon_new2019_black \ No newline at end of file diff --git a/packages/comty/public/favicon.ico b/packages/comty/public/favicon.ico deleted file mode 100644 index ad1b1170..00000000 Binary files a/packages/comty/public/favicon.ico and /dev/null differ diff --git a/packages/comty/public/favicon.png b/packages/comty/public/favicon.png deleted file mode 100644 index 0f5ca319..00000000 Binary files a/packages/comty/public/favicon.png and /dev/null differ diff --git a/packages/comty/public/full_logo.svg b/packages/comty/public/full_logo.svg deleted file mode 100644 index cc7477fb..00000000 --- a/packages/comty/public/full_logo.svg +++ /dev/null @@ -1 +0,0 @@ -ComtyNG-Logo \ No newline at end of file diff --git a/packages/comty/public/logo.svg b/packages/comty/public/logo.svg deleted file mode 100644 index cda37e29..00000000 --- a/packages/comty/public/logo.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/comty/schemas/badges_list.json b/packages/comty/schemas/badges_list.json deleted file mode 100644 index c676da36..00000000 --- a/packages/comty/schemas/badges_list.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - {"id": "alpha_test","title": "Alpha Tester","color": "green","icon": "Bug","tip": "Oh yeah!"}, - {"id": "nsfw_flag","title": "NSFW","color": "volcano","require": "nsfw_flag","tip": "NSFW"}, - {"id":"pro","title":"CPRO™","color":"purple","require":"pro","icon":"RocketOutlined","tip":"CPRO™"}, - {"id":"dev","title":"DEVELOPER","color":"default","require":"dev","icon":"GitBranch","tip":"DEVELOPER"}, - {"id":"professional_retarder","title":"Professional Retarder","color":"gold","require":"","icon":"SmileOutlined","tip":"hump...."}, - {"id":"el_walter_pro","title":"Pro Chikito","color":"#a0d911","require":"","icon":"🐱‍🐉🧜‍♀️","tip":"Chikito"}, - {"id":"patreon","title":"Patreon Member","color":"","require":"","icon":"Patreon","tip":"GoodBoy!"} -] - diff --git a/packages/comty/schemas/contextMenu.json b/packages/comty/schemas/contextMenu.json deleted file mode 100644 index 71f24f6b..00000000 --- a/packages/comty/schemas/contextMenu.json +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - "key": "inspect_element", - "title": "Inspect", - "icon": "Command", - "require": "embedded", - "params": { - "onClick": false - } - } -] \ No newline at end of file diff --git a/packages/comty/schemas/links.json b/packages/comty/schemas/links.json deleted file mode 100644 index 1b45ace7..00000000 --- a/packages/comty/schemas/links.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "github":"https://github.com/srgooglo/comty", - "trellojoin": "https://trello.com/invite/b/UbwvlG1I/2bc02725b9b210d2e9e9a82c5040b895/comty-development", - "patreon": "https://www.patreon.com/rstudio" -} \ No newline at end of file diff --git a/packages/comty/schemas/post_options.json b/packages/comty/schemas/post_options.json deleted file mode 100644 index 694d162a..00000000 --- a/packages/comty/schemas/post_options.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - {"key":"pro_boost","icon":"RocketOutlined","type":"switch","title":"CPRO™ Boost","description":"","require":"pro","value":false}, - {"key":"allow_comments","icon":"CommentOutlined","type":"switch","title":"Allow Comments","description":"","require":"","value":true} -] \ No newline at end of file diff --git a/packages/comty/schemas/settings_general.json b/packages/comty/schemas/settings_general.json deleted file mode 100644 index 06866df4..00000000 --- a/packages/comty/schemas/settings_general.json +++ /dev/null @@ -1,37 +0,0 @@ -[ - { - "id": "session_noexpire", - "icon": "Watch", - "type": "Switch", - "title": "No expire session", - "description": "Force the app to not expire any session" - }, - { - "id": "search_ontype", - "icon": "CornerDownRight", - "type": "Switch", - "title": "Auto search on input", - "description": "Search automaticly when type something" - }, - { - "id": "post_hidebar", - "icon": "Menu", - "type": "Switch", - "title": "Auto hide postbar", - "description": "Hide post actions bar when loose focus" - }, - { - "id": "post_autoposition", - "icon": "AlignCenter", - "type": "Switch", - "title": "Center on click", - "description": "Center posts element when then is clicked" - }, - { - "id": "verbosity", - "icon": "Terminal", - "type": "Switch", - "title": "Verbosity", - "description": "Show all development logs of the application" - } -] diff --git a/packages/comty/schemas/sidebar_menu.json b/packages/comty/schemas/sidebar_menu.json deleted file mode 100644 index 5c9248a9..00000000 --- a/packages/comty/schemas/sidebar_menu.json +++ /dev/null @@ -1,92 +0,0 @@ -[ - { - "id": "main", - "icon": "Home", - "title": "Main", - "attributes": { - "require": "login", - "desktop": false - } - }, - { - "id": "explore", - "title": "Explore", - "icon": "Compass" - }, - { - "id": "saves", - "title": "Saves", - "icon": "Bookmark", - "attributes": { - "require": "login", - "mobile": false - } - }, - { - "id": "messages", - "title": "Messages", - "icon": "MessageSquare", - "attributes": { - "require": "login" - } - }, - { - "id": "rooms", - "title": "Rooms", - "icon": "Box", - "attributes": { - "require": "login" - } - }, - { - "id": "workshop", - "title": "Workshop", - "icon": "Package", - "attributes": { - "require": "login" - } - }, - { - "id": "streams", - "title": "Streams", - "icon": "Tv", - "attributes": { - "require": "login" - } - }, - { - "id": "debug", - "title": "Debug", - "icon": "Tool", - "attributes": { - "position": "bottom", - "require": "dev" - } - }, - { - "id": "settings", - "title": "Settings", - "icon": "Settings", - "attributes": { - "position": "bottom" - } - }, - { - "id": "logout", - "title": "Logout", - "icon": "LogOut", - "attributes": { - "position": "bottom", - "require": "login" - } - }, - { - "id": "login", - "title": "Signin", - "icon": "LogIn", - "attributes": { - "position": "bottom", - "require": "guest" - } - } -] \ No newline at end of file diff --git a/packages/comty/schemas/theme_settings.json b/packages/comty/schemas/theme_settings.json deleted file mode 100644 index 56064c1c..00000000 --- a/packages/comty/schemas/theme_settings.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "id": "backgroundImage", - "icon": "Image", - "title": "Background", - "description": "Change the background of the app" - }, - { - "id": "overlay", - "icon": "Sidebar", - "title": "Overlay", - "description": "Description blah blah" - }, - { - "id": "color", - "icon": "Droplet", - "title": "Colors", - "description": "Texts, Buttons, Sliders ...etc" - }, - { - "id": "text", - "icon": "FontColorsOutlined", - "title": "Text", - "description": "Sizes, Fonts" - }, - { - "id": "sounds", - "icon": "Volume2", - "title": "Sounds", - "description": "BlipBlopBLup" - }, - { - "id": "darkmode", - "icon": "Moon", - "title": "Dark Mode", - "description": "Yeaah, no more daying" - } -] \ No newline at end of file diff --git a/packages/comty/src/components/About/index.js b/packages/comty/src/components/About/index.js deleted file mode 100644 index 927de12f..00000000 --- a/packages/comty/src/components/About/index.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react' -import styles from './index.less' -import { clientInfo, GUID, package_json } from 'core' -import { Monitor, Package, Radio, Layers } from 'components/Icons' -import * as antd from 'antd' - -export default class App_About extends React.Component { - renderStableTag() { - return {clientInfo.buildStable? "Stable" : "Not Stable"} - } - render() { - return ( -
- - -

{clientInfo.siteName}

- {GUID} -
- {clientInfo.os.toString()} - v{clientInfo.version} - {clientInfo.packageStage} - Render with {clientInfo.layout} - {this.renderStableTag()} - -
-
- ) - } -} diff --git a/packages/comty/src/components/About/index.less b/packages/comty/src/components/About/index.less deleted file mode 100644 index eef5c428..00000000 --- a/packages/comty/src/components/About/index.less +++ /dev/null @@ -1,18 +0,0 @@ -.aboutWrapper { - margin: auto; - max-width: 70vw; - width: 450px; - vertical-align: middle; - position: relative; - background-color: rgba(73, 72, 72, 0.349); - - img { - width: 100%; - padding: 15px; - } -} - -.appName { - font-family: "Poppins", sans-serif; - font-size: 27px; -} \ No newline at end of file diff --git a/packages/comty/src/components/CardComponent/index.tsx b/packages/comty/src/components/CardComponent/index.tsx deleted file mode 100644 index 0cebeb6c..00000000 --- a/packages/comty/src/components/CardComponent/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react' -import * as antd from 'antd' -import { LoadingOutlined } from 'components/Icons' - -interface CardComponent_props { - style: object; - type: string; - children: any; -} - -const CardComponent = (props: CardComponent_props) => { - let frag; - const rd_error = - const rd_loading = - - if (props.type == "error") frag = (rd_error) - if (props.type == "skeleton") frag = (rd_loading) - if (!props.type) frag = (props.children) - - return( -
- {frag} -
- ) -} - -CardComponent.defaultProps = { - style: null, - type: null, - children:

Empty

-} - -export default CardComponent \ No newline at end of file diff --git a/packages/comty/src/components/FloatComponent/index.tsx b/packages/comty/src/components/FloatComponent/index.tsx deleted file mode 100644 index ed72754e..00000000 --- a/packages/comty/src/components/FloatComponent/index.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { verbosity } from '@nodecorejs/utils' -import { XCircle } from 'components/Icons' -import ReactDOM from 'react-dom' -import * as antd from 'antd' -import React from 'react' -import { Rnd } from 'react-rnd' -import { getDvaApp } from 'umi' -import { Provider } from 'react-redux' - -const renderDiv = document.createElement('div') -class FloatComponent extends React.Component { - handleClose() { - Destroy() - } - - render() { - const renderProps = this.props.renderBox ?? { } - const defaultBoxWidth = renderProps.width ?? 500 - const defaultBoxHeight = renderProps.height ?? 600 - return ( - -
-
- -
-
- {this.props.title ?? null} -
-
- {this.props.children} -
- - ) - } -} - -export function Destroy() { - verbosity.log('destroying') - const unmountResult = ReactDOM.unmountComponentAtNode(renderDiv) - if (unmountResult && renderDiv.parentNode) { - renderDiv.parentNode.removeChild(renderDiv) - } -} - - -export function Open(props) { - const dvaApp = getDvaApp() - const divId = props.id ?? "floatComponent" - const MountParent = document.getElementById("root") - const thisChild = document.getElementById(divId) - - verbosity.log(props) - - if (thisChild) { - MountParent.removeChild(thisChild) - } - - let RenderComponent = - MountParent.appendChild(renderDiv).setAttribute('id', divId) - ReactDOM.render({RenderComponent}, renderDiv) -} - -export default Open \ No newline at end of file diff --git a/packages/comty/src/components/Icons/custom.js b/packages/comty/src/components/Icons/custom.js deleted file mode 100644 index c1d9be1b..00000000 --- a/packages/comty/src/components/Icons/custom.js +++ /dev/null @@ -1,13 +0,0 @@ -const marginedStyle = { width: "1em", height: "1em", marginRight: "10px", verticalAlign: "-0.125em" } - -export const verifiedBadge = () => -export const lightningBolt = () => -export const sparkles = () => -export const statusOnline = () => -export const fingerprint = () => -export const colorSwatch = () => -export const collection = () => -export const cubeTransparent = () => -export const keyRound = () => -export const searchCircles = () => -export const template = () => \ No newline at end of file diff --git a/packages/comty/src/components/Icons/index.js b/packages/comty/src/components/Icons/index.js deleted file mode 100644 index 72af797d..00000000 --- a/packages/comty/src/components/Icons/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from 'feather-reactjs' -export * from '@ant-design/icons' -export * from './custom' -export * from '@icons-pack/react-simple-icons' diff --git a/packages/comty/src/components/Invalid/index.js b/packages/comty/src/components/Invalid/index.js deleted file mode 100644 index 6537e0c6..00000000 --- a/packages/comty/src/components/Invalid/index.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import styles from './index.less' -import errNumbers from 'config/handlers/numToError.js' -import { Meh } from 'components/Icons' - -const InvalidSkeleton = (props) => { - return( - - - - Sorry but, something did not work as it should... - - - ) -} - -const InvalidSession = (props) => { - return( -
- -
- ) -} - -const InvalidIndex = (props) => { - return( -
- - Sorry but, We could not index this {props.messageProp1} - -
- ) -} - -const Custom = (props) => { - return( -
- - {props.message} - -
- ) -} - -export default class Invalid extends React.Component{ - render(){ - const Components = { - SESSION_INVALID: , - INVALID_INDEX: , - skeleton: , - custom: - } - const { type, typeByCode } = this.props - if (type != null || typeByCode != null) { - let tmpType = null - - type? tmpType = type : null - typeByCode? tmpType = errNumbers[typeByCode] : null - - if (Components[tmpType] != null) { - return Components[tmpType] - } - - } - return } - title="A function called this component due to an error, but apparently it also caused an error when configuring these parameters." - message="it seems that someone is not having a good day" - /> - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Invalid/index.less b/packages/comty/src/components/Invalid/index.less deleted file mode 100644 index f3318f34..00000000 --- a/packages/comty/src/components/Invalid/index.less +++ /dev/null @@ -1,23 +0,0 @@ -.invalidSkeleton{ - :global{ - .ant-card{ - border-radius: 7px; - } - .ant-card-body{ - display: flex; - padding: 0; - } - .ant-skeleton{ - padding: 24px; - } - } -} - - -.floatCardWrapper{ - display: flex; - justify-content: center; - align-content: center; - align-items: center; - height: 100%; -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/ContextMenu/index.less b/packages/comty/src/components/Layout/ContextMenu/index.less deleted file mode 100644 index 94e5fc34..00000000 --- a/packages/comty/src/components/Layout/ContextMenu/index.less +++ /dev/null @@ -1,35 +0,0 @@ -.contextualMenu { - position: absolute; - background-color: rgba(36, 36, 36, 0.7); - border-radius: 4px; - padding: 10px 5px; - z-index: 1000; - width: 250px; - height: auto; - color: #e3e3e3; - display: flex; - flex-direction: column; - font-size: 14px; - user-select: none; - - > div{ - transition: all 100ms linear; - cursor: pointer; - display: flex; - - align-items: center; - border-radius: 4px; - padding: 0 0 0 10px; - color: #e3e3e3; - width: 100%; - height: 35px; - } - > div:hover{ - background-color: #e3e3e3; - color: rgba(36, 36, 36, 0.7); - } - > div:active{ - transform: scale(0.98); - filter: brightness(110%); - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/ContextMenu/index.tsx b/packages/comty/src/components/Layout/ContextMenu/index.tsx deleted file mode 100644 index 3945265a..00000000 --- a/packages/comty/src/components/Layout/ContextMenu/index.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { verbosity } from '@nodecorejs/utils' -import styles from './index.less' -import ReactDOM from 'react-dom' -import React from 'react' - -let onRend = false -const renderDiv = document.createElement('div') -export interface ContextMenuComponent_props { - renderList: any; - yPos: number; - xPos: number; - app: any; - dispatch: any; -} - -export class ContextMenuComponent extends React.PureComponent{ - listening: boolean - wrapperRef: any - eventListener: () => void - renderDiv: HTMLDivElement - state: any - - constructor(props:any){ - super(props) - this.state = { - renderList: null, - loading: true - } - - this.renderDiv = renderDiv - this.listening = false - this.setWrapperRef = this.setWrapperRef.bind(this) - this.handleClickOutside = this.handleClickOutside.bind(this) - - this.eventListener = () => { - document.addEventListener('click', this.handleClickOutside, false) - this.listening = true - } - } - - setWrapperRef(node){ - this.wrapperRef = node - } - - handleClickOutside(event) { - if (this.wrapperRef && !this.wrapperRef.contains(event.target)) { - this.listening = false - DestroyContextMenu() - document.removeEventListener('click', this.eventListener, false) - } - } - - filterArray(data: any[]) { - let tmp: any = [] - return new Promise(resolve => { - data.forEach(async (element: { require: string; }) => { - if (typeof(element.require) !== 'undefined') { - const validRequire = await window.requireQuery(element.require) - validRequire? tmp.push(element) : null - }else{ - tmp.push(element) - } - }) - resolve(tmp) - }) - } - - async queryMenu(data){ - this.setState({ renderList: await this.filterArray(data), loading: false }) - } - - handle(e:any, props:any){ - if(!e || typeof(e) == 'undefined') { - return false - } - typeof(e.onClick) !== 'undefined' && e.onClick ? e.onClick(props) : null - typeof(e.keepOnClick) !== 'undefined' && e.keepOnClick ? null : DestroyContextMenu() - } - - renderElements(){ - if (!Array.isArray(this.state.renderList)) { - return null - } - return this.state.renderList.map((e:any) => { - return( -
this.handle(e.params, this.props)} key={e.key}> - {e.icon}{e.title} -
- ) - }) - } - - componentDidMount(){ - if (this.props.renderList) { - this.queryMenu(this.props.renderList) - } - } - - componentDidUpdate(){ - !this.listening ? this.eventListener() : null - } - - render(){ - if (this.state.loading) { - return null - } - return ( -
- {this.renderElements()} -
- ) - } -} - -export function DestroyContextMenu(){ - verbosity.log('destroying') - const unmountResult = ReactDOM.unmountComponentAtNode(renderDiv) - if (unmountResult && renderDiv.parentNode) { - renderDiv.parentNode.removeChild(renderDiv) - onRend = false - } -} - -export function OpenContextMenu(props){ - verbosity.log(props) - const renderComponent = React.createElement(ContextMenuComponent, props) - if (onRend) { - DestroyContextMenu() - } - document.body.appendChild(renderDiv).setAttribute('id', 'contextMenu') - ReactDOM.render(renderComponent, renderDiv) - onRend = true -} - - -export default OpenContextMenu diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.js b/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.js deleted file mode 100644 index 5b0734be..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import styles from './__searchBar.less' -import { newSearch } from "core/models/overlay" - -export default class __searchBar extends React.Component { - state = { - value: '', - } - openSearcher = () => { - const { value } = this.state - if (value.length < 1) return false - if (value == /\s/) return false - newSearch({ keyword: value }); - } - onChange = e => { - const { value } = e.target - this.setState({ value: value }) - } - - handleKey = (e) => { - if (e.key == 'Enter') { - this.openSearcher() - } - } - render() { - return ( -
- -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.less b/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.less deleted file mode 100644 index 7d62a66a..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__searchBar.less +++ /dev/null @@ -1,33 +0,0 @@ -@import '~theme/index.less'; - -.search_bar { - height: 24px; - position: relative; - - input { - height: 100%; - width: 100%; - background-color: transparent; - border: 0!important; - outline: 0!important; - color: @__app_backgroundAccent; - padding: 0 0 0 48px; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23c1c7cd'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-size: 16px; - background-position: 0 48%; - font-family: @__app_secondaryFont; - font-weight: 600; - font-size: 15px; - &::placeholder { - color: @__app_backgroundAccent; - } - transition: all 150ms ease-in-out; - - } - - input:focus{ - background-position: 20px 48%; - transition: all 150ms ease-in-out; - } - } \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.js b/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.js deleted file mode 100644 index f58f2e03..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react' -import { Feather } from 'components' -import styles from './__suggestions.less' - -import {Card_Component} from '../index.js' - -export default class __suggestions extends React.Component{ - state = { - trendings: [], - loading: true - } - componentDidMount(){ - const { data } = this.props - if(data){ - this.setState({ trendings: data, loading: false }) - } - if(!data){ - this.setState({ loading: false }) - } - } - - render(){ - if (this.state.loading) return - return -
-

Suggestions

-
-
- } - - } \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.less b/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.less deleted file mode 100644 index 0a624396..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__suggestions.less +++ /dev/null @@ -1,4 +0,0 @@ - -.suggestions_wrapper{ - -} diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.js b/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.js deleted file mode 100644 index d63103c6..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { Feather } from 'components' -import styles from './__trendings.less' - -import {Card_Component} from '../index.js' - -export default class __trendings extends React.Component { - state = { - trendings: [], - loading: true - } - componentDidMount(){ - const { data } = this.props - if(data){ - this.setState({ trendings: data, loading: false }) - } - } - - render(){ - if (this.state.loading) return - return

Trending now

- -
- ( -
- #{item.tag} -

{item.trend_use_num} Posts

-
)} - /> -
- } - } \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.less b/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.less deleted file mode 100644 index 15daad06..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/cards/__trendings.less +++ /dev/null @@ -1,29 +0,0 @@ -@import '~theme/index.less'; - -.trendings{ - word-break: break-all; - padding: 0 5px 0 10px; - height: auto; - font-weight: 500; - - .hash{ - margin: 5px 0 3px; - cursor: pointer; - } - - span{ - margin: 0; - color: #2196F3; - font-size: 12px; - max-height: 35px; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - } - - p{ - color: #333; - font-size: 9px; - } - - } \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/index.js b/packages/comty/src/components/Layout/Overlay/components/index.js deleted file mode 100644 index 80501ac6..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Primary from './layout/Primary.tsx' - -export { - Primary -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/components/layout/Primary.tsx b/packages/comty/src/components/Layout/Overlay/components/layout/Primary.tsx deleted file mode 100644 index 29780e84..00000000 --- a/packages/comty/src/components/Layout/Overlay/components/layout/Primary.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import * as React from 'react' -import * as antd from 'antd' -import { LeftOutlined } from 'components/Icons' - -export interface overlay_primary_props { - y?: number; - getRef: React.Ref; - isMobile: boolean; - fragment: any; - mode: string; - closable: boolean; -} - -const renderExit = } - onClick={() => window.overlaySwap.close()} -> Back - -const overlay_primary = (props: overlay_primary_props) => { - const { element, mode, isMobile } = props - return ( -
- {props.mode === 'full' || props.mode === 'half' ? renderExit : null} - {element} -
- ) -} - -overlay_primary.defaultProps = { - mode: false, - element: null, - isMobile: false, - closable: true, - y: 0, -} - -export default overlay_primary \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Overlay/index.js b/packages/comty/src/components/Layout/Overlay/index.js deleted file mode 100644 index 9cfef2e7..00000000 --- a/packages/comty/src/components/Layout/Overlay/index.js +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react' -import { verbosity } from '@nodecorejs/utils' -import { connect } from 'umi' -import classnames from 'classnames' - -import { Primary } from './components' -import { objectToArrayMap } from '@nodecorejs/utils' - -const includeAllowedProps = [ "size" ] - -@connect(({ app }) => ({ app })) -export default class Overlay extends React.Component { - constructor(props) { - super(props) - this.state = { - loading: true, - } - this.setWrapperRef = this.setWrapperRef.bind(this) - this.handleClickOutside = this.handleClickOutside.bind(this) - this.keydownFilter = this.keydownFilter.bind(this) - - window.overlaySwap = this.swap - } - - swap = { - isOpen: () => { - return this.props.app.overlayActive - }, - close: () => { - this.props.dispatch({ - type: 'app/updateState', - payload: { - overlayActive: false, - overlayElement: null - }, - }); - }, - open: (payload) => { - if (!payload) return false; - verbosity.log('Dispatching fragment =>', payload) - this.props.dispatch({ - type: 'app/updateState', - payload: { - overlayActive: true, - overlayElement: payload - } - }) - } - } - - keydownFilter(event) { - if (event.keyCode === 27) { - this.swap.close() - } - } - - handleClickOutside(event) { - if (this.wrapperRef && !this.wrapperRef.contains(event.target)) { - this.swap.close() - } - } - - componentDidUpdate() { - if (this.props.app.overlayElement) { - document.addEventListener('keydown', this.keydownFilter, false) - document.addEventListener('mousedown', this.handleClickOutside) - } else { - document.removeEventListener('mousedown', this.handleClickOutside) - } - } - - setWrapperRef(node) { - this.wrapperRef = node; - } - - render() { - let props = {} - const { overlayElement, overlayActive } = this.props.app - - const isOnMode = (mode) => { - if (!overlayActive || typeof (overlayElement.mode) == "undefined") { - return false - } - return overlayElement.mode === mode ? true : false - } - - const renderElement = () => { - if (overlayElement && overlayActive) { - return - } - return null - } - - try { - objectToArrayMap(overlayElement).forEach((e) => { - if (includeAllowedProps.includes(e.key)) { - props[e.key] = e.value - } - }) - } catch (error) { - // terrible (⓿_⓿) - } - - return ( -
- {renderElement()} -
- ) - } -} diff --git a/packages/comty/src/components/Layout/Overlay/reducers.js b/packages/comty/src/components/Layout/Overlay/reducers.js deleted file mode 100644 index cdb28093..00000000 --- a/packages/comty/src/components/Layout/Overlay/reducers.js +++ /dev/null @@ -1,35 +0,0 @@ -import * as app from 'app' - -export async function post(id,callback){ - if(!id) return false - const payload = { post_id: id } - app.comty_post.get((err, response) => { - try { - return callback(JSON.parse(response)['post_data']) - } catch (error) { - console.log(error) - } - }, payload) -} - -export async function comments(id,callback){ - if(!id) return false - const payload = { post_id: id } - app.comty_post.get((err, response) => { - try { - return callback(JSON.parse(response)['post_comments']) - }catch (error) { - console.log(error) - } - }, payload) -} - -export function search(key,callback){ - if (!key) return false - - const payload = { key: key } - app.comty_search.keywords((err, response) => { - return callback(response) - }, payload) -} - diff --git a/packages/comty/src/components/Layout/RightSider/components/invalid/index.js b/packages/comty/src/components/Layout/RightSider/components/invalid/index.js deleted file mode 100644 index a66d03bc..00000000 --- a/packages/comty/src/components/Layout/RightSider/components/invalid/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { CardComponent } from 'components' - -export default () => { - return ( - - Invalid Component - - ) -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/RightSider/components/profileCard/index.js b/packages/comty/src/components/Layout/RightSider/components/profileCard/index.js deleted file mode 100644 index 59185280..00000000 --- a/packages/comty/src/components/Layout/RightSider/components/profileCard/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import router from 'core/libs/router' -import withConnector from 'core/libs/withConnector' -import { CardComponent } from 'components' - -@withConnector -export default class ProfileCard extends React.Component { - render() { - const { session_data, session_valid, session_uuid } = this.props.app - - if (session_valid) { - return( -
- router.goProfile(session_data["username"])} style={{ display: 'flex', lineHeight: '30px', wordBreak: 'break-all' }} > - -
- @{session_data.username} - #{session_uuid} -
-
-
- ) - } - return null - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/RightSider/components/searchBar/index.js b/packages/comty/src/components/Layout/RightSider/components/searchBar/index.js deleted file mode 100644 index dfb4c36c..00000000 --- a/packages/comty/src/components/Layout/RightSider/components/searchBar/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import styles from './index.less' -import { newSearch } from "core/models/overlay" - -export default class __searchBar extends React.Component { - state = { - value: '', - } - openSearcher = () => { - const { value } = this.state - if (value.length < 1) return false - if (value == /\s/) return false - newSearch({ keyword: value }); - } - onChange = e => { - const { value } = e.target - this.setState({ value: value }) - } - - handleKey = (e) => { - if (e.key == 'Enter') { - this.openSearcher() - } - } - render() { - return ( -
- -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/RightSider/components/searchBar/index.less b/packages/comty/src/components/Layout/RightSider/components/searchBar/index.less deleted file mode 100644 index 7d62a66a..00000000 --- a/packages/comty/src/components/Layout/RightSider/components/searchBar/index.less +++ /dev/null @@ -1,33 +0,0 @@ -@import '~theme/index.less'; - -.search_bar { - height: 24px; - position: relative; - - input { - height: 100%; - width: 100%; - background-color: transparent; - border: 0!important; - outline: 0!important; - color: @__app_backgroundAccent; - padding: 0 0 0 48px; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23c1c7cd'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-size: 16px; - background-position: 0 48%; - font-family: @__app_secondaryFont; - font-weight: 600; - font-size: 15px; - &::placeholder { - color: @__app_backgroundAccent; - } - transition: all 150ms ease-in-out; - - } - - input:focus{ - background-position: 20px 48%; - transition: all 150ms ease-in-out; - } - } \ No newline at end of file diff --git a/packages/comty/src/components/Layout/RightSider/index.js b/packages/comty/src/components/Layout/RightSider/index.js deleted file mode 100644 index d3dc6369..00000000 --- a/packages/comty/src/components/Layout/RightSider/index.js +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react' -import classnames from 'classnames' -import withConnector from 'core/libs/withConnector' -import { objectToArrayMap } from '@nodecorejs/utils' - -import InvalidComponent from './components/invalid' -import ProfileCard from './components/profileCard' -import SearchBar from './components/searchBar' - -const MapToComponent = { - profileCard: , - searchBar: -} - -// to do: add order by numeric range -let DefaultElements = [ - "searchBar", - "profileCard" -] - -@withConnector -export default class RightSider extends React.Component { - - state = { - fragments: [] - } - - renderElements() { - try { - return this.state.fragments.map((element) => { - return
- {element.fragment ?? null} -
- }) - } catch (error) { - console.log(error) - return - } - } - - componentDidMount() { - if (typeof (window.rightSidebar) == "undefined") { - window.RightSider = {} - } - window.RightSider.addFragment = (fragment) => { - let updated = this.state.fragments - updated.push(fragment) - this.setState({ fragments: updated }) - } - - DefaultElements.forEach((e) => { - window.RightSider.addFragment({ id: e, fragment: MapToComponent[e] }) - }) - - } - - render() { - return ( - - ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Sider/default/index.js b/packages/comty/src/components/Layout/Sider/default/index.js deleted file mode 100644 index 670eb769..00000000 --- a/packages/comty/src/components/Layout/Sider/default/index.js +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import * as Icons from 'components/Icons' -import styles from './index.less' -import classnames from 'classnames' -import { connect } from 'umi' -import { objectToArrayMap, queryObjectToString } from 'core' - -@connect(({ app }) => ({ app })) -export default class Sider_Default extends React.Component { - state = { - type: "desktop", - loading: true, - menus: null - } - - toogleCollapse() { - window.toogleSidebarCollapse() - } - - componentDidMount() { - this.setState({ menus: this.props.menus, loading: false }) - } - - renderMenus(data, position) { - if (!position) return null - return data.map(e => { - if (!e.attributes) e.attributes = {} - let componentPosition = e.attributes.position || "top" - - return componentPosition == position - ? ( - - {e.title} - - ) - : null - }) - } - - render() { - const { handleClickMenu } = this.props - if (this.state.loading) { - return null - } - return ( -
- { window.toogleSidebarCollapse() }} - collapsed={this.props.app.sidebar_collapsed || false} - trigger={null} - className={styles.left_sider_container} - width="175px" - style={{ flex: 'unset' }} - > -
{ handleClickMenu({ key: '' }) }} className={classnames(styles.left_sider_header, { [styles.emb]: this.props.app.embedded })}> - -
-
- - {this.renderMenus(this.state.menus, "top")} - - -
- - {this.renderMenus(this.state.menus, "bottom")} - -
-
-
-
- ) - } -} diff --git a/packages/comty/src/components/Layout/Sider/default/index.less b/packages/comty/src/components/Layout/Sider/default/index.less deleted file mode 100644 index f4e02b67..00000000 --- a/packages/comty/src/components/Layout/Sider/default/index.less +++ /dev/null @@ -1,147 +0,0 @@ -@import '~theme/index.less'; - - -.left_sider_wrapper { - -webkit-app-region: no-drag; - user-select: none; - border-color: transparent; - font-size: 15px; - font-family: @__app_secondaryFont; - font-weight: 600; - - width: 65%; - height: 100vh; - - z-index: 40; - float: left; - position: relative; - background-color: transparent; - backdrop-filter: blur(2px); - - :global { - .ant-layout-sider { - background-color: transparent; - float: right; - - .ant-menu { - font-weight: 700; - color: unset; - vertical-align: middle; - // margin: 0 0 0 5px; - // border-right: 0!important; - } - } - } -} - -.left_sider_header { - cursor: pointer; - margin: 15px 0 0 22px; - -webkit-user-drag: none; - .logotype{ - -webkit-app-region: no-drag; - max-height: 70px; - height: 35px; - } - - &.emb{ - margin: 5px 0 0 22px; - } - - &.logged{ - - } -} - -.left_sider_footer { - margin: 0 0 12px; - :global { - text-align: center; - bottom: 0; - position: absolute; - width: 100%; - .anticon{ - font-size: 15px!important; - } - .ant-menu-item{ - height: 35px!important; - margin-bottom: 0!important; - line-height: 30px; - } - } -} - -.left_sider_container { - border-right: transparent; - height: 100%; - z-index: 50; -} - -.left_sider_menuContainer { - height: 100%; - margin: 18px 0 8px; - - :global { - .ant-layout-sider-children { - display: flex; - flex-direction: column; - justify-content: space-between; - } - - .ant-menu-item { - -webkit-app-region: no-drag; - transition: @transition-ease-inout; - - border-radius: 4px 8px 8px 4px; - padding: 2px 0 2px 24px; - border-right: 0!important; - - text-align: left; - } - - .ant-menu-item:hover { - border-radius: 8px; - transform: translate(10px,0); - - backdrop-filter: blur(2px); - box-shadow: -2px 2px 1px 0 rgba(51, 51, 51, 0.13); - color: rgb(102, 102, 102); - } - - .ant-menu-item-selected { - background-color: unset; - // background: linear-gradient(90deg, rgb(255, 230, 0) 2%, rgba(255,255,255,0.5) 10%); - } - - .anticon { - font-size: @left_sider_sizeIcons; - } - - .ant-layout-sider-collapsed, .ant-menu-inline-collapsed { - .ant-menu-item { - > span{ - visibility: hidden; - } - } - .ant-menu-item:hover { - box-shadow: unset; - } - - } - - .ant-menu-item a { - color: @__app_color; - } - } -} - -.left_sider_menuItems { - background-color: transparent; - margin-bottom: 8px; - //width: 100%; - font-weight: 500; - - animation: fadein 0.5s; - - -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/Sider/index.js b/packages/comty/src/components/Layout/Sider/index.js deleted file mode 100644 index b7b96645..00000000 --- a/packages/comty/src/components/Layout/Sider/index.js +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react' -import config from 'config' -import { router } from 'core/libs' -import { connect } from 'umi' -import MenuList from 'schemas/sidebar_menu.json' - -import Sider_Mobile from './mobile' -import Sider_Default from './default' - -@connect(({ app, extended }) => ({ app, extended })) -class Sider extends React.Component { - state = { - loading: true, - menuAtrributes: [], - menus: [] - } - - handleClickMenu = e => { - const elementAtrributes = this.state.menuAtrributes[e.key] - - if (typeof (this.state.menuAtrributes[e.key]) !== "undefined") { - if (typeof (elementAtrributes.onClick) == "function") { - elementAtrributes.onClick() - } - } - - router.go(`/${e.key}`) // by default push to router - } - - async menuQuery(data) { - if (!data) return false - this.setState({ loading: true }) - - const filterArray = (data) => { - return new Promise(resolve => { - let menuMap = [] - let menuAtrributes = [] - data.forEach(async (element) => { - if (!element.attributes) { - element.attributes = {} - } - let validRequire = typeof (element.attributes.require) !== 'undefined' ? await window.requireQuery(element.attributes.require) : true - - if (validRequire) { - menuAtrributes[element.id] = element.attributes - menuMap.push(element) - } - }) - this.setState({ menuAtrributes }) - resolve(menuMap) - }) - } - - this.setState({ menus: await filterArray(data), loading: false }) - } - - componentDidMount() { - this.menuQuery(MenuList) - } - - filterMenusByType(type) { - let arrayResults = [] - this.state.menus.forEach((e) => { - if (typeof (e.attributes) !== "undefined") { - const isType = typeof (e.attributes[type]) !== "undefined" ? e.attributes[type] : true // Returns as valid by default if is not set - if (isType) { - arrayResults.push(e) - } - } - }) - return arrayResults - } - - renderByType(type) { - const sider_props = { handleClickMenu: this.handleClickMenu, logo: config.app.LogoPath } - const filteredMenus = this.filterMenusByType(type) - switch (type) { - case "desktop": { - return - } - case "mobile": { - return - } - default: { - return null // include invalid default - } - } - } - - - render() { - const { isMobile } = this.props - if (this.state.loading) return null - return this.renderByType(isMobile ? "mobile" : "desktop") - } -} - -export default Sider diff --git a/packages/comty/src/components/Layout/Sider/mobile/index.js b/packages/comty/src/components/Layout/Sider/mobile/index.js deleted file mode 100644 index 7cf5f3ba..00000000 --- a/packages/comty/src/components/Layout/Sider/mobile/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import styles from './index.less' - -export default class Sider_Mobile extends React.Component { - - renderMenus(data){ - return data.map(e => { - return {e.icon} - }) - } - - render() { - const { handleClickMenu, menus } = this.props - return ( -
- - - {this.renderMenus(menus)} - - -
- ) - } -} diff --git a/packages/comty/src/components/Layout/Sider/mobile/index.less b/packages/comty/src/components/Layout/Sider/mobile/index.less deleted file mode 100644 index 5c229c18..00000000 --- a/packages/comty/src/components/Layout/Sider/mobile/index.less +++ /dev/null @@ -1,45 +0,0 @@ -@import '~theme/index.less'; - -.left_sider_wrapper { - overflow: hidden!important; - position: absolute; - z-index: 500; - bottom: 0; - right: 0; - left: 0; - - height: 50px; - width: 100%; - - border-color: transparent; - font-size: 13px; - font-family: @__app_generalFont; - padding: 0 27px; - - :global { - .ant-layout-sider { - background-color: transparent; - height: 100%; - - .ant-menu-item {color: @left_sider_color;} - .anticon {font-size: @left_sider_sizeIcons;} - .ant-menu-item{margin: auto; padding: 0;} - - .ant-menu { - background-color: #2d2d2d; - height: 100%; - border-radius: 27px 27px 0 0; - padding: 0 27px; - display: flex; - } - - .ant-menu-horizontal { - line-height: 46px; - white-space: nowrap; - border: 0; - border-bottom: 0; - box-shadow: none; - } - } - } -} diff --git a/packages/comty/src/components/Layout/WindowNavbar/index.js b/packages/comty/src/components/Layout/WindowNavbar/index.js deleted file mode 100644 index c40fa160..00000000 --- a/packages/comty/src/components/Layout/WindowNavbar/index.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react' -import styles from './index.less' -import { Minus, X } from 'components/Icons' -import { connect } from 'umi'; - -@connect(({ app }) => ({ app })) -export default class WindowNavbar extends React.Component{ - handleMinimize(){ - this.props.dispatch({ - type: "app/ipcInvoke", - payload: { - key: "minimize-window" - } - }) - } - handleClose(){ - this.props.dispatch({ - type: "app/ipcInvoke", - payload: { - key: "hide-window" - } - }) - } - render(){ - if (!this.props.dispatch) return null - return( -
-
-
this.handleMinimize()} />
-
this.handleClose()}/>
-
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/WindowNavbar/index.less b/packages/comty/src/components/Layout/WindowNavbar/index.less deleted file mode 100644 index 13f74bb0..00000000 --- a/packages/comty/src/components/Layout/WindowNavbar/index.less +++ /dev/null @@ -1,48 +0,0 @@ -@import '~theme/index.less'; -@aumentSize: 10px; - -.navbar{ - -webkit-app-region: drag; - text-align: right; - - height: @__app_winavar_height; - width: 100%; - position: absolute; - z-index: 5000; - top: 0; - right: 0; - background-color: rgba(54, 54, 54, 0.1); - transition: all 150ms ease-in-out; -} - -.navbar:hover{ - background-color: rgba(54, 54, 54, 0.65); - height: calc(@__app_winavar_height + @aumentSize); -} - -.controls{ - -webkit-app-region: no-drag; - display: flex; - text-align: right; - float: right; - width: auto; - margin: auto; - height: 100%; - > div{ - padding: 0 14px; - svg{ - margin: 0!important; - padding: 0; - height: 100%; - } - } - > div:hover{ - background-color: rgba(54, 54, 54, 0.8); - color: #fdfdfd; - } - transition: all 150ms ease-in-out; -} - -.controls:hover{ - background-color: rgba(54, 54, 54, 0.705); -} \ No newline at end of file diff --git a/packages/comty/src/components/Layout/index.js b/packages/comty/src/components/Layout/index.js deleted file mode 100644 index 654137dc..00000000 --- a/packages/comty/src/components/Layout/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import Sider from './Sider' -import RightSider from './RightSider' -import Overlay from './Overlay' -import WindowNavbar from './WindowNavbar' -import ContextMenu from './ContextMenu/index.tsx' - -export { RightSider, Sider, Overlay, WindowNavbar, ContextMenu } diff --git a/packages/comty/src/components/ListedMenu/index.less b/packages/comty/src/components/ListedMenu/index.less deleted file mode 100644 index cc1c5ca8..00000000 --- a/packages/comty/src/components/ListedMenu/index.less +++ /dev/null @@ -1,94 +0,0 @@ -@import '~theme/index.less'; - -.main { - font-family: "Nunito", sans-serif; - margin: 20px 0 0; - display: flex; - width: 100%; - height: auto; - overflow: auto; - color: @__Global_layout_color; - background-color: #ffffff; - padding: 15px; - border-radius: 10px; - - :global { - .ant-list-item { - padding-top: 7px; - padding-bottom: 7px; - } - - .ant-list-split .ant-list-item { - border-bottom: 0; - } - - .ant-list-item-meta-title { - color: rgba(0, 0, 0, 0.733); - font-size: 14px; - } - } - - .menuList { - user-select: none; - width: 224px; - :global { - .ant-menu-inline { - color: @__Global_layout_color; - background-color: transparent; - border: none; - } - .ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected { - font-weight: bold; - } - } - } - - .menuContainer { - flex: 1; - padding-top: 8px; - padding-right: 40px; - padding-bottom: 8px; - padding-left: 40px; - - .title { - margin-bottom: 12px; - color: @__Global_layout_color; - font-weight: 500; - font-size: 20px; - line-height: 28px; - } - } - - &.inline{ - - } - - &.horizontal{ - flex-direction: column; - .menuList{ - padding: 15px; - width: 100%; - } - } - - &.vertical{ - - } - -} - - -@media screen and (max-width: @screen-md) { - .main { - flex-direction: column; - - .leftMenu { - width: 100%; - border: none; - } - - .right { - padding: 40px; - } - } -} diff --git a/packages/comty/src/components/ListedMenu/index.tsx b/packages/comty/src/components/ListedMenu/index.tsx deleted file mode 100644 index 4f09fecb..00000000 --- a/packages/comty/src/components/ListedMenu/index.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react' -import { Menu, Result } from 'antd' -import classnames from 'classnames' - -import styles from './index.less' -import { __proto__filterSchematizedArray } from 'core' - -export default class ListedMenu extends React.Component { - state = { - renderOptionTitle: true, - loading: true, - selectKey: '', - menus: [], - mode: this.props.mode ?? "inline" - } - - async queryMenu() { - this.setState({ loading: true }) - this.setState({ menus: await __proto__filterSchematizedArray(this.props.menuArray), loading: false }) - } - - getMenu() { - return this.state.menus.map(item => ( - - {item.icon} {item.title} - - )) - } - - selectKey = (key: any) => { - this.setState({ - selectKey: key, - }) - } - - renderChildren = () => { - let titlesArray: never[] = [] - this.state.menus.forEach(e => { titlesArray[e.key] = e }) - - const OptionTitle = () => { - if (this.state.renderOptionTitle) { - return
-

{titlesArray[this.state.selectKey].icon || null}{titlesArray[this.state.selectKey].title || null}

-
- } - return null - } - - if (this.state.selectKey && titlesArray[this.state.selectKey]) { - return <> - - {this.props.childrens[this.state.selectKey]} - - } else { - return ( - - ) - } - } - - componentDidMount() { - const { childrens, menuArray, defaultKey } = this.props - const keyIndex = new URLSearchParams(location.search).get('key') - - if (keyIndex && typeof (this.props.childrens[keyIndex]) !== "undefined") { - this.selectKey(keyIndex) - } else if (defaultKey != null) { - this.selectKey(defaultKey) - } - - if (this.props.renderOptionTitle != null) { - this.setState({ renderOptionTitle: this.props.renderOptionTitle }) - } - - if (childrens != null && menuArray != null) { - this.queryMenu() - } - } - - render() { - const { selectKey, loading } = this.state - const isMode = (e: string) => { - return this.state.mode === `${e}` - } - - if (loading) { - return <> - } - return ( -
-
-

- {this.props.icon ?? null} {this.props.title ?? "Menu"} -

- this.selectKey(key)} - > - {this.getMenu()} - -
-
{this.renderChildren()}
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Loader/index.js b/packages/comty/src/components/Loader/index.js deleted file mode 100644 index 602982f1..00000000 --- a/packages/comty/src/components/Loader/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import classNames from 'classnames' -import styles from './index.less' - -const Loader = (loading) => { - return ( -
-
-
-
-
-
-
-
-
-
-
- -
- - ) -} - - -export default Loader diff --git a/packages/comty/src/components/Loader/index.less b/packages/comty/src/components/Loader/index.less deleted file mode 100644 index b072bbba..00000000 --- a/packages/comty/src/components/Loader/index.less +++ /dev/null @@ -1,107 +0,0 @@ -@import '~theme/index.less'; - -.wrapper { - user-select: none; - position: absolute; - z-index: 1000; - right: 0; - bottom: 0; - width: auto; - height: 29px; - - margin: 30px; - background-color: #2d2d2dc2; - border-radius: 28px; - - &.end { - animation: unshow 0.8s linear; - .newloader>div { - animation: loader 0.8s linear; - } - opacity: 0; - display: none; - } - - .newloader { - transform: scale(0.28); - width: 54px; - height: 23px; - } - - .newloader>div { - width: 6px; - height: 20px; - position: absolute; - left: -10px; - bottom: 15px; - border-radius: 5px; - transform-origin: 10px 35px; - transform: rotate(0deg); - animation: loader 0.8s infinite; - } - - .newloader>div:nth-child(2) { - transform: rotate(45deg); - animation-delay: 0.1s; - } - - .newloader>div:nth-child(3) { - transform: rotate(90deg); - animation-delay: 0.2s; - } - - .newloader>div:nth-child(4) { - transform: rotate(135deg); - animation-delay: 0.3s; - } - - .newloader>div:nth-child(5) { - transform: rotate(180deg); - animation-delay: 0.4s; - } - - .newloader>div:nth-child(6) { - transform: rotate(225deg); - animation-delay: 0.5s; - } - - .newloader>div:nth-child(7) { - transform: rotate(270deg); - animation-delay: 0.6s; - } - - .newloader>div:nth-child(8) { - transform: rotate(315deg); - animation-delay: 0.7s; - } -} - -@keyframes loader { - 0% { - background: transparent; - left: -10px; - transform-origin: 10px 35px; - } - - 30% { - background: #fff; - } - - 100% { - background: transparent; - left: 10px; - transform-origin: -10px 35px; - } -} - -@keyframes unshow { - 0% { - opacity: 1; - display: block; - } - - 100% { - opacity: 0; - display: none; - } -} \ No newline at end of file diff --git a/packages/comty/src/components/MediaPlayer/index.js b/packages/comty/src/components/MediaPlayer/index.js deleted file mode 100644 index 3854396b..00000000 --- a/packages/comty/src/components/MediaPlayer/index.js +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react' -import classnames from 'classnames' -import styles from './index.less' - -export default class MediaPlayer extends React.PureComponent { - player() { - const { file } = this.props - let type - - const ImageExtensions = ['.png', '.jpg', '.jpeg', '.gif'] - const VideoExtensions = ['.mp4', '.mov', '.avi'] - const AudioExtensions = ['.mp3', '.ogg', '.wav'] - - const FilesAllowed = ImageExtensions.concat( - VideoExtensions, - AudioExtensions - ) - - for (const prop in FilesAllowed) { - if (file.includes(`${ImageExtensions[prop]}`)) { - type = 'image' - } - if (file.includes(`${VideoExtensions[prop]}`)) { - type = 'video' - } - if (file.includes(`${AudioExtensions[prop]}`)) { - type = 'audio' - } - } - - if (type == 'video') { - // const payload = {type: 'video', sources: [{src: file,}]} - // return ( - // - // ) - return ( - - ) - } - if (type == 'audio') { - return ( - - ) - } - if (type == 'image') { - return - } - } - render() { - return ( -
- {this.player()} -
- ) - } -} diff --git a/packages/comty/src/components/MediaPlayer/index.less b/packages/comty/src/components/MediaPlayer/index.less deleted file mode 100644 index eb853b44..00000000 --- a/packages/comty/src/components/MediaPlayer/index.less +++ /dev/null @@ -1,84 +0,0 @@ -.PlayerContainer { - width: 100%; - - img { - width: 100%; - overflow: hidden; - margin: auto; - } - - video { - max-height: 600px; - width: 100%; - overflow: hidden; - } - - audio { - width: 100%; - } - - - &.entire { - max-width: 52%; - max-height: 80%; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-70%, -50%); - - img { - object-fit: contain; - height: 100%; - width: 100%; - max-width: 52vw; - max-height: 80vh; - } - - audio { - height: 100%; - width: 100%; - } - - video { - object-fit: contain; - height: 100%; - width: 100%; - max-width: 52vw; - max-height: 80vh; - } - } - - &.mobile { - max-width: unset; - max-height: unset; - top: unset; - left: unset; - transform: unset; - - width: 100%; - position: relative; - height: 60vh; - display: flex; - - img { - object-fit: contain; - height: auto; - width: 100%; - max-width: unset; - max-height: unset; - } - - audio { - height: 100%; - width: 100%; - } - - video { - object-fit: contain; - height: auto; - width: 100%; - max-width: unset; - max-height: unset; - } - } -} diff --git a/packages/comty/src/components/Page/Page.less b/packages/comty/src/components/Page/Page.less deleted file mode 100644 index 1c0a5e54..00000000 --- a/packages/comty/src/components/Page/Page.less +++ /dev/null @@ -1,16 +0,0 @@ -@import '~theme/index.less'; - -.contentInner { - background: #fff; - padding: 24px; - box-shadow: @shadow-1; - min-height: ~'calc(100vh - 230px)'; - position: relative; -} - -@media (max-width: 767px) { - .contentInner { - padding: 12px; - min-height: ~'calc(100vh - 160px)'; - } -} diff --git a/packages/comty/src/components/Page/index.js b/packages/comty/src/components/Page/index.js deleted file mode 100644 index 97e100ce..00000000 --- a/packages/comty/src/components/Page/index.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import classnames from 'classnames'; -import styles from './Page.less'; - -export default class Page extends Component { - render() { - const { className, children, loading = false, inner = false } = this.props; - const loadingStyle = { - height: 'calc(100vh - 184px)', - overflow: 'hidden', - }; - return ( -
- {loading ? 'Loading' : ''} - {children} -
- ); - } -} - -Page.propTypes = { - className: PropTypes.string, - children: PropTypes.node, - loading: PropTypes.bool, - inner: PropTypes.bool, -}; diff --git a/packages/comty/src/components/ParamsList/index.js b/packages/comty/src/components/ParamsList/index.js deleted file mode 100644 index 26331254..00000000 --- a/packages/comty/src/components/ParamsList/index.js +++ /dev/null @@ -1,133 +0,0 @@ -import React from 'react'; -import * as antd from 'antd' -import { RefreshCw } from 'components/Icons' -import { objectToArrayMap } from '@nodecorejs/utils' -import { getCircularReplacer, decycle } from 'core' - -const serializeFlags = { - __cycle_flag: true // with id 0 -} - -function isFlagId(e, id) { - return serializeFlags[Object.keys(e)[id ?? 0]] -} - -const getErrorRender = (e, error) => { - return ( -
-
- This could not be rendered > ({e.key}) [{typeof (e.value)}] -
-
- - -
- {error.toString()} -
-
-
-
-
- ) -} - -const getDecoratorStr = (e, json) => { - try { - switch (typeof (e.value)) { - case "string": { - return `(${json.length}) characters` - } - case "object": { - if (e.value == null) { - return `Empty (null/undefined)` - } - if (isFlagId(e.value, 0)) { - return Cylic - } - if (typeof (e.value.length) !== "undefined") { - return `Lenght (${e.value.length})` - } - if (typeof (Object.keys(e.value).length) !== "undefined") { - return `Lenght (${Object.keys(e.value).length})` - } - return `Immeasurable (by error) (not valid object)` - } - case "array": { - return `Lenght (${e.value.length})` - } - case "boolean": { - return {e.value ? "true" : "false"} - } - case "number": { - return {e.value} - } - default: - return `Immeasurable / Invalid` - } - } catch (error) { - return Immeasurable (by error) - } -} - -const getContent = (e) => { - try { - switch (typeof (e.value)) { - case "string": { - return e.value - } - case "object": { - if (e.value == null) { - return `${e.value}` - } - if (isFlagId(e.value, 0)) { - return
- This cannot be rendered because a cylic has been detected -
- } - if (Object.keys(e.value).length > 0) { // trying create nested - return
- {DebugPanel(e.value)} -
- } - return JSON.stringify(e.value, getCircularReplacer()) - } - case "array": { - return JSON.stringify(e.value, getCircularReplacer()) - } - case "boolean": { - return `${e.value}` - } - default: - return `${e.value}` - } - } catch (error) { - return getErrorRender(e, error) - } -} - -const getType = (e) => { - if (e !== null && isFlagId(e, 0)) { - return `[loop]` - } - return `[${typeof (e)}]` -} - -export default function DebugPanel(data) { - if (!data) return false - return objectToArrayMap(decycle(data)).map(e => { - try { - const content = getContent(e) - return ( - - {getType(e.value)} {e.key} | {getDecoratorStr(e, content)} } > -
- {content} -
-
-
- ) - } catch (error) { - return getErrorRender(e, error) - } - }) -} \ No newline at end of file diff --git a/packages/comty/src/components/PostCard/components/like/index.js b/packages/comty/src/components/PostCard/components/like/index.js deleted file mode 100644 index 2cdaba23..00000000 --- a/packages/comty/src/components/PostCard/components/like/index.js +++ /dev/null @@ -1,96 +0,0 @@ -import React from 'react' -import styles from './index.less' -import * as core from 'core' -import classnames from 'classnames' -import { verbosity } from '@nodecorejs/utils' - -export default class LikeBtn extends React.Component { - state = { - hoveringCounter: false, - liked: this.props.liked, - count: this.props.count, - clicked: false, - } - - handleClick() { - let done = false - if (typeof (this.props.handleClick) !== "undefined") { - this.setState({ clicked: true }) - - this.props.handleClick((callback) => { - if (typeof (callback) !== "object") { - this.setState({ count: callback }) - } else { - verbosity.log(`Invalid response`) - this.setState({ clicked: false, liked: false }) - } - setTimeout(() => { - this.setState({ clicked: false, liked: !this.state.liked }) - }, 150) - done = true - }, setTimeout(() => { - if (!done) { - verbosity.log(`like click timeout!`) - this.setState({ clicked: false }) - } - }, 3000)) - - } else { - return false - } - } - - handleLeave() { - if (this.state.hoveringCounter) { - this.setState({hoveringCounter: false }) - } - } - - handleOver() { - if (!this.state.hoveringCounter) { - this.setState({hoveringCounter: true }) - } - } - - getDecoratorCount(count) { - return {this.state.hoveringCounter? `${count}` : core.abbreviateCount(new Number(count).toString())} - } - - render() { - const { liked, clicked, count } = this.state - return ( -
this.handleLeave()} onMouseOver={() => this.handleOver()}> - -
- - {this.getDecoratorCount(count)} - -
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/PostCard/components/like/index.less b/packages/comty/src/components/PostCard/components/like/index.less deleted file mode 100644 index 38c33f72..00000000 --- a/packages/comty/src/components/PostCard/components/like/index.less +++ /dev/null @@ -1,225 +0,0 @@ -@blur-transition-duration: 150ms; -@blurFilter-transition-duration: 150ms; - -.like_button, - .like_button:before, - .like_button:after { - position: relative; - box-sizing: border-box; - } - - .ripple, - .ripple:before, - .ripple:after { - position: relative; - box-sizing: border-box; - } - - .likesIndicator{ - cursor: default; - margin: auto; - position: absolute; - z-index: 12; - bottom: 0; - left: 0; - background-color: #fff; - border-radius: 0 12px 12px 0; - color: #333; - width: 52px; - height: fit-content; - transition: all 150ms ease-in-out; - transform: translate(30px, -4px); - padding: 5px 14px; - min-width: fit-content; - - &.hover{ - width: 90px; - } - text-align: center; - } - - .likeCounter { - font-family: "Poppins", sans-serif; - - opacity: 0; - transform: perspective(100px) translateZ(10px); - filter: blur(10px); - letter-spacing: 0; - - &.active { - opacity: 1; - //transform: perspective(100px) translateZ(0px); - filter: blur(0px); - - transition: opacity @blur-transition-duration linear, transform @blur-transition-duration linear, filter @blurFilter-transition-duration linear, letter-spacing @blur-transition-duration linear; - } - - &.past { - opacity: 0; - //transform: perspective(100px) translateZ(-10px); - filter: blur(1px); - letter-spacing: 0.15em; - transition: opacity @blur-transition-duration linear, transform @blur-transition-duration linear, filter @blurFilter-transition-duration linear, letter-spacing @blur-transition-duration linear; - } - } - - - .like_button { - --color-heart: #EA442B; - --easing: cubic-bezier(.7, 0, .3, 1); - --duration: .5s; - - font-size: 40px; - border: none; - border-radius: 50%; - background: white; - width: 1em; - height: 1em; - padding: 0; - margin: 0; - outline: none; - z-index: 13; - transition: transform var(--duration) var(--easing); - cursor: pointer; - - &:before { - z-index: -1; - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border-radius: inherit; - transition: inherit; - } - - &:after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #fff; - border-radius: inherit; - z-index: -1; - } - - - - - @keyframes depress { - - from, - to { - transform: none; - } - - 50% { - transform: translateY(5%) scale(0.9); - } - } - - @keyframes depress-shadow { - - from, - to { - transform: none; - } - - 50% { - transform: scale(0.5); - } - } - } - - .like_wrapper { - display: flex; - align-items: center; - justify-content: center; - z-index: 5; - - >* { - margin: auto; - grid-area: 1 / 1; - } - } - - .heart { - width: 100%; - height: 100%; - display: block; - - >path { - stroke: var(--color-heart); - stroke-width: 2; - transition: fill var(--duration) var(--easing); - fill: var(--color-heart); - } - - &.empty { - >path { - stroke: var(--color-heart); - stroke-width: 2; - transition: fill var(--duration) var(--easing); - fill: transparent; - } - } - - &.clickanim { - animation: heart-bounce var(--duration) var(--easing); - - @keyframes heart-bounce { - 40% { - transform: scale(0.7); - } - - 0%, - 80%, - 100% { - transform: scale(1); - } - } - } - - animation: none; - } - - .ripple { - position: absolute; - height: 100%; - width: 100%; - border-radius: 50%; - overflow: hidden; - z-index: 1; - - &:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: .4em solid var(--color-heart); - border-radius: inherit; - transform: scale(0); - } - - &.clickanim { - &:before { - animation: ripple-out var(--duration) var(--easing); - - @keyframes ripple-out { - from { - transform: scale(0); - } - - to { - transform: scale(5); - } - } - } - } - - } diff --git a/packages/comty/src/components/PostCard/index.js b/packages/comty/src/components/PostCard/index.js deleted file mode 100644 index d945dcb7..00000000 --- a/packages/comty/src/components/PostCard/index.js +++ /dev/null @@ -1,265 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import styles from './index.less' -import { MediaPlayer } from 'components' -import * as Icons from 'components/Icons' - -import { Clipboard, Aperture, FlagOutlined, MessageSquare, MoreOutlined, PushpinFilled, EllipsisOutlined, verifiedBadge } from 'components/Icons' -import * as core from 'core' -import Icon from '@ant-design/icons' -import classnames from 'classnames' -import { verbosity } from '@nodecorejs/utils' - -import settings from 'core/libs/settings' -import { router } from 'core/libs' -import LikeBtn from './components/like/index.js' -import { connect } from 'umi' -import { clipboard } from 'core/libs/browser' - -const { Meta } = antd.Card - -const defaultPayload = { - id: null, - post_time: null, - postText: null, - postFile: null, - publisher: null, - post_likes: null, - is_post_pinned: null, - is_liked: null, - post_comments: null, - get_post_comments: null, - postPinned: false, - postReported: false, - postBoosted: false, - ReportIgnore: false, -} - -const moreMenuList = [ - { - key: "save_post", - icon: "Save", - textEnable: "Save post", - textDisable: "Unsave post" - }, - { - key: "report_post", - icon: "AlertCircle", - text: "Report" - } -] - -const contextMenuList = [ - { - key: "inspect_element", - title: "Copy URL", - icon: , - params: { - onClick: (e) => { - clipboard.copyText(core.generatePostURI(e.id)) - } - } - }, - { - key: "screenshot", - title: "Save screenshot", - icon: , - params: { - itemProps: { - style: { color: "#40a9ff" } - }, - onClick: (e) => { - core.createScreenshotFromElement(document.getElementById(e.id)) - } - } - } -] - -@connect(({ app }) => ({ app })) -export default class PostCard extends React.PureComponent { - state = { - visibleMoreMenu: false, - payload: this.props.payload, - } - - elementRef = React.createRef() - - handleDispatchInvoke(key, payload) { - this.props.dispatch({ - type: "app/ipcInvoke", - payload: { key: key, payload: payload } - }) - } - - goElementById(id) { - if (settings("post_autoposition")) { - document.getElementById(id).scrollIntoView({ - behavior: "smooth", - block: "center", - inline: "center" - }) - } - } - - toogleMoreMenu() { - this.setState({ visibleMoreMenu: !this.state.visibleMoreMenu }) - } - - renderReportedPost() { - if (this.state.ReportIgnore) return null - return ( -
- -

It seems that this post has been reported

-

The content may be inappropriate or compromising

- { - this.setState({ ReportIgnore: true }) - }} - > - Ignore - -
- ) - } - - renderContent(payload) { - return ( -
- {payload.postText ? ( -
-

-

- ) : null} - {payload.postFile_full ? ( -
- -
- ) : null} -
- ) - } - - componentDidMount() { - window.contextMenu.addEventListener( - { - priority: 100, - onEventRender: contextMenuList, - ref: this.elementRef.current, - props: { id: this.state.payload.id } - } - ) - } - - handleLikeClick = (id, callback) => { - if (typeof (this.props.handleActions)) { - this.props.handleActions("like", id, (callbackResponse) => { - let updated = this.state.payload - if (callbackResponse.code == 200) { - - updated.is_liked = !this.state.payload.is_liked - updated.post_likes = callbackResponse.response.count ?? 0 - this.setState({ payload: updated }) - - if (typeof (callback) !== "undefined") { - callback(callbackResponse.response.count) - } - - } else { - verbosity.log(`Api error response ${callbackResponse.code}`) - } - }) - } else { - verbosity.log(`socket connection not available`) - } - } - - getMenuValue(id) { - return true // fetch from local state - } - - handleMenuClick(id) { - return true // mapToFunction - } - - renderMoreMenu() { - return moreMenuList.map((e) => { - return ( this.handleMenuClick(e.id)} key={e.id ?? ""}> - {React.createElement(Icons[e.icon])}{e.textDisable && e.textEnable? (this.getMenuValue(e.id) ? e.textEnable : e.textDisable) : e.title?? e.text ?? "Who knows"} - ) - }) - } - - render() { - const { - id, - post_time, - postText, - postFile, - publisher, - post_likes, - is_post_pinned, - is_liked, - post_comments, - get_post_comments - } = this.state.payload || defaultPayload - - const menuMore = ( - - {this.renderMoreMenu()} - - ) - - const actions = [ - { this.handleLikeClick(id, (response) => { callback(response) }) }} count={post_likes} liked={core.booleanFix(is_liked)} />, - 0 ? true : false}> - - , - ] - - return ( -
- { this.goElementById(this.state.payload.id) }} - actions={actions} - hoverable - > - {this.state.postReported ? this.renderReportedPost() : null} -
- - -
- } - title={ -
-

router.goProfile(publisher.username)} className={styles.titleUser}> - @{publisher.username} - {core.booleanFix(publisher.verified) ? () : null} - {core.booleanFix(publisher.nsfw_flag) ? ( NSFW ) : null} -

-
-
- - - -
- {core.booleanFix(is_post_pinned) ? () : null} -
-
- } - description={{post_time}} - bordered="false" - /> - {this.renderContent(this.state.payload)} -
- -
-
- - - ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/PostCard/index.less b/packages/comty/src/components/PostCard/index.less deleted file mode 100644 index d890bd11..00000000 --- a/packages/comty/src/components/PostCard/index.less +++ /dev/null @@ -1,234 +0,0 @@ -@import '~theme/index.less'; - -.post_card_flaggedWarning { - border-radius: @post_card_general_border-rd; - width: 100%; - text-align: center; - position: absolute; - z-index: 20; - background: @post_card_flaggedWarning_backgroud; - font-family: @__app_generalFont; - padding: @post_card_flaggedWarning_padding; - - :global { - .anticon { - font-size: @post_card_flaggedWarning_iconSize; - } - } -} - -.post_card_wrapper { - user-select: none; - box-shadow: @post_card_wrapper_shadow; - border-radius: @post_card_general_border-rd; - max-width: 510px; - min-width: 265px; - width: auto; - margin: 23px auto 50px; - - :global { - .ant-card-meta-detail>div:not(:last-child) { - margin: 0 - } - - .ant-card { - cursor: default; - - border-radius: @post_card_general_border-rd; - border: 0; - border-top: 1px solid #4646460c; - } - - .ant-card-body { - padding: 0; - } - - .ant-card-actions { - border-top: 0; - background: @post_card_wrapper_actions_backgroud; - height: 30px; - position: relative; - transition: opacity @__Global_Components_transitions_dur linear, position @__Global_Components_transitions_dur linear, transform @__Global_Components_transitions_dur linear; - border-radius: 0 0 10px 10px; - opacity: 0; - - &.showMode { - opacity: 1; - transform: translate(0, 15px); - } - } - - .ant-card-actions:hover { - opacity: 1; - transform: translate(0, 15px); - transition: opacity @__Global_Components_transitions_dur linear, position @__Global_Components_transitions_dur linear, transform @__Global_Components_transitions_dur linear; - } - - .ant-card-actions>li>.anticon { - font-size: 16px; - line-height: 22px; - width: 40px; - height: 40px; - background: @post_card_wrapper_actions_icon_backgroud; - border-radius: 23px; - } - - .ant-card-actions>li { - margin: -20px 0 0; - border-right: 0; - - .ant-badge-count { - width: 20px; - text-align: left; - - span { - font-size: 12px; - } - - .ant-scroll-number-only>p.ant-scroll-number-only-unit { - height: 20px; - width: 20px; - margin: 0; - line-height: 20px; - padding: 0 0 0 1px; - } - } - - span { - font-size: 16px; - line-height: 22px; - width: 40px; - height: 40px; - background: @post_card_wrapper_actions_icon_backgroud; - border-radius: 23px; - margin: auto; - } - - svg { - height: 20px; - width: 20px; - height: 100%; - vertical-align: middle; - } - #feather_icon{ margin-right: unset!important; } - } - } -} - -.post_include { - padding: 13px 0 5px; - transition: all 150ms linear; - - &.blur { - filter: blur(10px); - } -} - -.showMode { - :global { - ul { - opacity: 1 !important; - transform: translate(0, 15px); - } - } -} - -.post_card_title { - display: flex; - - h4 { - cursor: pointer; - } - -} - -.postAvatar { - position: absolute; - left: -8px; - top: -8px; - display: flex; -} - -.titleUser { - display: flex; - font-family: @__app_generalFont; - margin: 0 0 0 50px; -} - -.textAgo { - display: flex; - font-size: 10px; - margin: 0 0 0 53px; -} - -.PostTags { - float: right; - width: 100%; - z-index: 10; - - :global { - .anticon { - color: @post_card_wrapper_tags_color_default; - float: right; - margin: -0 6px 0 0; - font-size: 17px; - } - - } -} - -.post_card_content { - word-break: break-all; - display: flex; - border-radius: 3px; - margin: 23px 24px; - - h3 { - user-select: all; - font-family: @__app_generalFont; - color: @post_card_wrapper_post_content_color; - font-weight: @post_card_wrapper_post_content_weight; - font-size: @post_card_wrapper_post_content_fontSize; - letter-spacing: @post_card_wrapper_post_content_letterSpacing; - } -} - -.post_card_file { - display: flex; - margin: 23px 0 5px; - max-height: 600px; - overflow: hidden; - - h3 { - color: rgb(85, 85, 85); - font-weight: 470; - } -} - -.likebtn { - :global { - svg { - color: rgba(0, 0, 0, 0.45); - } - - svg:hover { - color: rgb(233, 35, 68); - transition: all 0.2s linear; - } - } -} - -.ellipsisIcon { - color: rgba(0, 0, 0, 0.45); - width: 100%; - position: absolute; - text-align: center; - margin: auto; - font-size: 30px; - transition: opacity 150ms linear; -} - -.ellipsisIcon:hover { - opacity: 0; - transition: opacity 150ms linear; -} diff --git a/packages/comty/src/components/PostCreator/index.js b/packages/comty/src/components/PostCreator/index.js deleted file mode 100644 index 3807ed00..00000000 --- a/packages/comty/src/components/PostCreator/index.js +++ /dev/null @@ -1,304 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { imageToBase64 } from 'core' -import * as Icons from 'components/Icons' -import styles from './index.less' -import { connect } from 'umi' -import config from 'config' -import { settings, newSetting } from 'core/libs/settings' - -const PrivacyList = [ - { - id: 0, - type: "any", - icon: "Globe", - decoratorText: "Share with everyone" - }, - { - id: 1, - type: "only_followers", - icon: "UserCheck", - decoratorText: "Share with people I follow" - }, - { - id: 2, - type: "only_follow", - icon: "Users", - decoratorText: "Share with people follow me" - }, - { - id: 3, - type: "private", - icon: "Shield", - decoratorText: "Dont share, only me" - }, - { - id: 4, - type: "anon", - icon: "EyeOff", - decoratorText: "Anonymous" - } -] - -@connect(({ app }) => ({ app })) -class PostCreator extends React.PureComponent { - state = { - maxFileSize: config.stricts.api_maxpayload, - maxTextLenght: config.stricts.post_maxlenght, - - renderValid: false, - loading: false, - - textLenght: config.stricts.post_maxlenght, - rawText: '', - posting: false, - postingResult: false, - privacity: 0, - - uploader: false, - uploaderFile: null, - uploaderFileOrigin: null, - } - - dropRef = React.createRef() - - ToogleUploader() { - this.setState({ uploader: !this.state.uploader }) - } - - handleDeleteFile = () => { - this.setState({ uploaderFile: null }) - } - - handleFileUpload = info => { - if (info.file.status === 'uploading') { - this.setState({ loading: true }) - } - if (info.file.status === 'done') { - this.setState({ uploaderFileOrigin: info.file.originFileObj, uploader: false }) - - imageToBase64(info.file.originFileObj, fileURL => { - this.setState({ uploaderFile: fileURL, loading: false }) - }) - } - } - - beforeUpload = file => { - const filter = - file.type === 'image/jpeg' || - file.type === 'audio/mp3' || - file.type === 'audio/wav' || - file.type === 'audio/ogg' || - file.type === 'image/png' || - file.type === 'image/jpg' || - file.type === 'image/gif' || - file.type === 'video/mp4' - if (!filter) { - antd.message.error(`${file.type} This file is not valid!`) - } - const maxsize = file.size / 1024 / 1024 < stricts.api_maxpayload - if (!maxsize) { - antd.message.error( - `Image must smaller than ${stricts.api_maxpayload} KB!` - ) - } - return filter && maxsize - } - - handleChanges = ({ target: { value } }) => { - this.setState({ - rawText: value, - textLenght: this.state.maxTextLenght - value.length, - }) - } - - handleKeysProgressBar() { - return this.state.textLenght <= (this.state.maxTextLenght / 100) * 30? 'exception' : 'active' - } - - handleDragIn = e => { - e.preventDefault() - e.stopPropagation() - - this.state.uploader? this.setState({ uploader: true }) : null - } - - handleDragOut = e => { - e.preventDefault() - e.stopPropagation() - - this.state.uploader? null : this.setState({ uploader: false }) - } - - componentDidMount() { - if (this.props.app.session_data) { - this.setState({renderValid: true}) - } - - // const _this = this - // $('body').bind('paste', function(je) { - // var e = je.originalEvent - // for (var i = 0; i < e.clipboardData.items.length; i++) { - // var item = e.clipboardData.items[i] - // if (item.type.indexOf('image') != -1) { - // //item. - // let a; - // a = item.getAsFile() - // _this.setState({ uploaderFileOrigin: a }) - // ReadFileAsB64(a, res => { - // _this.setState({ uploaderFile: res }) - // }) - // } else { - // // ignore not images - // } - // } - // }) - // let div = this.dropRef.current - // div.addEventListener('dragenter', this.handleDragIn) - // div.addEventListener('dragleave', this.handleDragOut) - } - - componentWillUnmount() { - // let div = this.dropRef.current - // div.removeEventListener('dragenter', this.handleDragIn) - // div.removeEventListener('dragleave', this.handleDragOut) - } - - canPost() { - const isTypedSomething = this.state.textLenght < this.state.maxTextLenght - const isUploadedFile = this.state.uploaderFile ? true : false - - return isUploadedFile || isTypedSomething - } - - renderShareOptions = () => { - return PrivacyList.map(e => { - if (!e) return null - return( - - {e.icon? React.createElement(Icons[e.icon]) : null} {e.decoratorText? e.decoratorText : "Bruh"} - - ) - }) - } - - render() { - const userData = this.props.app.session_data - const { textLenght, uploaderFile } = this.state - - const ShareOptionsMenu = () => { - return( - this.setState({ privacity: e.key })}> - {this.renderShareOptions()} - - ) - } - - const PostCreator_Uploader = () => { - return( -
- - - Drop your file here o click for upload - -
- ) - } - - const PostCreator_InputText = () => { - return( - <> -
- -
- -
- - ) : this.state.posting ? ( - - ) : ( - - ) - } - /> -
- - ) - } - - - if(!this.state.renderValid) return null - return ( -
- -
- {this.state.uploader ? : } -
-
- -
- {uploaderFile ? this.renderPostPlayer(uploaderFile) : null} - -
-
- ) - } -} -export default PostCreator \ No newline at end of file diff --git a/packages/comty/src/components/PostCreator/index.less b/packages/comty/src/components/PostCreator/index.less deleted file mode 100644 index 3bfffddb..00000000 --- a/packages/comty/src/components/PostCreator/index.less +++ /dev/null @@ -1,317 +0,0 @@ -@import '~theme/index.less'; - -.cardWrapper { - // box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); - border-radius: 7px; - max-width: 510px; - min-width: 265px; - width: auto; - margin: 7px auto 50px; - - :global { - textarea { - font-weight: 500; - resize: none; - outline: none !important; - border: 0 !important; - } - - textarea:focus { - outline: none !important; - border: 0 !important; - } - - textarea:hover { - outline: none !important; - border: 0 !important; - } - - .ant-card-meta-detail>div:not(:last-child) { - margin: 0 - } - - .ant-card { - border-radius: 7px; - border: 0; - border-top: 1px solid #4646460c; - } - - .ant-card-body { - padding: 5px 15px; - } - - .ant-card-actions { - border-top: 0; - background: #EBEBEB; - opacity: 0; - height: 30px; - position: relative; - transition: opacity 150ms linear, position 150ms linear, transform 150ms linear; - border-radius: 0 0 10px 10px; - } - - .ant-card-actions:hover { - opacity: 1; - transform: translate(0, 15px); - transition: opacity 150ms linear, position 150ms linear, transform 150ms linear; - } - - .ant-card-actions>li { - margin: -20px 0 0; - border-right: 0; - - i { - - vertical-align: middle; - height: 40px; - width: 40px; - background-color: #fff; - border-radius: 24px; - } - - svg { - height: 20px; - width: 20px; - height: 100%; - vertical-align: middle; - } - } - } -} - -.titleAvatar { - width: 45px; - height: 45px; - display: flex; - - :global { - img { - width: 45px; - height: 45px; - border-radius: 12px; - } - } -} - -.inputWrapper { - display: flex; - z-index: 10; - position: relative; - width: 100%; - padding: 18px 7px 0; - transition: height 150ms linear; - - :global { - .ant-btn-primary { - z-index: 10; - position: relative; - border-radius: 0 10px 10px 0; - height: 100%; - vertical-align: bottom; - border: none; - box-shadow: none; - } - - .ant-input { - z-index: 10; - position: relative; - border-color: transparent !important; - box-shadow: none; - border-radius: 3px 0 0; - height: 100%; - padding: 5px 10px; - transition: height 150ms linear; - width: 100%; - - } - - .ant-input:hover { - border-color: #1890ff; - } - - .ant-input-affix-wrapper { - height: 100%; - } - } -} - -.progressHandler { - z-index: 10; - position: relative; - margin: 0 7px; - - :global { - .ant-progress-bg { - border-radius: 0 0 10px 10px; - } - - .ant-progress-inner { - border-radius: 0 0 14px 14px; - width: calc(100% - 32px); - vertical-align: top; - } - } -} - -.postExtra { - width: 100%; - height: 100%; - position: relative; - margin: 0 0 40px; - svg { - vertical-align: -0.125em; - } - .shareWith { - color: rgb(53, 53, 53); - float: right; - font-size: 11px; - line-height: 30px; - } - - :global { - .MuiSvgIcon-root { - width: 1em; - height: 1em; - display: inline-block; - font-size: 18px; - transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; - flex-shrink: 0; - margin: 8px; - line-height: 1px; - user-select: none; - } - - .ant-btn .anticon { - transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); - margin: 8px; - } - - .ant-btn { - width: 35px; - height: 35px; - float: left; - padding: 0; - border-radius: 11px; - margin: 0 10px; - background-color: #eeeeee; - border-color: transparent; - } - - .ant-btn:hover { - border-color: transparent; - } - - } -} - -.uploader { - display: flex; - position: relative; - border-radius: 10px; - z-index: 30; - width: 100%; - height: 100%; - - span { - width: 100%; - } - - :global { - .ant-upload.ant-upload-drag { - background: #fafafa; - border: 1px dashed #d9d9d9; - border-radius: 12px; - transition: border-color 0.3s; - } - - .anticon svg { - display: inline-block; - font-size: 30px; - } - } -} - -.imagePreviewWrapper { - position: relative; - width: 100%; - height: 100%; - // top: -100px; - margin: 0 0 15px; - background-color: #eeeeee; - - .imagePreview { - z-index: 5; - position: relative; - width: 50%; - margin: auto; - border-radius: 8px; - transition: all 150ms linear; - - img { - width: 100%; - border: 0.5px rgba(56, 56, 56, 0.459) solid; - } - - video { - width: 100%; - border: 0.5px rgba(56, 56, 56, 0.459) solid; - } - - transition: all 150ms linear; - - } - - .imageOverlay { - z-index: 10; - position: relative; - opacity: 0; - transition: all 150ms linear; - margin: auto; - } -} - -.imagePreviewWrapper:hover .imagePreview { - opacity: 0.5; - transition: all 150ms linear; -} - -.imagePreviewWrapper:hover .imageOverlay { - opacity: 1; - transition: all 150ms linear; - -} - -.proccessUnset { - opacity: 0; - transition: opacity 250ms linear; - animation: proccessUnset 250ms linear; -} - -.proccessSet { - transition: opacity 250ms linear; - animation: proccessSet 250ms linear; -} - -@keyframes proccessSet { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -@keyframes proccessUnset { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -.fontct { - font-family: "Poppins", sans-serif; -} \ No newline at end of file diff --git a/packages/comty/src/components/PostFeed/index.js b/packages/comty/src/components/PostFeed/index.js deleted file mode 100644 index 7c67702a..00000000 --- a/packages/comty/src/components/PostFeed/index.js +++ /dev/null @@ -1,143 +0,0 @@ -import React from 'react' -import { List } from 'antd' -import { connect } from 'umi' -import settings from 'core/libs/settings' -import { verbosity } from '@nodecorejs/utils' -import { PostCard, PostCreator, Invalid } from 'components' -import * as antd from 'antd' -import styles from './index.less' - -@connect(({ app, socket }) => ({ app, socket })) -export default class PostsFeed extends React.Component { - state = { - socket: null, - feed: null, - renderError: false - } - - addPostToRender(payload) { - let postSchema = { - id: this.state.feed[0].id + 1, - post_time: "who knows", - postText: "empty", - publisher: "me", - post_likes: 2500 - } - - if (typeof(payload) !== "undefined") { - postSchema = { ...postSchema, ...payload } - } - - let updated = this.state.feed - updated.push(postSchema) - this.setState({ feed: updated }) - this.goPostById(postSchema.id) - } - - goPostById(id) { - document.getElementById(id).scrollIntoView({ - behavior: "smooth", - block: "center", - inline: "center" - }) - } - - getUserIdByProps(id) { - if(typeof(id) == "string") { - return new Number(id) - } - return id - } - - fetchFeed() { - const { socket } = this.state - if (socket) { - const requestPayload = { - from: this.props.from ?? "feed", - post_id: this.props.fromID ?? 0, - userToken: this.props.app.session_token, - id: this.getUserIdByProps(this.props.fromID) ?? this.props.app.session_uuid - } - - const requestCallback = (data) => { - console.log(data) - if (Array.isArray(data.response)) { - this.setState({ feed: data.response }) - } else { - verbosity.log(`error gathering posts >`, data) - this.setState({ renderError: true }) - } - } - - socket._emit("get", requestPayload, requestCallback) - } - } - - handlePostActions(action, post_id, callback) { - const { socket } = this.state - if (socket) { - const requestPayload = { - userToken: this.props.app.session_token, - post_id, - action - } - - socket._emit("actions", requestPayload, (res) => callback(res)) - } - } - - componentDidMount() { - window.addPostToRender = (...context) => this.addPostToRender(...context) - - if (this.props.app.session_valid) { - this.props.dispatch({ - type: "socket/use", - persistent: true, - scope: "posts", - then: (data) => { - this.setState({ socket: data }) - this.fetchFeed() - } - }) - } - - } - - componentWillUnmount() { - if (this.state.socket) { - this.state.socket.remove() - } - } - - render() { - if (!this.props.app.session_valid) { - return - } - - if (!this.state.feed) { - return ( - - - - ) - } - - if (this.state.renderError) { - return ( - - ) - } - - return ( -
- ( - this.handlePostActions(...context)} payload={item} /> - )} - /> -
- ) - } -} diff --git a/packages/comty/src/components/PostFeed/index.less b/packages/comty/src/components/PostFeed/index.less deleted file mode 100644 index 8f4566f7..00000000 --- a/packages/comty/src/components/PostFeed/index.less +++ /dev/null @@ -1,3 +0,0 @@ -.exploreWrapper{ - -} \ No newline at end of file diff --git a/packages/comty/src/components/Splash/index.js b/packages/comty/src/components/Splash/index.js deleted file mode 100644 index 6f024ab4..00000000 --- a/packages/comty/src/components/Splash/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react" -import "./index.less" - -export default class Splash extends React.Component { - render() { - return ( -
-
-
- - - - - - - - - - - - - - - - -
-
-
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/Splash/index.less b/packages/comty/src/components/Splash/index.less deleted file mode 100644 index 500162f5..00000000 --- a/packages/comty/src/components/Splash/index.less +++ /dev/null @@ -1,179 +0,0 @@ -.splash-wrapper { - background-color: #252525; - position: absolute; - z-index: 0; - - top: 0; - right: 0; - width: 100vw; - height: 100vh; - animation: background-fade 5.1s linear 0.5s; - animation-fill-mode: forwards; -} - -.glow { - width: 100vw; - height: 100vh; - position: absolute; - z-index: 1; - top: 0; - right: 0; - opacity: 0; - - animation: glow-splash 4.1s ease-out 0.5s; - animation-fill-mode: forwards; - - filter: blur(160px); - backface-visibility: hidden; - transform: translate3d(0, 0, 0); - will-change: contents; - background: conic-gradient( - from 230.29deg at 51.63% 52.16%, - #2400ff 0deg, - #0087ff 67.5deg, - #ff1d7a 198.75deg, - #f5381b 251.25deg, - #ff5335 301.88deg, - #691eff 360deg - ); -} - -.bouncy-logo { - will-change: transition, opacity, z-index; - position: absolute; - z-index: 3; - - width: 100vw; - height: 100vh; - - display: flex; - flex-direction: column; - align-content: center; - align-items: center; - - justify-content: center; -} - -.bouncy-logo .ball { - animation: logo-bounce 0.5s alternate infinite forwards; -} - -.bouncy-logo .ball svg { - opacity: 1; - width: 200px; - height: 200px; - margin: auto; - - stroke-width: 1.5; - stroke-opacity: 1; - - stroke-dasharray: 1000; - stroke-dashoffset: 1000; - - fill: transparent; - - animation: logo-reveal 5.1s ease-out 0.5s forwards, logo-stroke 2.1s ease-out 0s forwards, - logo-transform 5.1s ease-out 0s forwards; -} - -@keyframes glow-splash { - 0% { - opacity: 0; - -webkit-animation-timing-function: cubic-bezier(0.74, 0.25, 0.76, 1); - animation-timing-function: cubic-bezier(0.74, 0.25, 0.76, 1); - } - - 15% { - opacity: 1; - -webkit-animation-timing-function: cubic-bezier(0.12, 0.01, 0.08, 0.99); - animation-timing-function: cubic-bezier(0.12, 0.01, 0.08, 0.99); - } - 97% { - z-index: 4; - } - 100% { - z-index: 4; - opacity: 0.28; - } -} - -@keyframes background-fade { - 0% { - -webkit-animation-timing-function: cubic-bezier(0.74, 0.25, 0.76, 1); - animation-timing-function: cubic-bezier(0.74, 0.25, 0.76, 1); - } - - 15% { - -webkit-animation-timing-function: cubic-bezier(0.12, 0.01, 0.08, 0.99); - animation-timing-function: cubic-bezier(0.12, 0.01, 0.08, 0.99); - } - - 60% { - background-color: #f0f2f5; - } - - 100% { - background-color: #f0f2f5; - } -} - -@keyframes logo-bounce { - from { - transform: translate(0, -10px); - } - to { - transform: translate(0, 10px); - } -} - -@keyframes logo-transform { - 0% { - animation-timing-function: cubic-bezier(0, 0, 0.3rem, 1); - transform: scale(5) rotate(65deg); - filter: blur(10px); - } - 17% { - filter: unset; - } - 18% { - filter: drop-shadow(0 0 80px rgba(255, 255, 255, 1)); - } - 19% { - transform: rotate(5deg); - } - 100% { - transform: scale(0.8) rotate(0deg); - } -} - -@keyframes logo-reveal { - 0% { - -webkit-animation-timing-function: cubic-bezier(0, 0, 0.3rem, 1); - animation-timing-function: cubic-bezier(0, 0, 0.3rem, 1); - } - 7% { - fill: transparent; - } - 10% { - fill: rgba(225, 225, 225, 0.8); - } - 40% { - fill: rgba(225, 225, 225, 0.8); - } - 100% { - fill: rgba(51, 51, 51, 0.8); - } -} - -@keyframes logo-stroke { - 0% { - stroke-opacity: 0; - } - 10% { - stroke-opacity: 1; - } - 100% { - stroke-dashoffset: 0; - stroke-opacity: 0; - } -} \ No newline at end of file diff --git a/packages/comty/src/components/StreamingOverlay/index.js b/packages/comty/src/components/StreamingOverlay/index.js deleted file mode 100644 index 2d6df9fe..00000000 --- a/packages/comty/src/components/StreamingOverlay/index.js +++ /dev/null @@ -1,154 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import * as Icons from 'components/Icons' -import { connect } from 'umi' -import { objectToArrayMap } from '@nodecorejs/utils' -import classnames from 'classnames' - -import StatisticConnection from './statistics/connection' - -const statisticsComponents = { - connection: -} - -const statisticsList = [ - { - id: "connection", - title: Network, - help: "Measure your connection with our servers", - default: true - }, - { - id: "audience", - title: Audience, - help: "Blah blah blah", - default: false - } -] - -@connect(({ app, streaming }) => ({ app, streaming })) -export default class StreamingPanel extends React.Component { - - state = { - activeStatistics: [], - hidden: {} - } - - isHidden(key) { - if (typeof (this.state.hidden[key]) == "undefined") { - return true - } - - return this.state.hidden[key] - } - - handleHidden(key) { - let updated = this.state.hidden - - if (typeof (this.state.hidden[key]) == "undefined") { - updated[key] = false - } else { - updated[key] = !this.state.hidden[key] - } - - this.setState({ hidden: updated }) - } - - renderLiveTag() { - return
- {this.props.streaming?.onStreaming ? "On Live" : "Offline"} -
- } - - renderOptions() { - return ( -
-
-

Information

-
-
-
- {this.props.streaming?.isConnected ? "Connected" : "Disconnected"} -
-
- 0 Viewers -
- -
- ) - } - - renderStadistics() { - const { isConnected, spectators } = this.props.streaming - - const onChangeCheckbox = (e) => { - let updated = this.state.activeStatistics - updated[e] = !updated[e] - - this.setState({ updated }) - } - - const getCheckboxes = () => { - return statisticsList.map(e => { - if (!e.id) { - return null - } - return - { onChangeCheckbox(e.id) }} defaultChecked={e.default} checked={this.state.activeStatistics[e.id]} key={e.id} > - {e.title ?? e.id} - - - }) - } - - const renderCharts = () => { - return objectToArrayMap(this.state.activeStatistics).map((e) => { - if (e.value) { - return statisticsComponents[e.key] - } - return null - }) - } - - return ( -
-
- {getCheckboxes()} -
-
- {renderCharts()} -
-
- ) - } - - - render() { - console.log(this.props.streaming) - return ( -
-

Your streaming

-
-
- -

@{this.props.app.session_data.username}

-
-
- {this.renderLiveTag()} -
-
-
-
- {this.renderOptions()} - {this.renderStadistics()} -
-
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/components/StreamingOverlay/statistics/connection/index.js b/packages/comty/src/components/StreamingOverlay/statistics/connection/index.js deleted file mode 100644 index 6dd83085..00000000 --- a/packages/comty/src/components/StreamingOverlay/statistics/connection/index.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import Chart from 'chart.js' - -const elementID = "statistic_connection" - -export default class StatisticConnection extends React.Component { - refComponent = null - - createRef (node) { - this.refComponent = node - } - - init() { - new Chart(this.refComponent, { - type: 'bar', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [{ - label: '# of Votes', - data: [12, 19, 3, 5, 2, 3], - backgroundColor: [ - 'rgba(255, 99, 132, 0.2)', - 'rgba(54, 162, 235, 0.2)', - 'rgba(255, 206, 86, 0.2)', - 'rgba(75, 192, 192, 0.2)', - 'rgba(153, 102, 255, 0.2)', - 'rgba(255, 159, 64, 0.2)' - ], - borderColor: [ - 'rgba(255, 99, 132, 1)', - 'rgba(54, 162, 235, 1)', - 'rgba(255, 206, 86, 1)', - 'rgba(75, 192, 192, 1)', - 'rgba(153, 102, 255, 1)', - 'rgba(255, 159, 64, 1)' - ], - borderWidth: 1 - }] - }, - options: { - scales: { - yAxes: [{ - ticks: { - beginAtZero: true - } - }] - } - } - }) - } - - render() { - console.log(this.refComponent) - return this.createRef(e)} width="400" height="400"> - - - } -} \ No newline at end of file diff --git a/packages/comty/src/components/index.js b/packages/comty/src/components/index.js deleted file mode 100644 index f348e92c..00000000 --- a/packages/comty/src/components/index.js +++ /dev/null @@ -1,41 +0,0 @@ -// @alias from 'components' - -// Helpers & Misc -import Loader from './Loader' -import About from './About' -import * as Feather from 'feather-reactjs' -import Invalid from './Invalid' -import CardComponent from './CardComponent' - -// App Layout Components -import Splash from './Splash' -import * as AppLayout from './Layout/index.js' -import ListedMenu from './ListedMenu/index.tsx' -import FloatComponent from './FloatComponent' -import ParamsList from './ParamsList' -import PostsFeed from './PostFeed' - -// User Components - -// Post Components -import MediaPlayer from './MediaPlayer' -import PostCreator from './PostCreator' -import PostCard from './PostCard' - -// Mix & Export all -export { - CardComponent, - PostsFeed, - Splash, - ParamsList, - FloatComponent, - ListedMenu, - AppLayout, - PostCard, - Invalid, - Feather, - About, - MediaPlayer, - Loader, - PostCreator -} diff --git a/packages/comty/src/core/index.js b/packages/comty/src/core/index.js deleted file mode 100644 index 961de2f5..00000000 --- a/packages/comty/src/core/index.js +++ /dev/null @@ -1,549 +0,0 @@ -import moment from 'moment'; -import { format } from 'timeago.js'; -import { cloneDeep } from 'lodash'; -import store from 'store'; -import config from 'config'; -import handle from 'core/libs/errorhandler' -import request from 'request' -import html2canvas from 'html2canvas' -import platform from 'platform' -import path from 'path' -import fs from 'fs' -import * as utils from '@nodecorejs/utils' - -const { pathToRegexp } = require('path-to-regexp'); - -export const languages = config.i18n ? config.i18n.languages.map(item => item.key) : []; -export const defaultLanguage = config.i18n ? config.i18n.defaultLanguage : ''; - -import * as libs from './libs' - -export const package_json = require('../../package.json'); -export const GUID = config.app.guid; - -export const clientInfo = { - buildStable: getBuild()["stable"], - packageName: package_json.name, - packageStage: package_json.stage, - siteName: config.app.siteName, - version: package_json.version, - logo: config.app.FullLogoPath, - logo_dark: config.app.DarkFullLogoPath, - os: platform.os, - layout: platform.layout -} - -export function getCircularReplacer() { - const seen = new WeakSet() - return (key, value) => { - if (typeof value === "object" && value !== null) { - if (seen.has(value)) { - return { __cycle_flag: true } - } - seen.add(value) - } - return value - } -} - -export function __proto__filterSchematizedArray(data) { - let tmp = [] - return new Promise(resolve => { - data.forEach(async (element) => { - if (typeof (element.require) !== 'undefined') { - const validRequire = await window.requireQuery(element.require) - validRequire ? tmp.push(element) : null - } else { - tmp.push(element) - } - }) - resolve(tmp) - }) -} - -export function decycle(obj, stack = []) { - if (!obj || typeof obj !== 'object') - return obj; - - if (stack.includes(obj)) { - return { __cycle_flag: true } - } - - let s = stack.concat([obj]); - - return Array.isArray(obj) - ? obj.map(x => decycle(x, s)) - : Object.fromEntries( - Object.entries(obj) - .map(([k, v]) => [k, decycle(v, s)])); -} - -export function getBuild() { - let build = { - stable: false - } - try { - if (!window.__build) { - return false - } - const buildPath = path.resolve(__dirname, "./dist") - const data = JSON.parse(fs.readFileSync(`${buildPath}/build.json`)) - if (typeof (data) !== "undefined" && Array.isArray(data)) { - utils.__legacy__objectToArrayMap(data).forEach((e) => { - build[e.key] = e.value - }) - } - } catch (error) { - // tf this is not a build sorry - } - return build -} - -export function queryIndexer(array, callback, params) { - if (!array) return false - - if (Array.isArray(array)) { - let opt = { - regex: /:id/gi - } - - if (params) { - opt = { ...opt, ...params } - } - - array.forEach((e) => { - if (e.match != null && e.to != null) { - const pathMatch = pathMatchRegexp(e.match, window.location.pathname) - if (pathMatch != null) { - return callback(e.to.replace(opt.regex, pathMatch[1])) - } - } - }) - } -} - -export function createScreenshotFromElement(element) { - if (!element) return false - html2canvas(element, { - useCORS: true, - proxy: "localhost:8000", - scale: 4, - backgroundColor: "transparent" - }).then(canvas => { - downloadEncodedURI({ data: canvas.toDataURL() }) - }) -} - -export function generatePostURI(id) { - if (window.location.origin && id) { - return `${window.location.origin}/post/${id}` - } - return null -} - -export function writeToClipboard(text) { - navigator.clipboard.writeText(text) - .then(() => { - libs.ui.notify.info('Copy to clipboard') - }, () => { - /* failure */ - }) -} - -// [Experimental], not in use -export function getglobal(params, callback) { - if (!params || !params.server) return false - let tmpResponse = [] - - let req = { - global: "__global", - url: params.server - } - - params.global ? req.global = params.global : null - - let urlString = `${req.url}/${req.global}.json` - console.log(urlString) - - request(urlString, (error, response, body) => { - tmpResponse = body - callback(tmpResponse) - }) -} - -export function isOs(os) { - if (process) { - return process.platform === os ? true : false - } else { - return false - } -} - -export function abbreviateCount(value) { - let updated = value - if (value >= 1000) { - const suffix = ["", "k", "m"] - let numberToSuffix = Math.floor(("" + value).length / 3) - let divider = "" - - for (let offset = 2; offset >= 1; offset--) { - divider = parseFloat((numberToSuffix != 0 ? (value / Math.pow(1000, numberToSuffix)) : value).toPrecision(offset)) - let firstDot = (divider + "").replace(/[^a-zA-Z 0-9]+/g, '') - if (firstDot.length <= 2) { - break - } - } - if (divider % 1 != 0) { - divider = divider.toFixed(1) - } - updated = divider + suffix[numberToSuffix] - } - return updated -} - -export function imageToBase64(img, callback) { - const reader = new FileReader() - reader.addEventListener('load', () => callback(reader.result)) - reader.readAsDataURL(img) -} - -export function urlToBase64(url, callback) { - let xhr = new XMLHttpRequest(); - xhr.onload = function () { - let reader = new FileReader(); - reader.onloadend = function () { - callback(reader.result); - } - reader.readAsDataURL(xhr.response); - }; - xhr.open('GET', url); - xhr.setRequestHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin'); - xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); - xhr.responseType = 'blob'; - xhr.send(); -} - -export function b64toBlob(b64Data, contentType = '', sliceSize = 512) { - const byteCharacters = atob(b64Data); - const byteArrays = []; - - for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { - const slice = byteCharacters.slice(offset, offset + sliceSize); - - const byteNumbers = new Array(slice.length); - for (let i = 0; i < slice.length; i++) { - byteNumbers[i] = slice.charCodeAt(i); - } - - const byteArray = new Uint8Array(byteNumbers); - byteArrays.push(byteArray); - } - - const blob = new Blob(byteArrays, { type: contentType }); - return blob; -} - -/** - * Generate a download with encoded uri - * - * @param {object} payload - Generation Data - */ -export function downloadDecodedURI(payload) { - // TODO: Support encoded - if (!payload) return false - let { data, type, charset, filename } = payload - if (!data || !type) return false - try { - if (!filename) { - filename = `${"download"}_${time.now()}.${type.split("/")[1]}` // TODO: Add package name to title generation - } - let tmp = document.createElement('a') - tmp.href = `data:${type};charset=${charset},${encodeURIComponent(data)}` - tmp.download = filename - tmp.click() - } catch (error) { - handle({ msg: error, code: 120 }) - } -} - -export function GetPropertyValue(object, dataToRetrieve) { - dataToRetrieve.split('.').forEach(function (token) { - if (object) object = object[token]; - }) - return object; -} - -/** - * Return the last object from array - * - * @param array {array} - * @return object - */ -export function objectLast(array, n) { - if (array == null) return void 0; - if (n == null) return array[array.length - 1]; - return array.slice(Math.max(array.length - n, 0)); -} - -/** - * Object to array scheme RSA-YCORE-ARRAYPROTO.2 - * - * @param object {object} - * @return array - */ -export function arrayToObject(array) { - if (!array) return false - let tmp = [] - - array.forEach((e) => { - tmp[e.key] = e.value - }) - - return tmp -} - -/** - * Remove an element by id from an object array - * - * @param object {object} - * @param id {string} - * @return array - */ -export function objectRemoveId(object, id) { - let arr = objectToArrayMap(object) - return arr.filter((e) => { - return e.id != id; - }); -} -/** - * Remove an element by key from an object array - * - * @param object {object} - * @param key {string} - * @return array - */ -export function objectRemoveKey(object, key) { - let arr = objectToArrayMap(object) - return arr.filter((e) => { - return e.key != key; - }); -} - - -/** - * Global fix for convert '1, 0' to string boolean 'true, false' - * - * @param e {int} Numeric boolean reference - * @return bool - */ -export function booleanFix(e) { - if (e == 1) return true; - return false; -} - -/** - * Request FullScreen mode - * - */ -export function requestFullscreen() { - var elem = document.documentElement; - if (elem.requestFullscreen) { - elem.requestFullscreen(); - } else if (elem.mozRequestFullScreen) { - /* Firefox */ - elem.mozRequestFullScreen(); - } else if (elem.webkitRequestFullscreen) { - /* Chrome, Safari and Opera */ - elem.webkitRequestFullscreen(); - } else if (elem.msRequestFullscreen) { - /* IE/Edge */ - elem.msRequestFullscreen(); - } -} - -/** - * Handle time basic functions - * - */ -export const time = { - ago: a => { - const format = moment(a).format('DDMMYYYY'); - const b = new Date(format).toLocaleString(); - return time.relativeToNow(b); - }, - stmToAgo: a => { - const b = a * 1000; - return format(b); - }, - relativeToNow: (a, b) => { - return moment(a, b || 'DDMMYYYY').fromNow(); - }, - now: () => { - return new Date().toLocaleString(); - } -}; - -export function pathMatchRegexp(regexp, pathname) { - return pathToRegexp(regexp).exec(pathname) -} - -/** - * Query objects that specify keys and values in an array where all values are objects. - * @param {array} array An array where all values are objects, like [{key:1},{key:2}]. - * @param {string} key The key of the object that needs to be queried. - * @param {string} value The value of the object that needs to be queried. - * @return {object|undefined} Return frist object when query success. - */ -export function queryArray(array, key, value) { - if (!Array.isArray(array)) { - return; - } - return array.find(_ => _[key] === value); -} - -/** - * Convert an array to a tree-structured array. - * @param {array} array The Array need to Converted. - * @param {string} id The alias of the unique ID of the object in the array. - * @param {string} parentId The alias of the parent ID of the object in the array. - * @param {string} children The alias of children of the object in the array. - * @return {array} Return a tree-structured array. - */ -export function arrayToTree( - array, - id = 'id', - parentId = 'pid', - children = 'children', -) { - const result = []; - const hash = {}; - const data = cloneDeep(array); - - data.forEach((item, index) => { - hash[data[index][id]] = data[index]; - }); - - data.forEach(item => { - const hashParent = hash[item[parentId]]; - if (hashParent) { - !hashParent[children] && (hashParent[children] = []); - hashParent[children].push(item); - } else { - result.push(item); - } - }); - return result; -} - -/** - * In an array object, traverse all parent IDs based on the value of an object. - * @param {array} array The Array need to Converted. - * @param {string} current Specify the value of the object that needs to be queried. - * @param {string} parentId The alias of the parent ID of the object in the array. - * @param {string} id The alias of the unique ID of the object in the array. - * @return {array} Return a key array. - */ -export function queryPathKeys(array, current, parentId, id = 'id') { - const result = [current]; - const hashMap = new Map(); - array.forEach(item => hashMap.set(item[id], item)); - - const getPath = current => { - const currentParentId = hashMap.get(current)[parentId]; - if (currentParentId) { - result.push(currentParentId); - getPath(currentParentId); - } - }; - - getPath(current); - return result; -} - -/** - * Query which layout should be used for the current path based on the configuration. - * @param {layouts} layouts Layout configuration. - * @param {pathname} pathname Path name to be queried. - * @return {string} Return frist object when query success. - */ -export function queryLayout(layouts, pathname) { - let result = 'public'; - - const isMatch = regepx => { - return regepx instanceof RegExp - ? regepx.test(pathname) - : pathToRegexp(regepx).exec(pathname); - }; - - for (const item of layouts) { - let include = false; - let exclude = false; - if (item.include) { - for (const regepx of item.include) { - if (isMatch(regepx)) { - include = true; - break; - } - } - } - - if (include && item.exclude) { - for (const regepx of item.exclude) { - if (isMatch(regepx)) { - exclude = true; - break; - } - } - } - - if (include && !exclude) { - result = item.name; - break; - } - } - - return result; -} - -export function getLocale() { - return store.get('locale') || defaultLanguage; -} - -export function setLocale(language) { - if (getLocale() !== language) { - store.set('locale', language); - window.location.reload(); - } -} - -export function get_value(source, key) { - if (!key || !source) return false - try { - const find = source.find(item => { - return item.id === key - }) - return find.value - - } - catch (error) { - return false - } -} - -export function iatToString(iat) { - return new Date(iat * 1000).toLocaleString() -} - -export function generateGUID(lenght = 6) { - let text = "" - const possibleChars = "abcdefghijklmnopqrstuvwxyz0123456789" - - for (let i = 0; i < 6; i++) - text += possibleChars.charAt(Math.floor(Math.random() * possibleChars.length)) - - return text -} - -export function generateRandomId(length = 15) { - return Math.random().toString(36).substring(0, length); -} \ No newline at end of file diff --git a/packages/comty/src/core/libs/browser/index.ts b/packages/comty/src/core/libs/browser/index.ts deleted file mode 100644 index a729841a..00000000 --- a/packages/comty/src/core/libs/browser/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -const zeroStyles = (element: HTMLElement, ...properties: string[]): void => { - for (const property of properties) { - element.style.setProperty(property, '0') - } -} - -const removeElement = (element: HTMLElement): void => { - element.parentNode!.removeChild(element) -} - -const createTextArea = (): HTMLTextAreaElement => { - const textArea: HTMLTextAreaElement = document.createElement('textarea') - textArea.setAttribute('cols', '0') - textArea.setAttribute('rows', '0') - zeroStyles(textArea, - 'border-width', - 'bottom', - 'margin-left', 'margin-top', - 'outline-width', - 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', - 'right', - ) - textArea.style.setProperty('box-sizing', 'border-box') - textArea.style.setProperty('height', '1px') - textArea.style.setProperty('margin-bottom', '-1px') - textArea.style.setProperty('margin-right', '-1px') - textArea.style.setProperty('max-height', '1px') - textArea.style.setProperty('max-width', '1px') - textArea.style.setProperty('min-height', '1px') - textArea.style.setProperty('min-width', '1px') - textArea.style.setProperty('outline-color', 'transparent') - textArea.style.setProperty('position', 'absolute') - textArea.style.setProperty('width', '1px') - document.body.appendChild(textArea) - return textArea; -} - -export const clipboard = { - copyText: (data:String) => { - if (typeof (data) !== "string") { - return false - } - const textArea: HTMLTextAreaElement = createTextArea() - textArea.value = data - textArea.select() - const success: boolean = document.execCommand('copy') - removeElement(textArea) - if (!success) { - return false - } - }, - readText: (data:String) => { - if (typeof (data) !== "string") { - return false - } - const textArea: HTMLTextAreaElement = createTextArea() - textArea.focus() - const success: boolean = document.execCommand('paste') - - if (!success) { - removeElement(textArea) - return false - } - const value: string = textArea.value - removeElement(textArea) - return value - } -} \ No newline at end of file diff --git a/packages/comty/src/core/libs/dynamicsdcp/index.js b/packages/comty/src/core/libs/dynamicsdcp/index.js deleted file mode 100644 index 40e94f5c..00000000 --- a/packages/comty/src/core/libs/dynamicsdcp/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import localforage from 'localforage' -import { package_json } from 'core' - -// Dynamic secure data container processor -export class DynamicSDCP { - constructor(props){ - if(props){ - this.props = props - } - this.instanceConfig = { - name: props.name? props.name : `dynamicSDCP_${Math.random().toFixed()}`, - driver : localforage.WEBSQL, // Force WebSQL; same as using setDriver() - version : 1.0, - size : 4980736, // Size of database, in bytes. WebSQL-only for now. - storeName : package_json.UUID, // Should be alphanumeric, with underscores. - } - - localforage.config(this.instanceConfig) - this.instance = localforage.createInstance(this.instanceConfig) - } - useInstance(){ - console.log('Using ', this.instance) - } -} - diff --git a/packages/comty/src/core/libs/errorhandler/index.js b/packages/comty/src/core/libs/errorhandler/index.js deleted file mode 100644 index 771d6ccf..00000000 --- a/packages/comty/src/core/libs/errorhandler/index.js +++ /dev/null @@ -1,74 +0,0 @@ -import { ui } from 'core/libs' -import { verbosity } from '@nodecorejs/utils' -import errStrings from 'config/handlers/errToStrings.js' -import errNumbers from 'config/handlers/numToError.js' -import errFlags from 'config/handlers/errToFlag.js' -import flagToBehavior from 'config/handlers/flagToBehavior.js' - -const flagToString = { - CRITICAL: "An critical exception", - DISRUPT: "An wild error appears!", - IGNORE: "Warning" -} - -export function notifyErrorHandler(params) { - if (!params) { - return false - } - ui.notify.open({ - message: flagToString[params.flag] ?? "Unexpected Error", - description: -
-
{params.msg ?? "No exception message"}
-
{errStrings[params.out] ?? "Unhandled Exception"} | { params.out?? "UNDEFINED_KEY" }
-
, - }) -} - -export function ErrorHandler(payload, callback){ - if (!payload) { - return false - } - - const flags = ["CRITICAL", "DISRUPT", "IGNORE"] - let flag = null - let out = null - - const { msg, outFlag, code } = payload - - if (!out && code != null) { // This give priority to resolve with `code` than `outFlag` - out = errNumbers[code] - } - - if (!out && outFlag != null ) { - out = outFlag - } - - verbosity.log(msg?? "unhandled message", {type: "error"}) - - if (out && typeof(errStrings[out]) !== "undefined") { - flag = errFlags[out] - }else{ - console.log("(Aborted) no out key | or invalid flag => ", out) - return false - } - - switch (flag) { - case flags[0]: - notifyErrorHandler({ msg, out, flag }) - flagToBehavior[out]({ msg, out, flag, code }) - return false - case flags[1]: - flagToBehavior[out]({ msg, out, flag, code }) - return false - case flags[2]: - flagToBehavior[out]({ msg, out, flag, code }) - return false - default: - console.log('Invalid FLAG') - break; - } -} - - -export default ErrorHandler \ No newline at end of file diff --git a/packages/comty/src/core/libs/index.js b/packages/comty/src/core/libs/index.js deleted file mode 100644 index b355577f..00000000 --- a/packages/comty/src/core/libs/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import * as v3_model from './v3_model' -import * as ui from './ui' -export * from './settings' -export * from './router' -export * from './dynamicsdcp' -export * from './browser' - -export { v3_model, ui } diff --git a/packages/comty/src/core/libs/keybinds/index.js b/packages/comty/src/core/libs/keybinds/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/comty/src/core/libs/router/index.js b/packages/comty/src/core/libs/router/index.js deleted file mode 100644 index 94085941..00000000 --- a/packages/comty/src/core/libs/router/index.js +++ /dev/null @@ -1,37 +0,0 @@ -import { history } from 'umi'; - -export const router = { - push: e => { - history.push({ - pathname: `${e}`, - }); - }, - go: e => { - router.push(e); - }, - goProfile: e => { - router.push(`/@/${e}`); - }, -}; - -export const goTo = { - top: id => { - const element = document.getElementById(id); - element.scrollTop = element.scrollHeight + element.clientHeight; - }, - bottom: id => { - const element = document.getElementById(id); - element.scrollTop = element.scrollHeight - element.clientHeight; - }, - element: element => { - try { - document.getElementById(element).scrollIntoView(); - } catch (error) { - console.debug(error); - return false; - } - }, -}; - - -export default router \ No newline at end of file diff --git a/packages/comty/src/core/libs/settings/index.js b/packages/comty/src/core/libs/settings/index.js deleted file mode 100644 index 26695448..00000000 --- a/packages/comty/src/core/libs/settings/index.js +++ /dev/null @@ -1,79 +0,0 @@ -import config from 'config' - -export function parseLocalStorage() { - const fromStorage = localStorage.getItem(config.app.storage.settings) - try { - return JSON.parse(fromStorage) - } catch (error) { - console.log(error) - } -} - -export function newSetting(key, value) { - let setting = {} - setting.id = key - setting.value = value - return [setting] -} - -export const settings = { - get: (key) => { - let tmp = []; - - const keys = Object.keys(config.defaults) - const values = Object.values(config.defaults) - const length = keys.length - - for (let i = 0; i < length; i++) { - if (parseLocalStorage()) { - const storagedValue = parseLocalStorage().find(item => { - return item.id === keys[i] - }) - if (typeof (storagedValue) == 'undefined') { - tmp[keys[i]] = values[i] - } else { - tmp[keys[i]] = storagedValue.value - } - } - else { - tmp[keys[i]] = values[i] - } - } - - if (key) { - return tmp[key] - } - - return tmp - }, - set: (key, value) => { - let tmp - let data = parseLocalStorage() - - if (data) { - const finded = data.find(element => { - return element.id === key - }) - if (!finded) { - const parsed = data.concat(newSetting(key, value)) - tmp = parsed - } else { - const updated = data.map(element => { - return element.id === key ? Object.assign(element, { value: value }) : element - }) - tmp = updated - } - } else { - tmp = newSetting(key, value) - } - data = tmp - try { - localStorage.setItem(config.app.storage.settings, JSON.stringify(data)) - } catch (error) { - console.log(error) - return false - } - } -} - -export default (e) => settings.get(e) \ No newline at end of file diff --git a/packages/comty/src/core/libs/socket/index.ts b/packages/comty/src/core/libs/socket/index.ts deleted file mode 100644 index 1951ce9b..00000000 --- a/packages/comty/src/core/libs/socket/index.ts +++ /dev/null @@ -1,258 +0,0 @@ -import io from 'socket.io-client' -import { verbosity } from '@nodecorejs/utils' -import settings from 'core/libs/settings' -import { notify } from 'core/libs/ui' - -const stateCodes = { - 0: "closed", - 1: "connected", - 2: "connecting", - 3: "disconnected" -} -interface ioConnTypes { - payload: any; - listenerKey: string; - toState: number; - event: any; - attempNumber: number; - startTime: number; -} -export default class SocketConnection { - ioConn: any - state: { - connAttemps: number; - registeredNamespaces: any; - connectionState: any; - listeners: any; - latency: any; - locked: boolean; - } - props: any - opts: any - dispatcher: any; - then: any; - namespaceConnector: any; - - constructor(props: any) { - if (!props) { - throw new Error("Mmm some props are not defined") - } - this.then = props.then - this.props = props.payload - this.dispatcher = props.connector - - this.state = { - locked: this.props.locked ?? false, - latency: 0, - listeners: {}, - connectionState: "init", - connAttemps: Number(0), - registeredNamespaces: [], - } - - this.opts = { - isHeader: false, - namespaceOrigin: "/", - hostname: "localhost:5000", - port: "5000", - reconnection: true, - reconnectionAttempts: Number(2), - reconnectionDelay: 1000, - reconnectionDelayMax: 5000, - randomizationFactor: 0.5, - timeout: 20000, - pingInterval: 5000, - autoConnect: true, - query: {}, - upgrade: true, - forceJSONP: false, - jsonp: true, - forceBase64: false, - enablesXDR: false, - timestampRequests: true, - timestampParam: 't', - policyPort: 843, - transports: ['polling', 'websocket'], - transportOptions: {}, - rememberUpgrade: false, - onlyBinaryUpgrades: false, - requestTimeout: 0, - protocols: [], - agent: false, - pfx: null, - key: null, - passphrase: null, - cert: null, - ca: null, - ciphers: [], - rejectUnauthorized: true, - perMessageDeflate: true, - forceNode: false, - localAddress: null, - extraHeaders: {} - } - - if (typeof (this.props) !== "undefined") { - this.opts = { ...this.opts, ...this.props } - } - - this.createConnection().then(() => { - this.ioConn.updateConnectionState(2) - this.setConnectionListeners() - }) - - this.namespaceConnector = (namespace: string) => { - if (!this.state.locked) { - this.createConnection(namespace).then(() => { - this.ioConn.updateConnectionState(2) - this.setConnectionListeners() - }) - }else{ - verbosity.log(`[${this.opts.namespaceOrigin}] node is locked, cannot switch the namespace`) - } - } - } - - createConnection(namespace: void) { - const getNode = () => { - const defaultNode = `${this.opts.hostname}${this.opts.namespaceOrigin}` - if (typeof (namespace) !== "undefined") { - return `${this.opts.hostname}:${this.opts.port}${namespace}` - } - return defaultNode - } - return new Promise((resolve) => { - this.ioConn = io(getNode(), this.opts) - - this.ioConn.updateState = (payload: ioConnTypes) => { - this.state = { ...this.state, ...payload } - const sendBackPayload = { ...this.state, ioConn: this.ioConn, namespaceConnector: this.namespaceConnector } - this.dispatcher({ type: "socket/updateStateFromSocket", node: this.opts.namespaceOrigin, payload: sendBackPayload }) - } - - this.ioConn.updateListener = (listenerKey: ioConnTypes, toState: ioConnTypes) => { - if (!listenerKey) - return false - - const getInvert = () => { - // @ts-ignore - if (this.state.listeners[listenerKey] != null) { - // @ts-ignore - return !this.state.listeners[listenerKey] - } else { - return true // this set activated listener by default if not exist any entries - } - } - let updatedObj: any = [] - // @ts-ignore - updatedObj[listenerKey] = toState ?? getInvert() - - let updatedState = this.state.listeners - updatedState = { ...updatedState, ...updatedObj } - - this.ioConn.updateState({ listeners: updatedState }) - } - - this.ioConn.updateConnectionState = (code: number) => { - if (code != null && typeof (code) == "number") { - // @ts-ignore - if (this.state.connectionState !== stateCodes[code]) { // avoiding update innecesary - // @ts-ignore - this.ioConn.updateState({ connectionState: stateCodes[code] }) - } - } - } - - this.ioConn._emit = (...context: any) => { - const listenerKey = context[0] - if (typeof (this.state.listeners[listenerKey]) == "undefined") { - this.ioConn.updateListener(listenerKey, true) - } - if (this.state.listeners[listenerKey] != null && !this.state.listeners[listenerKey]) { - verbosity.log(`Listener [${listenerKey}] is broked!`) // TODO: Add verbosity color - return false - } - - return this.ioConn.emit(...context) - } - - this.ioConn.lock = () => { - this.ioConn.updateState({ locked: true }) - } - - this.ioConn.unlock = () => { - this.ioConn.updateState({ locked: false }) - } - - this.ioConn._close = () => { - this.ioConn.disconnect() - this.ioConn.updateConnectionState(0) - } - - this.ioConn.remove = () => { - this.dispatcher({ type: "socket/destroyNode", node: this.opts.namespaceOrigin }) - } - - resolve(true) - }) - } - - setConnectionListeners() { - this.ioConn.on('connect', () => { - this.ioConn.updateConnectionState(1) - verbosity.log(`🌐 Connected to socket (${this.opts.namespaceOrigin})`) - this.then(this.ioConn) // sending init data - }) - - this.ioConn.on("connect_error", (event: ioConnTypes) => { - if (this.state.connectionState !== "connecting") { - this.ioConn.updateConnectionState(2) - } - if (this.state.connAttemps >= this.opts.reconnectionAttempts) { - verbosity.log('Maximun nº of attemps reached => max', this.opts.reconnectionAttempts + 1) - this.ioConn.updateConnectionState(0) - return false - } - verbosity.log(`Strike [${this.state.connAttemps + 1}] / ${this.opts.reconnectionAttempts + 1} !`, event) - this.state.connAttemps = this.state.connAttemps + 1 - }) - - this.ioConn.on('reconnect', (attemptNumber: ioConnTypes) => { - verbosity.log(`✅ Connection reconected with (${attemptNumber}) tries > [socket_event]`) - this.ioConn.updateConnectionState(1) - }) - - this.ioConn.on('disconnect', (event: ioConnTypes) => { - if (this.opts.isHeader) { - notify.warn("You are offline") - } - verbosity.log(`🔌 Disconnect from socket (${this.opts.namespaceOrigin}) > [socket_event] >`, event) - this.ioConn.updateConnectionState(3) - }) - - this.ioConn.on('connect_timeout', () => { - verbosity.log(`🕘 Socket timeout (${this.opts.namespaceOrigin}) > [socket_event]`) - this.ioConn.updateConnectionState(3) - }) - - this.ioConn.on('error', (event: ioConnTypes) => { - verbosity.log(`❌ Socket throw error (${this.opts.namespaceOrigin}) > [socket_event] >`, event) - }) - - this.ioConn.on('updateState', (event: ioConnTypes) => { - this.ioConn.updateState(event) - }) - - if (typeof (this.ioConn.io.opts.pingInterval) !== "undefined") { - if (typeof (this.ioConn.io.opts.pingInterval) == "number") { - setInterval(() => { - this.ioConn.emit('latency', Date.now(), (startTime: ioConnTypes) => { - // @ts-ignore - const latency = Date.now() - startTime - this.ioConn.updateState({ latency }) - }) - }, this.ioConn.io.opts.pingInterval) - } - } - } -} \ No newline at end of file diff --git a/packages/comty/src/core/libs/style/index.js b/packages/comty/src/core/libs/style/index.js deleted file mode 100644 index 87c1c5d6..00000000 --- a/packages/comty/src/core/libs/style/index.js +++ /dev/null @@ -1,248 +0,0 @@ -import store from 'store'; -import config from 'config'; -import { verbosity } from '@nodecorejs/utils' -import ErrorHandler from 'core/libs/errorhandler' - -const { appTheme_desiredContrast, storage_theme } = config.app - -export const updateRootStyles = (styles) => { - const rootContainer = document.getElementById(runtime.mountElementId ?? "root") - if (rootContainer) { - if (typeof (styles) !== "undefined" && Array.isArray(styles)) { - try { - objectToArrayMap(styles).forEach((e) => { - rootContainer.style[e.key] = e.value - }) - } catch (error) { - verbosity.log(error) - return false - } - } - return false - } -} - -export const appendStyles = (style) => { - -} - -export const theme = { - get: (key) => { - const raw = store.get(storage_theme) - if (!raw) return false - let container = [] - try { - raw.forEach((e) => { container[e.key] = e.value }) - } catch (error) { - return ErrorHandler({ msg: error, code: 120 }) - } - return container - }, - set: (data) => { - if (!data || data.length > 2) return false - try { - let mix = [] - const obj = Object.entries(data) - obj.forEach((e) => { - mix.push({ key: e[0], value: e[1] }) - }) - return store.set(storage_theme, mix) - } catch (error) { - console.log(error) - return false - } - }, - raw: () => { - return store.get(storage_theme) - } -} - -export function get_style_rule_value(selector, style) { - const selector_lowercase = selector.toLowerCase(); - const selector_parsed = selector_lowercase.substr(0, 1) === '.' ? selector_lowercase.substr(1) : '.' + selector_lowercase; - - for (let i = 0; i < document.styleSheets.length; i++) { - let styleSheet = document.styleSheets[i]; - let rules = styleSheet.cssRules ? styleSheet.cssRules : styleSheet.rules; - - for (var j = 0; j < rules.length; j++) { - if (rules[j].selectorText) { - var check = rules[j].selectorText.toLowerCase(); - switch (check) { - case selector_lowercase: - case selector_parsed: return rules[j].style[style]; - } - } - } - } -} - -export function getOptimalOpacityFromIMG(payload, callback) { - const { textColor, overlayColor, img } = payload; - - verbosity.log(payload) - let canvas = document.createElement('canvas'); - let image = new Image(); - - image.src = img - image.setAttribute('crossOrigin', ''); - image.onload = () => { - const imagePixelColors = getImagePixelColorsUsingCanvas(canvas, image); - if (imagePixelColors) { - const worstContrastColorInImage = getWorstContrastColorInImage(textColor, imagePixelColors); - const optimalOpacity = findOptimalOverlayOpacity(textColor, overlayColor, worstContrastColorInImage, appTheme_desiredContrast); - return callback(optimalOpacity) - } else { - return false - } - } -} - -export function getImagePixelColorsUsingCanvas(canvas, image) { - let imagePixelColors = null; - const ctx = canvas.getContext('2d'); - - canvas.height = getCanvasHeightToMatchImageProportions(canvas, image); - - const sourceImageCoordinates = [0, 0, image.width, image.height]; - const destinationCanvasCoordinates = [0, 0, canvas.width, canvas.height]; - - ctx.drawImage( - image, - ...sourceImageCoordinates, - ...destinationCanvasCoordinates - ); - - // Remember getImageData only works for same-origin or cross-origin-enabled images. - // See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more info. - try { - imagePixelColors = ctx.getImageData(...destinationCanvasCoordinates); - } catch (error) { - return ErrorHandler({ msg: error, code: 120 }) - } - - if (imagePixelColors) { - return imagePixelColors - } -} - -export function getCanvasHeightToMatchImageProportions(canvas, image) { - return (image.height / image.width) * canvas.width; -} - -export function getWorstContrastColorInImage(textColor, imagePixelColors) { - let worstContrastColorInImage; - let worstContrast = Infinity; - - for (let i = 0; i < imagePixelColors.data.length; i += 4) { - let pixelColor = { - r: imagePixelColors.data[i], - g: imagePixelColors.data[i + 1], - b: imagePixelColors.data[i + 2], - }; - - let contrast = getContrast(textColor, pixelColor); - if (contrast < worstContrast) { - worstContrast = contrast; - worstContrastColorInImage = pixelColor; - } - } - return worstContrastColorInImage; -} - -export function getContrast(color1, color2) { - const color1_luminance = getLuminance(color1); - const color2_luminance = getLuminance(color2); - - const lighterColorLuminance = Math.max(color1_luminance, color2_luminance); - const darkerColorLuminance = Math.min(color1_luminance, color2_luminance); - - const contrast = (lighterColorLuminance + 0.05) / (darkerColorLuminance + 0.05); - return contrast; -} - -export function getLuminance({ r, g, b }) { - return (0.2126 * getLinearRGB(r) + 0.7152 * getLinearRGB(g) + 0.0722 * getLinearRGB(b)); -} - -export function getLinearRGB(primaryColor_8bit) { - // First convert from 8-bit rbg (0-255) to standard RGB (0-1) - const primaryColor_sRGB = convert_8bit_RGB_to_standard_RGB(primaryColor_8bit); - - // Then convert from sRGB to linear RGB so we can use it to calculate luminance - const primaryColor_RGB_linear = convert_standard_RGB_to_linear_RGB(primaryColor_sRGB); - - return primaryColor_RGB_linear; -} - -export function convert_8bit_RGB_to_standard_RGB(primaryColor_8bit) { - return primaryColor_8bit / 255; -} - -export function convert_standard_RGB_to_linear_RGB(primaryColor_sRGB) { - const primaryColor_linear = primaryColor_sRGB < 0.03928 ? - primaryColor_sRGB / 12.92 : - Math.pow((primaryColor_sRGB + 0.055) / 1.055, 2.4); - return primaryColor_linear; -} - -export function getTextContrastWithImagePlusOverlay({ textColor, overlayColor, imagePixelColor, overlayOpacity }) { - const colorOfImagePixelPlusOverlay = mixColors(imagePixelColor, overlayColor, overlayOpacity); - const contrast = getContrast(textColor, colorOfImagePixelPlusOverlay); - return contrast; -} - -export function mixColors(baseColor, overlayColor, overlayOpacity) { - const mixedColor = { - r: baseColor.r + (overlayColor.r - baseColor.r) * overlayOpacity, - g: baseColor.g + (overlayColor.g - baseColor.g) * overlayOpacity, - b: baseColor.b + (overlayColor.b - baseColor.b) * overlayOpacity, - } - return mixedColor; -} - -export function findOptimalOverlayOpacity(textColor, overlayColor, worstContrastColorInImage, appTheme_desiredContrast) { - const opacityGuessRange = { - lowerBound: 0, - midpoint: 0.5, - upperBound: 1, - }; - - let numberOfGuesses = 0; - const maxGuesses = 8; - const opacityLimit = 0.99; - - while (numberOfGuesses < maxGuesses) { - numberOfGuesses++; - const currentGuess = opacityGuessRange.midpoint; - - const contrastOfGuess = getTextContrastWithImagePlusOverlay({ - textColor, - overlayColor, - imagePixelColor: worstContrastColorInImage, - overlayOpacity: currentGuess, - }); - - const isGuessTooLow = contrastOfGuess < appTheme_desiredContrast; - const isGuessTooHigh = contrastOfGuess > appTheme_desiredContrast; - - if (isGuessTooLow) { - opacityGuessRange.lowerBound = currentGuess; - } - else if (isGuessTooHigh) { - opacityGuessRange.upperBound = currentGuess; - } - - const newMidpoint = ((opacityGuessRange.upperBound - opacityGuessRange.lowerBound) / 2) + opacityGuessRange.lowerBound; - opacityGuessRange.midpoint = newMidpoint; - } - - const optimalOpacity = opacityGuessRange.midpoint; - - if (optimalOpacity > opacityLimit) { - return opacityLimit; - } - - return optimalOpacity; -} - diff --git a/packages/comty/src/core/libs/ui/export_data/index.tsx b/packages/comty/src/core/libs/ui/export_data/index.tsx deleted file mode 100644 index 72374ed8..00000000 --- a/packages/comty/src/core/libs/ui/export_data/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react' -import * as antd from 'antd' -import { Code, Download, HardDrive } from 'components/Icons' -import { downloadDecodedURI } from 'core' - -export interface exportData_props { - data: string; - type: string; -} - -const exportCodeRender = (data) => { - if(data.length > 500){ - return
- -

Hey, this file is too much large!

-

So it couldn't be displayed.

-
- } - return
- {data} -
-} - -const exportData_render = (props: exportData_props) => { - antd.Modal.confirm({ - title:
Your export {`${props.type.split("/")[1]}`}
, - icon: null, - onOk: () => downloadDecodedURI({data: props.data, type: props.type}), - okText: <>Download as File , - cancelText: "Done", - content: exportCodeRender(props.data), - }); -} - -exportData_render.defaultProps = { - data: '', - type: 'text/txt', -} - -export default exportData_render \ No newline at end of file diff --git a/packages/comty/src/core/libs/ui/index.js b/packages/comty/src/core/libs/ui/index.js deleted file mode 100644 index dbdba64d..00000000 --- a/packages/comty/src/core/libs/ui/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './notify' \ No newline at end of file diff --git a/packages/comty/src/core/libs/ui/modals/modals.js b/packages/comty/src/core/libs/ui/modals/modals.js deleted file mode 100644 index 40ff20fe..00000000 --- a/packages/comty/src/core/libs/ui/modals/modals.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react' -import * as core from 'core' -import * as antd from 'antd' -import * as Icons from 'components/Icons' -import styles from './modals.less'; -import classnames from 'classnames' - -const isMobile = localStorage.getItem('mobile_src') - -class __Model_postreport extends React.PureComponent { - state = { - step: 1 - } - end(){ - if(this.props.id){ - const payload = { post_id: this.props.id } - core.comty_post.__report((err, res) => { - if (err) { - return false - } - core.notify.info('This post has been reported successfully, our team will review it and inform you about problem resolution ...') - core.RenderFeed.RefreshFeed() - core.RenderFeed.goToElement(this.props.id) - }, payload) - } - setTimeout(() => { - core.SwapMode.close() - }, 500) - - } - next(){ - let a = this.state.step - - if(a<3)a++ - this.setState({step: a }) - } - status(i){ - const a = this.state.step - if (a==i) return 'process' - if (a>i) return 'finish' - if (a -

Report an post

-

This tool is intended for the community in a public way to help identify problematic or abusive content and for legitimate purposes.


-

To ensure the proper use of this tool, before proceeding, you must understand the following:

- I understand and agree that my complaint may be sent to the party that posted the content in question. - I understand that the abuse of this tool may have consequences for my account -

{this.state.term_1 && this.state.term_2? this.next()} >Next : null} - - ) - case 2: - return( -
-
-

For this report or complaint to be fair, make sure that the reason is for the following reasons:

-
-

- Harmful content or hate speech

-

- Violent or repulsive content

-

- Misleading advertising or spam

-

- Illegal activities

-

- Sexual content

-

- Or any other activity that violates the terms and conditions of use

- I am sure and understand that the reason for this report is included in the above list. -

{this.state.term_3? this.next()} >Next : null} - -
- ) - case 3: - return ( -
-
-

Given the above circumstances, to send this report or report please confirm that you understand and are following that you want to carry out this action

- I am sure of what I do and I want to send this complaint or report -

{this.state.term_confirm? this.end()} >Send report : null} - -
- ) - default: - return null - } - } - validate = { - term_1: (e) =>{this.setState({ term_1: e.target.checked })}, - term_2: (e) =>{this.setState({ term_2: e.target.checked })}, - term_3: (e) =>{this.setState({ term_3: e.target.checked })}, - confirm: (e) =>{this.setState({ term_confirm: e.target.checked })} - } - - render(){ - return( -
-
- - } /> - } /> - } /> - -
- {this.renderStep()} -
- ) - } -} - - -export const app_modals = { - report_post: (post_id) => { - antd.Modal.confirm({ - title: 'Report an post', - icon: , - content: 'It seems that you want to report this post, first of all it is necessary that you take into account that this tool is only intended for serious cases and we need you to comply with some questions to be able to report this post and to guarantee the quality of service ...', - onOk() { - return core.SwapMode.openFragment(<__Model_postreport id={post_id} />) - }, - onCancel() { - return false - }, - }); - } -} \ No newline at end of file diff --git a/packages/comty/src/core/libs/ui/modals/modals.less b/packages/comty/src/core/libs/ui/modals/modals.less deleted file mode 100644 index 6235c2cf..00000000 --- a/packages/comty/src/core/libs/ui/modals/modals.less +++ /dev/null @@ -1,9 +0,0 @@ -.post_report_main{ - padding: 0 0 0 115px; - &.mobile{ - padding: 0 0 60px; - } -} -.post_report_body{ - color: #2d2d2d!important; -} \ No newline at end of file diff --git a/packages/comty/src/core/libs/ui/notify/index.js b/packages/comty/src/core/libs/ui/notify/index.js deleted file mode 100644 index de6dab3e..00000000 --- a/packages/comty/src/core/libs/ui/notify/index.js +++ /dev/null @@ -1,92 +0,0 @@ -import { notification, message } from 'antd' -import { Triangle, FieldTimeOutlined, LoadingOutlined } from 'components/Icons' - -export const notify = { - fatal: (...res) => { - notification.error({ - message: 'Fatal Error', - icon: , - description: res, - placement: 'bottomLeft' - }) - }, - expire: (...res) => { - notification.error({ - message: 'Hey ', - icon: , - description: res, - placement: 'bottomLeft', - }) - }, - info: (...res) => { - notification.info({ - message: 'Well', - description: res.toString(), - placement: 'bottomLeft', - }) - }, - exception: (...res) => { - notification.error({ - message: 'WoW!', - description: res.toString(), - placement: 'bottomLeft', - }) - }, - warn: (...res) => { - notification.warn({ - message: 'Hey!', - description: res.toString(), - placement: 'bottomLeft', - }) - }, - success: (...res) => { - notification.success({ - message: 'Well', - description: res.toString(), - placement: 'bottomLeft', - }) - }, - error: (...res) => { - notification.error({ - message: 'Wopss', - description: ( -
- An wild error appear! : -
-
-
- {res.toString()} -
-
- ), - placement: 'bottomLeft', - }) - }, - proccess: (...res) => { - notification.open({ - icon: , - message: 'Please wait', - description:
{res}
, - placement: 'bottomLeft', - }) - }, - open: (props) => { - notification.open({ - placement: props.placement? props.placement : 'bottomLeft', - duration: props.duration? props.placement : 15, - icon: props.icon? props.icon : , - message: props.message? props.message : '', - description: props.description? props.description : '' - }) - }, - - } \ No newline at end of file diff --git a/packages/comty/src/core/libs/v3_model/index.js b/packages/comty/src/core/libs/v3_model/index.js deleted file mode 100644 index a5ffab5f..00000000 --- a/packages/comty/src/core/libs/v3_model/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import v3_request from 'api/lib/v3_request' -import endpointList from 'config/endpoints' -import config from 'config' - -const { endpoint_v3prefix } = config.app; - -export async function api_request(payload, callback) { - if (!payload) return false; - const { endpoint, body, serverKey, userToken } = payload; - - let petition = { - prefix: endpoint_v3prefix, - endpointList, - endpoint - } - - body ? (petition.body = body) : null; - serverKey ? (petition.server_key = serverKey) : null; - userToken ? (petition.access_token = userToken) : null; - - v3_request(petition, (...res) => { - return callback(...res); - }) -} - diff --git a/packages/comty/src/core/libs/verbosity/index.js b/packages/comty/src/core/libs/verbosity/index.js deleted file mode 100644 index ad475616..00000000 --- a/packages/comty/src/core/libs/verbosity/index.js +++ /dev/null @@ -1,89 +0,0 @@ -import settings from 'core/libs/settings' -import { objectToArrayMap } from 'core' -import stackTrace from 'stack-trace' -import path from 'path' -import colors from 'colors' -const verbosity_enabled = settings('verbosity') - -export function verbosity(data, params, stackTraceParams){ - if(!verbosity_enabled) return false - let initData; - initData = data - - let opt = { - color: "green", - type: "log" - } - let optStackTrace = { - activeColor: true, - line: false, - method: true, - file: false, - time: true - } - - const frame = stackTrace.get()[1] - - const stackTraceData = { - time: new Date().toLocaleTimeString(), - line: `(:${frame.getLineNumber()})`, - file: path.basename(frame.getFileName()), - method: `[${frame.getFunctionName()}]` - } - - if (typeof(params) !== "undefined" || params != null) { - objectToArrayMap(params).forEach((e) => { - if(typeof(e.value) !== "undefined"){ - opt[e.key] = e.value - } - }) - } - - if (typeof(stackTraceParams) !== "undefined" || stackTraceParams != null) { - objectToArrayMap(stackTraceParams).forEach((e) => { - if(typeof(e.value) !== "undefined"){ - optStackTrace[e.key] = e.value - } - }) - } - - if (opt.color) { - colors.enable() - } - - const stackTraceKeys = Object.keys(optStackTrace) - const stackTraceLength = stackTraceKeys.length - let modifyCount = 0 - let tmp - - for (let i = 0; i < stackTraceLength; i++) { - const key = stackTraceKeys[i] - const value = optStackTrace[stackTraceKeys[i]] - const divisor = (i == (stackTraceLength - 1)? " | " : " > ") - // console.log(`[${key}] is the ${i == stackTraceLength? "last opt" : `n[${i}]` }`) - // console.log(i, "/", stackTraceLength -1) - if(typeof(stackTraceData[key]) !== "undefined" && value){ - if (Array.isArray(initData)) { - if (modifyCount == 0) { - tmp = (`${stackTraceData[key]}`[opt.color] + divisor) - }else{ - tmp = (`${stackTraceData[key]}`[opt.color] + divisor + tmp) - } - if (i == (stackTraceLength - 1)){ - data.unshift(tmp) - } - }else{ - data = (`${stackTraceData[key]}`[opt.color] + divisor + data) - } - modifyCount++ - } - } - - if (Array.isArray(data)) { - return console[opt.type](...data) - } - - return console[opt.type](data) -} - -export default verbosity \ No newline at end of file diff --git a/packages/comty/src/core/libs/withConnector/index.js b/packages/comty/src/core/libs/withConnector/index.js deleted file mode 100644 index e7b9fbda..00000000 --- a/packages/comty/src/core/libs/withConnector/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { connect } from 'umi' - -export default (children) => { - return connect(({ app }) => ({ app }))(children) -} \ No newline at end of file diff --git a/packages/comty/src/core/models/helpers/index.js b/packages/comty/src/core/models/helpers/index.js deleted file mode 100644 index 9b3012f8..00000000 --- a/packages/comty/src/core/models/helpers/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import StreamingOverlay from 'components/StreamingOverlay' - -export function goLive(payload) { - window.overlaySwap.open({ - id: 'search', - mode: 'half', - size: "50%", - element: - }) -} \ No newline at end of file diff --git a/packages/comty/src/core/models/index.js b/packages/comty/src/core/models/index.js deleted file mode 100644 index 68175e92..00000000 --- a/packages/comty/src/core/models/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as session from './session' - -export { session } \ No newline at end of file diff --git a/packages/comty/src/core/models/overlay/index.js b/packages/comty/src/core/models/overlay/index.js deleted file mode 100644 index 5dec90bf..00000000 --- a/packages/comty/src/core/models/overlay/index.js +++ /dev/null @@ -1,7 +0,0 @@ -export function newSearch(payload) { - window.overlaySwap.open({ - id: 'search', - mode: 'half', - element:
NAH
- }) -} diff --git a/packages/comty/src/core/models/session/index.js b/packages/comty/src/core/models/session/index.js deleted file mode 100644 index 6d8f17de..00000000 --- a/packages/comty/src/core/models/session/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import endpoints from 'config/endpoints'; -import { v3_model } from 'core/libs'; - -function auth(payload, callback) { - if (!payload) return false; - const { username, password, server_key } = payload; - - if (username && password) { - const frame = { username: atob(username), password: atob(password) } - v3_model.api_request( - { - body: frame, - endpoint: endpoints.auth, - serverKey: server_key - }, - (err, res) => { - return callback(err, res); - }, - ); - } else { - const res = { status: 100, message: 'Invalid Credentials!' }; - return callback(res, false); - } -} - -function deauth(payload, callback) { - if (!payload) return false; - const frame = { id: payload.id, type: "delete"} - v3_model.api_request( - { - body: frame, - endpoint: endpoints.sessions, - serverKey: payload.server_key, - userToken: payload.userToken - }, - (err, res) => { - return callback(err, res); - }, - ); -} - -const backup = { - get: () => {}, - set: () => {}, -}; - - - -export { auth, deauth, backup }; diff --git a/packages/comty/src/layouts/BaseLayout.js b/packages/comty/src/layouts/BaseLayout.js deleted file mode 100644 index ac1cde65..00000000 --- a/packages/comty/src/layouts/BaseLayout.js +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import { Helmet } from 'react-helmet' -import { Loader } from 'components' -import { withRouter, connect } from 'umi' -import { queryLayout } from 'core' -import WindowNavbar from 'components/Layout/WindowNavbar' -import config from 'config' -import { Splash } from 'components' - -import PrimaryLayout from './PrimaryLayout' -import PublicLayout from './PublicLayout' - -import 'theme/index.less' - -const LayoutMap = { - primary: PrimaryLayout, - public: PublicLayout, -} - -@withRouter -@connect(({ app, loading }) => ({ app, loading })) -export default class BaseLayout extends React.Component { - previousPath = '' - renderLoading = true - - render() { - const { loading, children, location, app } = this.props - const Container = LayoutMap[queryLayout(config.layouts, location.pathname)] - const currentPath = location.pathname + location.search - - if (currentPath !== this.previousPath) { - this.renderLoading = true - } - - if (!loading.global) { - this.previousPath = currentPath - this.renderLoading = false - } - - if (app.splash.render) { - return - } - - return ( - - - {config.app.siteName} - - {this.props.app.electron? : null} - {Loader(this.renderLoading)} - {children} - - ) - } -} \ No newline at end of file diff --git a/packages/comty/src/layouts/PrimaryLayout.js b/packages/comty/src/layouts/PrimaryLayout.js deleted file mode 100644 index 5e8458e8..00000000 --- a/packages/comty/src/layouts/PrimaryLayout.js +++ /dev/null @@ -1,144 +0,0 @@ -import React from 'react' -import { withRouter, connect } from 'umi' -import { AppLayout } from 'components' -import { enquireScreen, unenquireScreen } from 'enquire-js' -import store from 'store' -import classnames from 'classnames' - -import config from 'config' -import { theme } from 'core/libs/style' -import * as antd from 'antd' -import contextMenuList from 'schemas/contextMenu' - -const { Content } = antd.Layout -const { Sider, Overlay, RightSider } = AppLayout -const isActive = (key) => { return key ? key.active : false } - -@withRouter -@connect(({ app, contextMenu, loading }) => ({ app, contextMenu, loading })) -export default class PrimaryLayout extends React.Component { - constructor(props) { - super(props) - this.state = { - collapsed: config.defaults.sidebarCollaped ? true : false, - isMobile: false - } - - // include API extensions - window.dispatcher = this.props.dispatch - window.openLink = (e) => { - if (this.props.app.embedded) { - this.props.app.electron.shell.openExternal(e) - } else { - window.open(e) - } - } - - window.requireQuery = (require) => { - return new Promise(resolve => { - this.props.dispatch({ - type: 'app/requireQuery', - payload: require, - callback: (e) => { - resolve(e) - } - }) - }) - } - - window.inspectElement = (e) => this.props.dispatch({ - type: "app/ipcInvoke", - payload: { - key: "inspectElement", - payload: { x: e.xPos, y: e.yPos } - } - }) - - window.toogleSidebarCollapse = () => { - this.props.dispatch({ - type: "app/updateState", - payload: { sidebar_collapsed: !this.props.app.sidebar_collapsed } - }) - } - } - - componentDidMount() { - if (this.props.app.embedded) { - window.contextMenu.addEventListener( - { - priority: 1, - onEventRender: contextMenuList, - ref: document.getElementById("root") - } - ) - } - - this.enquireHandler = enquireScreen(mobile => { - const { isMobile } = this.state - if (isMobile !== mobile) { - window.isMobile = mobile - this.setState({ isMobile: mobile }) - } - }) - - } - - componentWillUnmount() { - unenquireScreen(this.enquireHandler) - if (this.props.contextMenu) { - window.contextMenu.destroy() - } - } - - onCollapseChange = () => { - const fromStore = store.get('collapsed') - this.setState({ collapsed: !this.state.collapsed }) - store.set('collapsed', !fromStore) - } - - render() { - const { location, dispatch, children, app } = this.props - const { collapsed, isMobile } = this.state - const { onCollapseChange } = this - const currentTheme = theme.get() - - const SiderProps = { isMobile, collapsed, onCollapseChange } - const OverlayProps = { isMobile } - - window.darkMode = isActive(currentTheme["darkmode"]) ? true : false - document.getElementsByTagName("body")[0].setAttribute("class", window.darkMode ? "dark" : "light") - - return ( - - {isActive(currentTheme['backgroundImage']) - ?
: null} - - -
- - {children ? children : null} - -
- - -
- - ) - } -} \ No newline at end of file diff --git a/packages/comty/src/layouts/PublicLayout.js b/packages/comty/src/layouts/PublicLayout.js deleted file mode 100644 index cd95fc88..00000000 --- a/packages/comty/src/layouts/PublicLayout.js +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import store from 'store' - -import { enquireScreen, unenquireScreen } from 'enquire-js' - -import * as antd from 'antd' - -import styles from './PublicLayout.less' - -const { Content } = antd.Layout - -export default class PublicLayout extends React.Component { - constructor(props) { - super(props) - window.PrimaryComponent = this - this.state = { - isMobile: false, - } - } - - componentDidMount() { - this.enquireHandler = enquireScreen(mobile => { - const { isMobile } = this.state - if (isMobile !== mobile) { - this.setState({ - isMobile: mobile, - }) - store.set('mobile_src', mobile) - } - }) - } - - componentWillUnmount() { - unenquireScreen(this.enquireHandler) - } - - - render() { - const { children } = this.props - return ( - - -
- - {children} - -
-
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/layouts/PublicLayout.less b/packages/comty/src/layouts/PublicLayout.less deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/comty/src/layouts/index.js b/packages/comty/src/layouts/index.js deleted file mode 100644 index bb54bbb2..00000000 --- a/packages/comty/src/layouts/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import BaseLayout from './BaseLayout' -import { withRouter } from 'umi' - -@withRouter -class Layout extends React.Component { - componentDidMount(){ - const appBody = document.getElementsByTagName("body")[0] - appBody.setAttribute("id", "appWrapper") - } - render() { - const { children } = this.props - return ( - {children} - ) - } -} - -export default Layout diff --git a/packages/comty/src/models/app.js b/packages/comty/src/models/app.js deleted file mode 100644 index 22eba0b1..00000000 --- a/packages/comty/src/models/app.js +++ /dev/null @@ -1,433 +0,0 @@ -import store from 'store' -import config from 'config' -import keys from 'config/keys' -import { session } from 'core/models' -import { verbosity } from '@nodecorejs/utils' -import settings from 'core/libs/settings' -import { queryIndexer } from 'core' -import Cryptr from 'cryptr' - -import jwt from 'jsonwebtoken' -import cookie from 'cookie_js' - -export default { - namespace: 'app', - state: { - fadeclock: 500, - splash: { - render: true, - fadeout: false - }, - queryDone: false, - style_prefix: config.app.defaultStyleClass ?? "app_", - env_proccess: process.env, - server_key: keys.server_key, - - service_valid: false, - session_valid: false, - - session_authframe: null, - session_token: null, - session_data: null, - session_uuid: null, - - sidebar_collapsed: store.get("sidebar_collapse") ?? false, - overlayActive: false, - overlayElement: null, - embedded: false, - dispatcher: null, - - electron: null, - app_settings: store.get(config.app.storage.settings) || [], - app_theme: store.get(config.app.storage.theme) || [], - notifications: [], - }, - subscriptions: { - setup({ dispatch }) { - dispatch({ type: 'updateState', payload: { dispatcher: dispatch } }) - dispatch({ type: 'earlyInit' }) - dispatch({ type: 'updateFrames' }) - dispatch({ type: 'validateSession' }) - dispatch({ type: 'initHeaderSocket' }) - dispatch({ type: 'query' }) - }, - setupHistory({ dispatch, history }) { - history.listen(location => { - dispatch({ - type: 'updateState', - payload: { - locationPathname: location.pathname, - locationQuery: location.query, - }, - }) - }) - }, - setupRequestCancel({ history }) { - history.listen(() => { - const { cancelRequest = new Map() } = window - cancelRequest.forEach((value, key) => { - if (value.pathname !== window.location.pathname) { - cancelRequest.delete(key); - } - }) - }) - }, - }, - effects: { - *earlyInit({ dispatcher }, { call, put, select }) { - const state = yield select(state => state.app) - - window.classToStyle = (key) => { - if (typeof (key) !== "string") { - try { - const toString = JSON.stringify(key) - if (toString) { - return toString - } else { - return null - } - } catch (error) { - return null - } - } - if (typeof (state.style_prefix) !== "undefined") { - return `${state.style_prefix}${key}` - } - return key - } - - try { - const electron = window.require("electron") - state.dispatcher({ type: 'updateState', payload: { electron, embedded: true } }) - } catch (error) { - // nothing - } - - }, - *query({ payload }, { call, put, select }) { - const state = yield select(state => state.app) - - window.Plugins = [] - window.Internal = [] - - queryIndexer([ - { - match: '/s;:id', - to: `/settings?key=:id`, - }, - { - match: '/h;:id', - to: `/hashtag?key=:id`, - }, - { - match: '/post/:id', - to: `/post?key=:id`, - }, - { - match: '/@:id', - to: `/@/:id`, - } - ], (callback) => { - window.location = callback - }) - - if (state.session_valid) { - if (state.session_authframe && state.session_data) { - state.dispatcher({ type: "closeSplash" }) - } else { - setTimeout(() => location.reload(), 5000) - } - } else { - state.dispatcher({ type: "closeSplash" }) - } - }, - *closeSplash({ }, { select }) { - const state = yield select(state => state.app) - state.dispatcher({ type: "updateState", payload: { queryDone: true, splash: { render: true, fadeout: state.fadeclock } } }) - setTimeout(() => { - state.dispatcher({ type: "updateState", payload: { splash: { render: false, fadeout: false } } }) - }, state.fadeclock) - }, - *initHeaderSocket({ callback }, { call, put, select }) { - const state = yield select(state => state.app) - - state.dispatcher({ - type: 'socket/createNodeSocket', payload: { - locked: true, - isHeader: true - }, - then: () => { - state.dispatcher({ type: "updateState", payload: { service_valid: true } }) - } - }) - }, - *refreshToken({ callback }, { call, put, select }) { - const state = yield select(state => state.app) - state.dispatcher({ - type: "socket/use", - scope: "auth", - invoke: "token", - query: { - payload: { - token: state.session_authframe - }, - callback: (callbackResponse) => { - if (typeof (callback) !== "undefined") { - callback(callbackResponse) - } - verbosity.log(callbackResponse) - if (callbackResponse.code == 100) { - state.dispatcher({ - type: "setAuth", payload: { - token: callbackResponse.response.token, - authFrame: jwt.decode(callbackResponse.response.token), - dataFrame: state.session_data - } - }) - state.dispatcher({ type: "updateState", payload: { session_valid: true } }) - } - if (callbackResponse.code == 110) { - verbosity.log(`this session is no valid, erasing data`) - state.dispatcher({ type: "sessionErase" }) // remove without calling api, its already logged out/invalid - } - } - } - }) - - }, - *logout({ payload }, { put, select }) { - const state = yield select(state => state.app) - - session.deauth({ - id: state.session_uuid, - userToken: state.session_token, - server_key: state.server_key - }, (err, res) => { - verbosity.log(res) - state.dispatcher({ type: "sessionErase" }) - }) - - }, - *login({ payload, callback }, { call, put, select }) { - const state = yield select(state => state.app) - if (!payload) return false - const cryptr = new Cryptr(keys.server_key) - - state.dispatcher({ - type: "socket/use", - scope: "auth", - invoke: "authentication", - query: { - payload: { - username: btoa(payload.username), - password: cryptr.encrypt(payload.password) - }, - callback: (callbackResponse) => { - console.log(callbackResponse) - const { authFrame, dataFrame, token } = callbackResponse.response - if (typeof (callback) !== "undefined") { - callback(callbackResponse.code) - } - if (callbackResponse.code == 100) { - state.dispatcher({ type: "setAuth", payload: { token, authFrame, dataFrame } }) - location.reload() - } - } - } - }) - }, - *validateSession({ payload }, { put, select }) { - const state = yield select(state => state.app) - if (state.session_authframe) { - if (typeof (state.session_authframe.exp) == "undefined") { - return false // no support refresh token when is invalid by ws - } - - const now = new Date() - const createdIat = state.session_authframe.iat * 1000 - const expirationTime = (state.session_authframe.iat + state.session_authframe.exp) * 1000 - - const isExpired = expirationTime < now.getTime() - - verbosity.log(`TOKEN EXPIRES => (${new Date(expirationTime).toLocaleString()})`, `NOW => (${now.toLocaleString()})`) - - if (isExpired) { - verbosity.log(`This session_token is expired`) // TODO: Add verbosity color - if (settings("session_noexpire")) { - verbosity.log(`(session_noexpire) is enabled, refreshing token`) - state.dispatcher({ type: "refreshToken" }) - } else { - return state.dispatcher({ type: "sessionErase" }) // remove session - } - } - - if (!state.session_data) { - verbosity.log(`session_data is not valid but the session is valid, updating from ws`) - state.dispatcher({ type: "updateUserData" }) - } - - state.dispatcher({ type: "updateState", payload: { session_valid: true } }) - } - }, - *updateUserData({ payload }, { put, select }) { - const state = yield select(state => state.app) - - state.dispatch({ - type: "socket/use", - scope: "users", - invoke: "get", - query: { - payload: { - from: "data", - user_id: state.app.session_uuid, - userToken: state.app.session_token - }, - callback: (callbackResponse) => { - try { - sessionStorage.setItem(config.app.storage_dataFrame, btoa(JSON.stringify(callbackResponse.response))) - return state.dispatcher({ type: "updateState", payload: { session_data: callbackResponse.response } }) - } catch (error) { - verbosity.log(error) - } - } - } - }) - - }, - *updateTheme({ payload }, { put, select }) { - if (!payload) return false - let container = yield select(state => state.app.app_theme) - let style_keys = [] - let tmp = [] - - container.forEach((e) => { style_keys[e.key] = e.value }) - - if (!style_keys[payload.key]) { - tmp.push({ key: payload.key, value: payload.value }) - } - container.forEach((e) => { - let obj = {} - if (e.key === payload.key) { - obj = { key: payload.key, value: payload.value } - } else { - obj = { key: e.key, value: e.value } - } - tmp.push(obj) - }) - return tmp ? yield put({ type: 'handleUpdateTheme', payload: tmp }) : null - }, - *updateFrames({ payload }, { select, put }) { - try { - let sessionAuthframe = cookie.get(config.app.storage_authFrame) - let sessionDataframe = atob(sessionStorage.getItem(config.app.storage_dataFrame)) - - if (sessionAuthframe) { - try { - sessionAuthframe = jwt.decode(sessionAuthframe) - yield put({ - type: "updateState", - payload: { - session_authframe: sessionAuthframe, - session_token: sessionAuthframe.session_token, - session_uuid: sessionAuthframe.session_uuid - } - }) - } catch (error) { - cookie.remove(config.app.storage_authFrame) - } - } - if (sessionDataframe) { - try { - sessionDataframe = JSON.parse(sessionDataframe) - yield put({ - type: "updateState", - payload: { - session_data: sessionDataframe - } - }) - } catch (error) { - sessionDataframe = null - sessionStorage.clear() - } - } - } catch (error) { - verbosity.log(error) - } - - } - }, - reducers: { - updateState(state, { payload }) { - return { - ...state, - ...payload, - }; - }, - setAuth(state, { payload }) { - if (!payload) return false - state.session_token = payload.authFrame.session_token - state.session_uuid = payload.authFrame.session_uuid - state.session_data = payload.dataFrame - state.session_authframe = jwt.decode(payload.token) - state.session_valid = true - - cookie.set(config.app.storage_authFrame, payload.token) - sessionStorage.setItem(config.app.storage_dataFrame, btoa(JSON.stringify(payload.dataFrame))) - }, - handleUpdateTheme(state, { payload }) { - verbosity.log(payload) - store.set(config.app.storage_theme, payload) - state.app_theme = payload - }, - requireQuery(state, { payload, callback }) { - if (!payload || !callback) return false - switch (payload) { - case 'login': { - callback(state.session_valid) - break; - } - case 'guest': { - callback(!state.session_valid) - break; - } - case 'dev': { - if (state.session_data) { - return callback(state.session_data.dev ? true : false) - } - return callback(false) - } - case 'embedded': { - callback(state.electron ? true : false) - break; - } - default: { - break; - } - } - }, - ipcInvoke(state, { payload }) { - if (!payload || !state.embedded) { - return false - } - const ipc = state.electron.ipcRenderer - ipc.invoke(payload.key, payload.payload) - }, - ipcSend(state, { payload }) { - if (!payload || !state.embedded) { - return false - } - const ipc = state.electron.ipcRenderer - ipc.send(payload.key, payload.payload) - }, - sessionErase(state) { - state.service_valid = false; - state.session_valid = false; - state.session_data = null; - state.session_token = null; - state.session_authframe = null; - cookie.remove(config.app.storage_authFrame) - sessionStorage.clear() - location.reload() - }, - }, -} diff --git a/packages/comty/src/models/contextMenu.js b/packages/comty/src/models/contextMenu.js deleted file mode 100644 index 4518eec2..00000000 --- a/packages/comty/src/models/contextMenu.js +++ /dev/null @@ -1,107 +0,0 @@ -import { OpenContextMenu, DestroyContextMenu } from 'components/Layout/ContextMenu' -import { verbosity } from '@nodecorejs/utils' - -const defaultState = { - xPos: 0, - yPos: 0, - renderList: null, - eventHandlers: [], -} - -export default { - namespace: 'contextMenu', - state: defaultState, - subscriptions: { - setup({ dispatch }) { - window.contextMenu = { - open: (payload) => { - if (!payload) return false - dispatch({ type: "open", payload }) - }, - destroy: () => { - dispatch({ type: "destroy" }) - }, - addEventListener: (payload) => { - if (!payload) return false - dispatch({ type: "handleAddEvent", payload: payload }) - } - } - - document.getElementById("root").addEventListener("contextmenu", (e) => { - dispatch({ type: "handleEvents", payload: e }) - }, false) - - dispatch({ type: "setup" }) - } - }, - effects: { - *setup({payload}, { select, put }){ - const state = yield select(state => state.contextMenu) - window.contextMenu = { ...window.contextMenu, ...state } - }, - *handleEvents({payload}, { select, put }){ - const eventHandlers = yield select(state => state.contextMenu.eventHandlers) - verbosity.log("New event recived =>", payload) // TODO: Add verbosity color > { color: "magenta"} - - if (Array.isArray(eventHandlers)) { - let byIndex = [] - let prioritys = [] - - eventHandlers.forEach((e) => { - if (typeof(e.ref) !== "undefined") { - if (e.ref.contains(payload.srcElement)) { - byIndex[e.priority] = e - prioritys = Object.keys(byIndex).sort() - } - } - }) - - prioritys = prioritys.reverse() - const prioritaryEvent = byIndex[prioritys[0]] - - if (prioritaryEvent != null && typeof(prioritaryEvent.onEventRender) !== "undefined") { - payload.preventDefault() - window.contextMenu.open({ - renderList: prioritaryEvent.onEventRender, - ...prioritaryEvent.props, - yPos: payload.clientY, - xPos: payload.clientX, - event: payload - }) - }else{ - yield put({ type: "close" }) - verbosity.log('not valid events detected') - } - - }else{ - verbosity.log('eventHandlers is not an array, exiting') - } - - }, - *open({payload}, { select, put }){ - OpenContextMenu(payload) - } - }, - reducers: { - updateState(state, { payload }) { - return { - ...state, - ...payload, - }; - }, - handleAddEvent(state, { payload }){ - let tmp = [] - tmp.push(payload) - - const concated = state.eventHandlers.concat(tmp) - state.eventHandlers = concated - }, - open(state, { payload }){ - state = {...state, ...payload} - }, - close(state){ - state = defaultState - DestroyContextMenu() - } - }, -} diff --git a/packages/comty/src/models/socket.ts b/packages/comty/src/models/socket.ts deleted file mode 100644 index f79e612d..00000000 --- a/packages/comty/src/models/socket.ts +++ /dev/null @@ -1,155 +0,0 @@ -import config from 'config' -import { verbosity, objectToArrayMap } from '@nodecorejs/utils' - -import SocketConnection from 'core/libs/socket/index.ts' - -export default { - namespace: 'socket', - state: { - nodes: {}, - socket_address: config.app.endpoint_websocket, //set by default - socket_port: "7000", - headerNode: "/" - }, - effects: { - *createNodeSocket({ payload, then }, { select, put }) { - const state = yield select(state => state) - let opt = { - namespaceOrigin: state.socket.headerNode, - hostname: `${state.socket.socket_address}:${state.socket.socket_port}`, // set stated data - port: state.socket.socket_port, - reconnectionAttempts: 10 - } - - if (typeof (payload) !== "undefined") { - opt = { ...opt, ...payload } - } - - try { - new SocketConnection({ - namespaceOrigin: opt.namespaceOrigin, - connector: state.app.dispatcher, - payload: opt, - then: () => { - if (typeof (then) !== "undefined") { - return then(true) - } - } - }) - } catch (error) { - verbosity.log(error) - } - }, - *namespaceConnector({ namespace, node }, { select, put }) { - if (!node || !namespace) { - verbosity.log(`cannot connect to a namespace without declaring the namespace/node`) - return false - } - const state = yield select(state => state.socket) - state.nodes[node].namespaceConnector(`/${namespace}`) - }, - *resetHeader({ }, { put }) { - yield put({ type: "createNodeSocket" }) - }, - *use({ scope, invoke, query, persistent, then }, { put, select }) { - const state = yield select(state => state) - if (!scope) { - verbosity.log(`scope is missing`) - return false - } - if (typeof(persistent) == "undefined" ) { - persistent = false - } - if (!state.socket.nodes[scope] && scope !== state.socket.headerNode) { - let opt = { - namespaceOrigin: `/${scope}`, - hostname: `${state.socket.socket_address}:${state.socket.socket_port}`, - port: state.socket.socket_port, - reconnectionAttempts: 10, - forceNew: true - } - - new SocketConnection({ - namespaceOrigin: opt.namespaceOrigin, - connector: state.app.dispatcher, - payload: opt, - then: (socket) => { - if (typeof(then) !== "undefined") { - then(socket) - } - if (typeof(query) !== "undefined") { - socket._emit(invoke, query.payload, (...callbacks) =>{ - new Promise((resolve, reject) => resolve(query.callback(...callbacks)) ).then(() => { - if (!persistent) { - socket.remove() - } - }) - }) - } - } - }) - }else{ - state.socket.nodes[scope].ioConn._emit(invoke, query.payload, (callback) =>{ - query.callback(callback) - state.socket.nodes[scope].ioConn.remove() - }) - } - }, - *break({ listener, node }, { select, put }) { - if (!node || !listener) { - verbosity.log(`cannot change a listener without declaring the node/listener`) - return false - } - const state = yield select(state => state.socket) - state.nodes[node].ioConn.updateListener(listener, false) - }, - *resume({ listener, node }, { select, put }) { - if (!node || !listener) { - verbosity.log(`cannot change a listener without declaring the node/listener`) - return false - } - const state = yield select(state => state.socket) - state.nodes[node].ioConn.updateListener(listener, true) - }, - *toogleListener({ listener, node }, { select, put }) { - if (!node || !listener) { - verbosity.log(`cannot change a listener without declaring the node/listener`) - return false - } - const state = yield select(state => state.socket) - state.nodes[node].ioConn.updateListener(listener) - }, - *destroyNode({ node }, { select, put }) { - if (!node) { - verbosity.log(`cannot destroy a node without declaring it`) - return false - } - const state = yield select(state => state.socket) - if (state.nodes[node].connectionState !== "closed") { - verbosity.log("The node is not closed!, closing before destroying") - state.nodes[node].ioConn._close() - } - let updated = {} - - objectToArrayMap(state.nodes).forEach(e => { - if (e.key !== node) { - updated[e.key] = e.value - } - }) - - yield put({ type: "updateState", payload: { nodes: updated } }) - }, - - }, - reducers: { - updateState(state, { payload }) { - return { - ...state, - ...payload, - }; - }, - updateStateFromSocket(state, { payload, node }) { - state.nodes[node] = payload - }, - }, -}; diff --git a/packages/comty/src/models/streaming.js b/packages/comty/src/models/streaming.js deleted file mode 100644 index a4a1b18c..00000000 --- a/packages/comty/src/models/streaming.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - namespace: 'streaming', - state: { - onStreaming: false, - isConnected: false, - }, - effects: { - *initStreaming({ payload }, { select, put }) { - - }, - - }, - reducers: { - updateState(state, { payload }) { - return { - ...state, - ...payload, - }; - } - } -} diff --git a/packages/comty/src/models/user.ts b/packages/comty/src/models/user.ts deleted file mode 100644 index 8f38a3bc..00000000 --- a/packages/comty/src/models/user.ts +++ /dev/null @@ -1,61 +0,0 @@ -export default { - namespace: 'user', - state: {}, - effects: { - *actions({callback, payload}, { call, select }) { - dispatch({ - type: "socket/use", - scope: "users", - invoke: "actions", - query: { - payload: { - from: payload.from, - user_id: payload.user_id ?? state.app.session_uuid, - username: payload.username ?? state.app.session_authframe["username"], - userToken: state.app.session_token - }, - callback: (callbackResponse) => { - return callback(callbackResponse) - } - } - }) - }, - *get({ callback, payload }, { call, put, select }) { - const dispatch = yield select(state => state.app.dispatcher) - const state = yield select(state => state) - - if (!payload) { - return callback({code: 115, response: "payload is missing/invalid"}) - } - dispatch({ - type: "socket/use", - scope: "users", - invoke: "get", - query: { - payload: { - from: payload.from, - user_id: payload.user_id ?? state.app.session_uuid, - username: payload.username ?? state.app.session_authframe["username"], - userToken: state.app.session_token - }, - callback: (callbackResponse) => { - return callback(callbackResponse) - } - } - }) - - - }, - *set({ payload }, { call, put, select }) { - - }, - }, - reducers: { - updateState(state, { payload }) { - return { - ...state, - ...payload, - }; - } - }, -}; diff --git a/packages/comty/src/pages/404.js b/packages/comty/src/pages/404.js deleted file mode 100644 index a0c3ba3c..00000000 --- a/packages/comty/src/pages/404.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import styles from './404.less' - -const Error404 = () => ( -
- -

OBA BLYAT

-

- ERROR 404 -

-
-) - -export default Error404 diff --git a/packages/comty/src/pages/404.less b/packages/comty/src/pages/404.less deleted file mode 100644 index ac10f8cc..00000000 --- a/packages/comty/src/pages/404.less +++ /dev/null @@ -1,55 +0,0 @@ -/* devanagari */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v6/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2'); - unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; -} - -/* latin-ext */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v6/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v6/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -.error { - background-color: transparent; - color: black; - text-align: center; - position: absolute; - top: 30%; - margin-top: -50px; - left: 50%; - margin-left: -100px; - width: 200px; - - :global .anticon { - font-size: 48px; - margin-bottom: 16px; - } - - h1 { - font-family: 'Poppins', sans-serif; - - } - - p { - font-family: 'Poppins', sans-serif; - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/@/[user].js b/packages/comty/src/pages/@/[user].js deleted file mode 100644 index 5713afdf..00000000 --- a/packages/comty/src/pages/@/[user].js +++ /dev/null @@ -1,237 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { verbosity, objectToArrayMap } from '@nodecorejs/utils' -import * as Icons from 'components/Icons' -import { connect } from 'umi' - -import { pathMatchRegexp, booleanFix } from 'core' -import HandleError from 'core/libs/errorhandler' -import GlobalBadges from 'schemas/badges_list.json' -import { Invalid, PostsFeed} from 'components' -import FollowButton from './components/follow' - -import styles from './index.less' - -export class UserLayout extends React.Component { - state = { - styleComponent: "UserLayout", - userString: pathMatchRegexp('/@/:id', location.pathname)[1], - layoutData: { - avatar: null, - cover: null, - about: null, - followed: null, - followers: null - } - } - - handleClickFollow(user_id) { - if (typeof (this.props.onFollow) !== "undefined") { - this.updateFollow(!booleanFix(this.state.layoutData.is_following)) - - this.props.onFollow(user_id, (callback) => { - this.updateFollow(callback) - }) - } - } - - updateFollow(to) { - let updated = this.state.layoutData - updated.is_following = to - this.setState({ layoutData: updated }) - } - - componentDidMount() { - const { layoutData } = this.props - if (layoutData) { - this.setState({ layoutData: { ...this.state.layoutData, ...layoutData } }) - } - } - - renderUserBadges() { - let { layoutData } = this.state - if (typeof(layoutData.user_tags) == "undefined") { - return null - } - let userTags = objectToArrayMap(layoutData.user_tags) - let renderTags = [] - - if (!userTags) { - return null - } - - try { - userTags = JSON.parse(userTags[0].value.badges) - } catch (error) { - console.log(error) - } - - if (!userTags) { - return null - } - - objectToArrayMap(GlobalBadges).forEach(e => { - if(userTags.includes(e.value.id)) { - renderTags.push(e.value) - } - }) - - try { - if (Array.isArray(userTags)) { - return renderTags.map((element) => { - return( - - - {element.title ?? "maybe"} - - - ) - }) - } - } catch (error) { - return null - } - return null - } - - render() { - const { styleComponent } = this.state - const toStyles = e => styles[`${styleComponent}_${e}`] - const { followers_count } = this.state.layoutData.details ?? {} - const isFollowed = booleanFix(this.state.layoutData.is_following) - - if (!this.state.layoutData) { - return null - } - return ( -
-
- -
-
- -
- -
-
-
- {/* {this.renderUserBadges()} */} -
- -

{this.state.userString}

-
- - -
- -
-
{ this.handleClickFollow(this.state.layoutData.user_id) }} followed={isFollowed} />
-
- -
- -
- -
-
- ) - } -} - -@connect(({ app }) => ({ app })) -export default class UserIndexer extends React.Component { - state = { - ErrorCode: null, - loading: true, - response: null, - layoutData: null - } - - promiseState = async state => new Promise(resolve => this.setState(state, resolve)); - - handleClickFollow(user_id, callback) { - if (this.props.app.session_valid) { - const requestCallback = (callbackResponse) => { - if (callbackResponse.code == 200) { - const response = callbackResponse.response - const result =( response.follow ?? false) == "followed" ? true : false - if (typeof(response) !== "undefined") { - return callback(result) - }else{ - return false - } - }else{ - return callback(null) - } - } - - this.props.dispatch({ - type: "socket/use", - scope: "users", - invoke: "actions", - query: { - payload: { - userToken: this.props.app.session_token, - action: "follow", - user_id, - }, - callback: requestCallback - } - }) - }else{ - verbosity.log(`Needs auth to dispatch 'actions' event`) - } - - } - - componentDidMount() { - const matchRegexp = pathMatchRegexp('/@/:id', location.pathname) - - if (matchRegexp && this.props.app.session_valid) { - this.props.dispatch({ - type: "user/get", - payload: { - from: "profileData", - username: matchRegexp[1] - }, - callback: (callbackResponse) => { - if (callbackResponse.code == 200) { - this.setState({ loading: false, layoutData: callbackResponse.response }) - } else { - this.setState({ ErrorCode: callbackResponse.code }) - return HandleError({ code: callbackResponse.code, msg: "no message provided" }) - } - - } - }) - } else { - this.setState({ ErrorCode: 140 }) - } - } - render() { - if (this.state.ErrorCode) { - return - } - if (this.state.loading) { - return
- } - return ( -
- {this.handleClickFollow(...context)}} layoutData={this.state.layoutData} /> - -
- - ) - } -} - diff --git a/packages/comty/src/pages/@/components/badges/index.js b/packages/comty/src/pages/@/components/badges/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/comty/src/pages/@/components/follow/index.js b/packages/comty/src/pages/@/components/follow/index.js deleted file mode 100644 index e1733237..00000000 --- a/packages/comty/src/pages/@/components/follow/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react' -import styles from './index.less' -import classnames from 'classnames' - -const FollowButton = (props) => { - return ( - - {props.followed ? 'Following' : 'Follow'} - - ) -} - -export default FollowButton diff --git a/packages/comty/src/pages/@/components/follow/index.less b/packages/comty/src/pages/@/components/follow/index.less deleted file mode 100644 index 3c3a5d7e..00000000 --- a/packages/comty/src/pages/@/components/follow/index.less +++ /dev/null @@ -1,32 +0,0 @@ -.button { - user-select: none; - width: 100px; - height: 30px; - padding: 5px 15px; - text-decoration: none; - text-align: center; - vertical-align: middle; - letter-spacing: 1px; - - &:hover { - color: #7e7e7e; - } - - &.disabled{ - &:hover { - border: none; - content: ''; - color: white; - border-radius: 8px; - background: linear-gradient(120deg, #6559ae, #ff7159, #6559ae); - background-size: 400% 400%; - animation: gradient 15s ease-in-out infinite, border 1s forwards ease-in-out reverse; - } - } -} - -@keyframes gradient { - 0% { background-position: 14% 0%; } - 50% { background-position: 87% 100%; } - 100% { background-position: 14% 0%; } -} diff --git a/packages/comty/src/pages/@/components/menu/index.js b/packages/comty/src/pages/@/components/menu/index.js deleted file mode 100644 index 51144682..00000000 --- a/packages/comty/src/pages/@/components/menu/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { MoreOutlined } from 'components/Icons' - -const moreMenu = ( - - __ - __set2 - -) - -const Menu = (props) => { - return ( - - - - ) -} - -export default Menu diff --git a/packages/comty/src/pages/@/index.less b/packages/comty/src/pages/@/index.less deleted file mode 100644 index 5a64cd09..00000000 --- a/packages/comty/src/pages/@/index.less +++ /dev/null @@ -1,111 +0,0 @@ -.UserLayout_wrapper{ - display: flex; - height: 100%; - width: 100%; - - flex-direction: column; - align-items: center; - - margin: auto; - overflow: overlay !important; -} - -.UserLayout_header{ - font-family: "Poppins", sans-serif; - color: #242424; - - vertical-align: top; - display: flex; - padding: 20px; - - height: auto; - width: 100%; - - max-width: 600px; - max-height: 200px; - - background-color: #ffffff; - border-radius: 0 0 20px 20px; - transform: translate(0, -5px); -} - -.UserLayout_cover{ - display: flex; - align-content: center; - - max-height: 400px; - max-width: 600px; - - overflow: hidden; - border-radius: 15px 15px 0 0; - border-radius: 8px; - - img { - width: 100%; - margin: auto; - } -} - -.UserLayout_title{ - color: #2d2d2d; - font-weight: 500; - font-size: 20px; - line-height: 28px; - width: 100%; - height: 100%; - word-break: break-all; - - h1 { - margin: 0; - width: fit-content; - } - - span{ - word-break: break-all; - } -} - -.UserLayout_avatar { - transform: translate(-35px, -45px); - - &>span { - width: 100%; - height: 100%; - } - - &.mobile{ - transform: translate(0,-90px); - margin: auto; - } - - :global { - .ant-avatar { - box-shadow: 13px 13px 17px 4px rgba(69, 69, 69, 0.151); - border-radius: 7px; - height: 120px; - width: 120px; - - img { - height: 100%; - width: 100%; - } - } - } -} - -.UserLayout_options{ - display: flex; - flex-direction: column; - text-align: left; - - > div { - text-align: left; - margin-bottom: 15px; - } -} - - - -.UserLayout_content{ - -} \ No newline at end of file diff --git a/packages/comty/src/pages/[indexer].js b/packages/comty/src/pages/[indexer].js deleted file mode 100644 index 8996c437..00000000 --- a/packages/comty/src/pages/[indexer].js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import Error404 from './404.js' - -export default class PageIndexer extends React.Component { - render() { - const { location } = this.props - - // By default return Error 404 - return ( -
- -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/explore/index.js b/packages/comty/src/pages/explore/index.js deleted file mode 100644 index f7f6ed04..00000000 --- a/packages/comty/src/pages/explore/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react' -import { PostsFeed } from 'components' - -export default class Explore extends React.Component { - render() { - return - } -} diff --git a/packages/comty/src/pages/explore/index.less b/packages/comty/src/pages/explore/index.less deleted file mode 100644 index 8f4566f7..00000000 --- a/packages/comty/src/pages/explore/index.less +++ /dev/null @@ -1,3 +0,0 @@ -.exploreWrapper{ - -} \ No newline at end of file diff --git a/packages/comty/src/pages/index.js b/packages/comty/src/pages/index.js deleted file mode 100644 index 0377ce38..00000000 --- a/packages/comty/src/pages/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export default () => { - return
-} \ No newline at end of file diff --git a/packages/comty/src/pages/login/guest.js b/packages/comty/src/pages/login/guest.js deleted file mode 100644 index b57ca446..00000000 --- a/packages/comty/src/pages/login/guest.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { connect } from 'umi' - -@connect(({ app }) => ({ app })) -export default class GuestSession extends React.PureComponent { - state = { - accept: false, - } - - render() { - return ( -
-
- -
this.setState({accept: e.target.checked})} /> You have read and accept the TOS
- { this.props.dispatch({ type: "guestLogin" }) }} > Continue -
-
- ) - } -} diff --git a/packages/comty/src/pages/login/index.js b/packages/comty/src/pages/login/index.js deleted file mode 100644 index 30b170c0..00000000 --- a/packages/comty/src/pages/login/index.js +++ /dev/null @@ -1,132 +0,0 @@ -import React from 'react' -import { iatToString } from 'core' -import { router, ui } from 'core/libs' - -import styles from './index.less' -import classnames from 'classnames' - -import * as antd from 'antd' -import * as Icons from 'components/Icons' - -import RegistrationForm from './register.js' -import NormalLoginForm from './login.js' -import GuestSession from './guest.js' - -import config from 'config' -import { connect } from 'umi' - -const types = [ - { - id: "login", - key: 0, - renderText: `Sign in ${config.app.siteName}` - }, - { - id: "register", - key: 1, - renderText: "Register" - }, - { - id: "guest", - key: 2, - renderText: "Use guest session" - }, - { - id: "forgot", - key: 3, - renderText: "Forgotten password" - }, -] - -const typesRenderMap = { - 0: , - 1: , - 2: -} - -@connect(({ app }) => ({ app })) -class Login extends React.Component { - state = { - transition: false, - key: 0, - } - - renderHelperButtons() { - return types.map((e) => { - return ( - this.setState({ key: e.key })}> - {e.renderText || "Invalid"} - - ) - }) - } - - componentDidMount() { - if (this.props.app.session_valid) { - ui.notify.info('You have already logged into an account, you can change your account by logging in again') - } - } - - componentWillUnmount() { - antd.Modal.destroyAll() - } - - renderAccountModal() { - const dispatchLogout = () => this.props.dispatch({ type: "app/logout" }) - antd.Modal.confirm({ - title: this.props.app.session_data.username, - icon: , - onOk() { - router.push('/') - }, - onCancel() { - dispatchLogout() - }, - okText: <>Resume, - cancelText: <>Logout - }) - } - - renderAccountCard() { - if (this.props.app.session_authframe) { - return ( -
-
this.renderAccountModal()}> -

@{this.props.app.session_data.username}

-
Last login {iatToString(this.props.app.session_authframe.iat || 0)}
-
-
- ) - } - return null - } - - renderTitle() { - return ( -
-
YulioID™
-

{types[this.state.key].renderText || "Auth"}

-
- ) - } - - render() { - return ( -
-
-
- {this.renderTitle()} -
-
- {typesRenderMap[this.state.key]} -
- {this.renderHelperButtons()} -
-
- {this.renderAccountCard()} -
-
- ) - } -} -export default Login diff --git a/packages/comty/src/pages/login/index.less b/packages/comty/src/pages/login/index.less deleted file mode 100644 index b4c52642..00000000 --- a/packages/comty/src/pages/login/index.less +++ /dev/null @@ -1,244 +0,0 @@ -@import '~theme/index.less'; - -.login_wrapper{ - width: 100%; - height: 100%; - font-family: "Poppins", sans-serif!important; - h1,h2,h3,h4,h5,h6{color: #333;} - position: absolute; - top: 0; - left: 0; - display: flex; - display: flex; - align-items: center; - justify-content: center; - font-size: 20px; - margin: auto; - - overflow-y: scroll; - overflow-x: hidden; - &.goOut{ - .auth_box{ - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; - } - } - transition: all 300ms ease-in-out; -} - - -.auth_box{ - display: flex; - transition: all 300ms ease-in-out; - - .yid_logo { - vertical-align: middle; - height: 17px; - } - :global{ - input:-webkit-autofill, - input:-webkit-autofill:hover, - input:-webkit-autofill:focus, - textarea:-webkit-autofill, - textarea:-webkit-autofill:hover, - textarea:-webkit-autofill:focus, - select:-webkit-autofill, - select:-webkit-autofill:hover, - select:-webkit-autofill:focus { - border: 0; - -webkit-text-fill-color: #333; - -webkit-box-shadow: 0 0 0 1000px #ffffff98 inset; - box-shadow: #fff 0 0 0 1000px inset; - transition: background-color 5000s ease-in-out 0s; - } - - .ant-input-affix-wrapper { - width: 100%; - height: 40px; - padding: 4px 11px; - color: #333; - font-size: 14px; - line-height: 1.5715; - background-color: #fff; //rgba(255, 255, 255, 0.596); - border: 1.5px #2F66DF solid; - border-radius: 7px; - } - } -} - -.centering_wrapper{ - width: 100%; - text-align: center; -} - -.left_body{ - z-index: 50; - transform: translate(12px,0); - float: left; - width: 30%; - color: #333; - background-color: #fff; - padding: 20px; - border-radius: 12px 0 0 12px; - box-shadow: 0 10px 20px 0 rgba(51,51,51,0.52); - transition: all 300ms ease-in-out; -} - -.right_body{ - z-index: 51; - float: right; - width: 70%; - max-height: -webkit-fill-available; - height: 150px; - padding: 20px 50px; - color: #333; - background-color: #fff; - border-radius: 12px; - box-shadow: 0 10px 20px 0 rgba(51,51,51,0.52); - transition: all 300ms ease-in-out; -} - -.third_body{ - z-index: 50; - transform: translate(0, -24px); - float: right; - width: 100%; - max-height: -webkit-fill-available; - height: 120px; - padding: 45px 50px; - color: #333; - background-color: #fff; - border-radius: 12px; - box-shadow: 0 10px 20px 0 rgba(51, 51, 51, 0.52); - transition: all 300ms ease-in-out; - - .last_auth{ - font-size: 14px; - - } -} - -.third_body:hover{ - background-color: rgba(255, 255, 255, 0.3); - box-shadow: 0 10px 20px 0 rgba(51, 51, 51, 0.8); - transform: translate(0, -16px); -} - -.helper_login_btn{ - transform: translate(-20px, -14px); -} - -.login_helper_footer{ - width: 100%; - position: absolute; - bottom: 0; - left: 0; - right: 0; - display: flex; - margin: auto; - :global{ - .ant-btn{ - margin: auto; - padding: 0 5px; - } - } - - transform: translate(0, -10px); - -} - - -@keyframes go-out { - 0% { - filter: blur(0) - } - - 100% { - filter: blur(15px) - } -} - - -// Medium format max-width: 830px -@media (min-width: 486px){ - .auth_box { - padding: 0 16px 40px; - width: 500px; - min-height: 500px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - .left_body{ - width: 100%; - float: none; - border-radius: 12px 12px 0 0; - padding: 20px; - transform: translate(0, 22px); - } - .right_body{ - width: 100%; - height: 100%; - float: none; - padding: 20px 60px; - } -} - -// Mobile format -@media (max-width: 485px){ - .auth_box { - position: absolute; - top: 0; - left: 0; - transition: all 150ms ease-in-out; - padding: 70px 16px 40px; - width: 100%; - height: 100%; - min-height: 500px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 0; - } - .left_body{ - box-shadow: none; - width: 100%; - float: none; - position: absolute; - top: 0; - margin-top: 30px; - transform: translate(0, 0); - } - .right_body{ - box-shadow: none; - width: 100%; - float: none; - padding: 20px; - } -} - -@-webkit-keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} diff --git a/packages/comty/src/pages/login/login.js b/packages/comty/src/pages/login/login.js deleted file mode 100644 index 77951711..00000000 --- a/packages/comty/src/pages/login/login.js +++ /dev/null @@ -1,229 +0,0 @@ -import React from 'react' -import styles from './index.less' - -import Fade from 'react-reveal/Fade' -import HeadShake from 'react-reveal/HeadShake'; - -import * as antd from 'antd' - -import { Form, Input, Button, Checkbox } from 'antd' -import { - UserOutlined, - LockOutlined, - BulbOutlined, - SwapLeftOutlined -} from 'components/Icons' -import { connect } from 'umi' - -@connect(({ app, socket }) => ({ app, socket })) -export default class NormalLoginForm extends React.Component { - state = { - usernameRaw: null, - passwordRaw: null, - - step: 1, - validating: false, - error_count: 0, - step_error: false, - step_show: true, - } - - next() { - let step = this.state.step - this.setState({ validating: true, step_error: false }) - switch (step) { - case 1: { - if (this.state.usernameRaw) { - const payload = { username: this.state.usernameRaw } - user.get.basicData(payload, (err, res) => { - if (res.code == 200) { - step++ - this.anim_transition(50) - return this.setState({ - validating: false, - early_data: res.response, - step: step, - }) - } - if (res.code == 210) { - return this.anim_error() - } - return false - }) - } else { - return this.anim_error() - } - } - case 2: { - return this.auth() - } - default: - return false - } - } - - back() { - if (this.state.step > 1) { - this.state.step-- - this.anim_transition(150) - } - this.setState({ step: this.state.step }) - } - - anim_transition(duration) { - this.setState({ step_show: false }) - setTimeout(() => { - this.setState({ step_show: true }) - }, duration || 150) - } - - anim_error() { - this.setState({ step_error: true, error_count: (this.state.error_count + 1), validating: false }) - } - - onChangeField(event) { - if(!this.state) { - return false - } - let updated = this.state - updated[event.target.id] = event.target.value - this.setState(updated) - } - - auth() { - const { usernameRaw, passwordRaw } = this.state - if (!usernameRaw || !passwordRaw) return false - this.setState({ step_error: false, validating: true }) - - this.props.dispatch({ - type: 'app/login', - payload: { username: usernameRaw, password: passwordRaw }, - callback: (callbackResponse) => { - console.log(callbackResponse) - this.setState({ validating: false }) - switch (callbackResponse) { - case 100: { - return null - } - case 400: { - console.log('Credentials error') - return this.anim_error() - } - case 500: { - console.log('Server error') - return this.back() - } - default: { - console.log('Unknown error') - return this.back() - } - } - } - }) - } - - renderFormItems = { - username: () => { - return ( - - this.next()} - id="usernameRaw" - onChange={(e) => this.onChangeField(e)} - prefix={} - placeholder="Username or Email" - /> - - ) - }, - password: () => { - return ( - <> -

Welcome Back @{this.state.early_data.username}

- - this.next()} - disabled={this.state.validating} - id="passwordRaw" - prefix={} - onChange={(e) => this.onChangeField(e)} - placeholder="Password" - /> - - - ) - } - } - - renderButtons() { - const PrimaryButton = () => { - return ( - - ) - } - - const SecondaryButton = () => { - return ( - - ) - } - if (this.state.step > 1) { - return
- } - return - } - - render() { - return ( -
- -
- - {this.renderFormItems[this.state.step == 1 ? "username" : "password"]()} - -
-
- {this.renderButtons()} -
- ) - } -} diff --git a/packages/comty/src/pages/login/register.js b/packages/comty/src/pages/login/register.js deleted file mode 100644 index 2c48a4ac..00000000 --- a/packages/comty/src/pages/login/register.js +++ /dev/null @@ -1,151 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import styles from './index.less' - -import { - Form, - Input, - Tooltip, - Cascader, - Select, - Row, - Col, - Checkbox, - Button, - AutoComplete, -} from 'antd' - -import ReCAPTCHA from 'react-google-recaptcha' -import { g_recaptcha_key } from 'config/keys' - -export default class RegistrationForm extends React.Component { - state = { - usernameRaw: null, - passwordRaw: null, - emailRaw: null, - - captchaValue: null - } - - handleRegister() { - - } - - onFinish(values) { - console.log('Received values of form: ', values) - } - - onCaptcha(values) { - this.setState({ captchaValue: values }) - } - - onChangeField(event) { - if(!this.state) { - return false - } - let updated = this.state - updated[event.target.id] = event.target.value - this.setState(updated) - } - - renderForm() { - return ( -
- - this.onChangeField(e)} placeholder="randomuser" prefix={} /> - - - this.onChangeField(e)} placeholder="example@no-real.com" prefix={} /> - - - - this.onChangeField(e)} placeholder="mysupersecretpassword" prefix={} /> - - - - - - - - - - - - - - - value - ? Promise.resolve() - : Promise.reject('Should accept agreement'), - }, - ]} - > - - I have read the agreement - - - - - -
- ) - } - - render() { - return ( -
- { this.renderForm()} -
- ) - } - -} diff --git a/packages/comty/src/pages/logout.js b/packages/comty/src/pages/logout.js deleted file mode 100644 index 8e29686f..00000000 --- a/packages/comty/src/pages/logout.js +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { connect } from 'umi' -import { router } from 'core/libs'; -import { Home, Trash } from 'components/Icons' -@connect(({ app }) => ({ app })) -export default class Logout extends React.Component{ - - componentDidMount(){ - if (!this.props.app.session_valid) { - return false - } - const dispatchLogout = () => this.props.dispatch({ type: "app/logout" }) - - antd.Modal.confirm({ - title: this.props.app.session_data.username, - icon: , - content: 'Are you sure you want to log out', - onOk() { - router.push('/') - }, - onCancel() { - dispatchLogout() - }, - okText: <>Resume, - cancelText: <>Logout - }); - } - - componentWillUnmount(){ - antd.Modal.destroyAll() - } - - render(){ - return null - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/new_streaming/index.js b/packages/comty/src/pages/new_streaming/index.js deleted file mode 100644 index 2e9c56f9..00000000 --- a/packages/comty/src/pages/new_streaming/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import { connect } from 'umi' - -@connect(({ app }) => ({ app })) -export default class NewStreaming extends React.Component{ - render(){ - return( -
- -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/post.js b/packages/comty/src/pages/post.js deleted file mode 100644 index 46c6911f..00000000 --- a/packages/comty/src/pages/post.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import { connect } from 'umi' -import { PostsFeed } from 'components' - -@connect(({ app }) => ({ app })) -export default class Post extends React.Component{ - state = { - postID: null - } - componentDidMount(){ - this.setState({ postID: new URLSearchParams(location.search).get('key') }) - } - render(){ - if (!this.state.postID) { - return null - } - return - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/saves.js b/packages/comty/src/pages/saves.js deleted file mode 100644 index fec5f5ac..00000000 --- a/packages/comty/src/pages/saves.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import { connect } from 'umi' -import { PostsFeed } from 'components' - -@connect(({ app }) => ({ app })) -export default class Saves extends React.Component{ - render(){ - return - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/about/index.js b/packages/comty/src/pages/settings/components/about/index.js deleted file mode 100644 index cb09617b..00000000 --- a/packages/comty/src/pages/settings/components/about/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import { About } from 'components' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import l from 'schemas/links' - -export default class AppAbout extends React.Component { - render() { - const handleClickLinks = (e) => { - const link = l[e] - link ? window.openLink(link) : console.log("Link not available") - } - return <> - - -
-

🎉✨ It's completely free and open source !

-
It is an impressive amount of work and effort, help us to continue offering quality services, you can support us from our patreon campaign.
- handleClickLinks("patreon")}> Support us with Patreon! -
- -
-

👨‍💻 You are developer? You can help us by joining our team!

- handleClickLinks("github")}>Official Repository
- handleClickLinks("trello")}>Join our Trello -
-
- - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/earnings/index.js b/packages/comty/src/pages/settings/components/earnings/index.js deleted file mode 100644 index 997e5926..00000000 --- a/packages/comty/src/pages/settings/components/earnings/index.js +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import * as Icons from 'components/Icons' - - -export default class Earnings extends React.Component { - state = { - loading: true, - pro_points: 0 - } - componentDidMount(){ - // app.comty_data.get_user_data((err,res)=>{ - // if (err) return false - // try { - // const a = JSON.parse(res)['user_data'] - // this.setState({ loading: false, pro_points: a.points }) - // } catch (error) { - - // } - // }) - - } - render() { - return ( -
-
-

Redeem an Code

- -
-
-

Your Pro Points

- {this.state.pro_points} -
-
- ) - } -} diff --git a/packages/comty/src/pages/settings/components/electron/index.js b/packages/comty/src/pages/settings/components/electron/index.js deleted file mode 100644 index 8a1dd019..00000000 --- a/packages/comty/src/pages/settings/components/electron/index.js +++ /dev/null @@ -1,91 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import * as Icons from 'components/Icons' -import styles from './index.less' -import { connect } from 'umi'; -import { package_json } from 'core' -import { objectToArrayMap } from '@nodecorejs/utils' - -const AppTech = (info) => { - if (!info) return null - return( -
-
umi{info.g_umi.version}
-
react{info.react_version}
-
{info.process.versions.v8}
-
{info.process.version}
-
{info.process.versions.electron}
-
Webpack
-
Socket.io
-
JS
-
TS
-
WebAssembly
-
OpenAI
-
- ) -} - - -@connect(({ app }) => ({ app })) -export default class ElectronSettings extends React.PureComponent{ - state = { - loading: true, - info: [] - } - - getInfo(){ - this.setState({ loading: true }) - this.setState({ - loading: false, - info: { - g_umi: window.g_umi, - process: window.process, - react_version: React.version, - deps: objectToArrayMap(package_json.dependencies) - } - }) - } - - componentDidMount(){ - this.getInfo() - } - - - render(){ - const showAppTech = () => { - antd.Modal.info({ - title: package_json.title, - content: AppTech(this.state.info), - width: 550 - }) - } - - const showThirdParty = () => { - const generateList = () => { - return this.state.info.deps.map((e) => { - return( -
- -> {e.key} {e.value.slice(1,e.value.length)} -
- ) - }) - } - - antd.Modal.info({ - title: package_json.title, - content: generateList(), - width: 550 - }) - } - - if (this.state.loading){ - return - } - return( -
- showAppTech()}> App Technologies - showThirdParty()}> Third-Party -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/electron/index.less b/packages/comty/src/pages/settings/components/electron/index.less deleted file mode 100644 index 808ab280..00000000 --- a/packages/comty/src/pages/settings/components/electron/index.less +++ /dev/null @@ -1,15 +0,0 @@ -.versions{ - overflow: scroll; - display: grid; - grid-template-columns: repeat(4, 1fr); - grid-template-rows: repeat(4, 1fr); - grid-column-gap: 15px; - grid-row-gap: 15px; - - > div { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/general/index.js b/packages/comty/src/pages/settings/components/general/index.js deleted file mode 100644 index 41b0cb59..00000000 --- a/packages/comty/src/pages/settings/components/general/index.js +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react' -import { List, Button, Switch, Checkbox, InputNumber, Input } from 'antd' -import * as Icons from 'components/Icons' - -import { verbosity } from '@nodecorejs/utils' -import { settings, newSetting } from 'core/libs/settings' -import listSettings from 'schemas/settings_general.json' - -const AntdComponents = { Button, Switch, Checkbox, InputNumber, Input } -export default class GeneralSettings extends React.Component { - state = { - list: listSettings, - } - - renderSetting = (item) => { - if (!item.type || !item.id) { - verbosity.log("Invalid component >", item) - return null - } - if (typeof(AntdComponents[item.type]) == "undefined") { - verbosity.log(`Invalid component, '${item.type}' not exists >`, item) - return null - } - - let itemProps = { - onChange: (e) => this.onChange(item, e), - checked: settings.get(item.id) - } - - switch (item.type) { - case 'Switch': { - itemProps = { ...itemProps } // checkedChildren: "Enabled", unCheckedChildren: "Disabled" - break - } - default: - break - } - - return React.createElement(AntdComponents[item.type], itemProps) - } - - onChange(item, event) { - try { - let to = event - - verbosity.colors({ log: { textColor: "blue" } }).log(`Updating setting (${item.id}) > ${to}`) - settings.set(item.id, to) - - const updatedValues = this.state.list.map(element => - element.id === item.id ? Object.assign(element, { value: to }) : element - ) - this.setState({ list: updatedValues }) - } catch (err) { - console.log(err) - } - } - - renderIcon(icon, props) { - if (!Icons[icon]) { - verbosity.log(`${icon} not exist!`) - return null - } - return React.createElement(Icons[icon], props ?? null) - } - - render() { - return ( - ( - - {this.renderIcon(item.icon)}{item.title}} - description={item.description} - /> - {this.renderSetting(item)} - - )} - /> - ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/help/index.js b/packages/comty/src/pages/settings/components/help/index.js deleted file mode 100644 index 75efbdc3..00000000 --- a/packages/comty/src/pages/settings/components/help/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' - -export default class Help extends React.Component{ - render(){ - return <> - - - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/keybinds/index.js b/packages/comty/src/pages/settings/components/keybinds/index.js deleted file mode 100644 index 2864fd7b..00000000 --- a/packages/comty/src/pages/settings/components/keybinds/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import { connect } from 'umi' - -@connect(({ app }) => ({ app })) -export default class Keybinds extends React.Component { - render() { - return <> - } -} - diff --git a/packages/comty/src/pages/settings/components/notification/index.js b/packages/comty/src/pages/settings/components/notification/index.js deleted file mode 100644 index 2b712970..00000000 --- a/packages/comty/src/pages/settings/components/notification/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import styles from './index.less' - -export default class NotificationView extends React.Component { - render() { - return ( -
- -
- ) - } -} - diff --git a/packages/comty/src/pages/settings/components/notification/index.less b/packages/comty/src/pages/settings/components/notification/index.less deleted file mode 100644 index 4eab7076..00000000 --- a/packages/comty/src/pages/settings/components/notification/index.less +++ /dev/null @@ -1,17 +0,0 @@ -@import '~theme/index.less'; - -.main { - - :global { - h2 { - font-weight: 500; - } - - .anticon { - color: #2d2d2d; - - } - - - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/plugins/index.js b/packages/comty/src/pages/settings/components/plugins/index.js deleted file mode 100644 index 4bb9481d..00000000 --- a/packages/comty/src/pages/settings/components/plugins/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import {connect} from 'umi' -@connect(({ app }) => ({ app })) -export default class Plugins extends React.Component { - render() { - return <> - - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/security/index.js b/packages/comty/src/pages/settings/components/security/index.js deleted file mode 100644 index ce0a704b..00000000 --- a/packages/comty/src/pages/settings/components/security/index.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import styles from './index.less' - -import Sessions_Manager from './sessions.js' - -const { Menu } = antd -export default class SecurityView extends React.Component { - state = { - current: 'privacy', - } - - handleClick = e => { - this.setState({ - current: e.key, - }) - } - - renderChildren = () => { - const { current } = this.state - switch (current) { - case 'privacy': - return null - case 'credentials': - return null - case 'sessions': - return - default: - break - } - return null - } - - render() { - return ( -
- - - - Privacy - - - - Credentials - - - - Sessions - - -
{this.renderChildren()}
-
- ) - } -} - diff --git a/packages/comty/src/pages/settings/components/security/index.less b/packages/comty/src/pages/settings/components/security/index.less deleted file mode 100644 index 4eab7076..00000000 --- a/packages/comty/src/pages/settings/components/security/index.less +++ /dev/null @@ -1,17 +0,0 @@ -@import '~theme/index.less'; - -.main { - - :global { - h2 { - font-weight: 500; - } - - .anticon { - color: #2d2d2d; - - } - - - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/security/sessions.js b/packages/comty/src/pages/settings/components/security/sessions.js deleted file mode 100644 index 5d4bbe42..00000000 --- a/packages/comty/src/pages/settings/components/security/sessions.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import * as antd from 'antd' - -export default class Sessions_Manager extends React.Component { - state = { - sessions_data: '', - } - componentDidMount() { - // app.comty_data.session_id((err, res) => { - // this.setState({ sid: res }) - // }) - // app.comty_data.sessions((err, res) => { - // const a = JSON.parse(res)['data'] - // this.setState({ sessions_data: a }) - // }) - } - render() { - return ( -
- ( - - -

Session #{item.id}

- {this.state.sid == item.session_id ? 'This Session' : null} -
-

{item.platform}

-

{item.ip_address}

-

{item.time}

-
-
- )} - /> -
- ) - } -} diff --git a/packages/comty/src/pages/settings/components/theme/components/background/index.js b/packages/comty/src/pages/settings/components/theme/components/background/index.js deleted file mode 100644 index 076366b8..00000000 --- a/packages/comty/src/pages/settings/components/theme/components/background/index.js +++ /dev/null @@ -1,158 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import { connect } from 'umi' -import styles from '../../index.less' - -import { theme, getOptimalOpacityFromIMG, get_style_rule_value } from 'core/libs/style' -import { urlToBase64, imageToBase64, arrayToObject } from 'core' -import ThemeConfigurator from '../../configurator' - -@connect(({ app }) => ({ app })) -export default class BackgroundImage extends ThemeConfigurator { - state = { - configKey: "backgroundImage", - model: { active: false, opacity: null, src: null }, - - textColor: this.rgbToScheme(getComputedStyle(document.getElementById("appWrapper")).color), - overlayColor: this.rgbToScheme(getComputedStyle(document.getElementById("appWrapper")).backgroundColor), - - processing: null, - fileURL: null, - customURL: '', - } - - handleFileUpload = info => { - if (info.file.status === 'uploading') { - return this.setState({ processing: false }) - } - if (info.file.status === 'done') { - this.setState({ processing: true }) - imageToBase64(info.file.originFileObj, fileURL => { - this.setState({ fileURL: fileURL }) - this.proccessBackground(fileURL) - }) - } - } - - handleCustomURL(url) { - this.setState({ processing: true, fileURL: url }) - urlToBase64(url, fileURL => { - this.proccessBackground(fileURL) - }) - } - - proccessBackground(data) { - getOptimalOpacityFromIMG({ textColor: this.state.textColor, overlayColor: this.state.overlayColor, img: data }, (res) => { - this.handleUpdate({ active: true, src: this.state.fileURL, opacity: res }) - }) - } - - schemeToRGB(values) { - const scheme = values ? values : { r: '0', g: '0', b: '0' } - const r = scheme.r || '0' - const g = scheme.g || '0' - const b = scheme.b || '0' - return `rgb(${r}, ${g}, ${b})` - } - - rgbToScheme(rgb) { - const values = rgb.replace(/[^\d,]/g, '').split(','); - return { r: values[0], g: values[1], b: values[2] } - } - - renderPreviewModel() { - return ( -
-

Preview

- { this.state.model.src ?
-
-

Sample text

-

Sample text

-

Sample text

-

Sample text

-

Some text here

-

Some text here

-
- -
:

No Background

} -
- ) - } - - renderUploader() { - return ( -
-

Upload

-
-
- Upload from your files
- - } /> - -
-
-

Or

-
-
- Upload from URL - this.handleCustomURL(this.state.customURL)} onChange={e => this.setState({ customURL: e.target.value })} value={this.state.customURL} placeholder="http://example.com/my_coolest_image.jpg" /> -
-
- - {this.state.processing ?

Processing image ...

: null} - {this.state.params ? JSON.stringify(this.state.params) : null} -
- ) - } - - renderControls() { - return ( -
-
-

Enabled

- { this.promiseState(prevState => ({ model: { ...prevState.model, active: e } })).then(() => this.handleUpdate()) }} - checked={this.state.model.active} - /> -
-
- -

Opacity

- { this.setState(prevState => ({ model: { ...prevState.model, opacity: e / 100 } })) }} onAfterChange={() => this.handleUpdate()} value={this.state.model.opacity * 100} /> -
-
-

Export Code

- this.handleExport()}> Export -
-
-

Import Code

- null}> Import -
-
-

Erase

- this.handleErase()} okText="Yes" cancelText="No"> - Delete - -
- -
- ) - } - - render() { - return ( -
- {this.renderControls()} - - {this.renderPreviewModel()} - - {this.renderUploader()} - -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/theme/components/color/index.js b/packages/comty/src/pages/settings/components/theme/components/color/index.js deleted file mode 100644 index eeccc90e..00000000 --- a/packages/comty/src/pages/settings/components/theme/components/color/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import styles from '../../index.less' -import ThemeConfigurator from '../../configurator' - -export default class Colors extends ThemeConfigurator { - state = { - configKey: "colors", - model: { active: false } - } - render() { - return ( -
-
- - -
-
- ) - } -} diff --git a/packages/comty/src/pages/settings/components/theme/components/darkmode/index.js b/packages/comty/src/pages/settings/components/theme/components/darkmode/index.js deleted file mode 100644 index 07841be4..00000000 --- a/packages/comty/src/pages/settings/components/theme/components/darkmode/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import styles from '../../index.less' -import ThemeConfigurator from '../../configurator' - -export default class DarkMode extends ThemeConfigurator { - state = { - configKey: "darkmode", - model: { active: false } - } - render() { - return ( -
-
-

Enabled

- { this.promiseState(prevState => ({ model: { ...prevState.model, active: e } })).then(() => this.handleUpdate()) }} - checked={this.state.model.active} - /> -
-
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/theme/configurator.js b/packages/comty/src/pages/settings/components/theme/configurator.js deleted file mode 100644 index facf34eb..00000000 --- a/packages/comty/src/pages/settings/components/theme/configurator.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import ErrorHandler from 'core/libs/errorhandler' -import { theme } from 'core/libs/style' -import exportDataAsFile from 'core/libs/ui/export_data' -import { verbosity } from '@nodecorejs/utils' - -export default class ThemeConfigurator extends React.Component { - componentDidMount() { - this.applyStoraged() - } - - applyStoraged() { - const storaged = theme.get() - if (storaged && this.state) { - if (storaged[this.state.configKey]) { - return this.setState({ model: storaged[this.state.configKey] }) - } else { - return verbosity.log(`cannot get storagedSetting for ${this.state.configKey}`) - } - } - } - - promiseState = async state => new Promise(resolve => this.setState(state, resolve)); - - handleUpdate(payload) { - if (!this.state.configKey) { - return ErrorHandler({ msg: `cannot update without 'configKey', is missing`, code: 140 }) - } - if (!payload) { - payload = this.state.model - } - this.setState({ model: payload, processing: false }) - window.dispatcher({ - type: 'app/updateTheme', - payload: { - key: this.state.configKey, - value: payload - } - }); - } - - handleErase() { - this.handleUpdate({}) - } - - handleExport() { - exportDataAsFile({ data: JSON.stringify(this.state.model), type: 'text/json' }) - } - -} diff --git a/packages/comty/src/pages/settings/components/theme/index.js b/packages/comty/src/pages/settings/components/theme/index.js deleted file mode 100644 index f969f7be..00000000 --- a/packages/comty/src/pages/settings/components/theme/index.js +++ /dev/null @@ -1,75 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' -import * as antd from 'antd' -import { connect } from 'umi' -import { arrayToObject } from 'core' -import ThemeSettingsList from 'schemas/theme_settings.json' - -import BackgroundSetting from './components/background' -import DarkmodeSetting from './components/darkmode' -import ColorSetting from './components/color' - -const componentsMap = { - backgroundImage: , - darkmode: , - color: , -} - -@connect(({ app }) => ({ app })) -export default class ThemeSettings extends React.Component { - state = { - selectedKey: null, - keys: [] - } - - componentDidMount() { - let mix = [] - ThemeSettingsList.forEach(e => { - mix[e.id] = e - }) - this.setState({ keys: mix }) - } - - renderSelectedKey() { - const selectedKeyItem = this.state.keys[this.state.selectedKey] ?? { icon: null, title: null } - return ( - this.setState({ selectedKey: null })} - visible={this.state.selectedKey ? true : false} - > - -
-

{selectedKeyItem.icon} {selectedKeyItem.title}

-
- - {componentsMap[this.state.selectedKey]} -
-
- ) - } - - render() { - const handleClick = (key) => this.setState({ selectedKey: key }) - const isActive = (key) => { return key ? key.active : false } - return ( -
- ( -
- handleClick(item.id)}> -

{React.createElement(Icons[item.icon])}{item.title}
{isActive(arrayToObject(this.props.app.app_theme)[item.id]) ? "Enabled" : "Disabled"}

-

{item.description}

-
-
- )} - /> - {this.renderSelectedKey()} -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/components/theme/index.less b/packages/comty/src/pages/settings/components/theme/index.less deleted file mode 100644 index 9c0a5ce2..00000000 --- a/packages/comty/src/pages/settings/components/theme/index.less +++ /dev/null @@ -1,51 +0,0 @@ -.background_image_controls{ - width: 100%; - margin: auto; - display: flex; - flex-direction: row; - - > div { - width: 100%; - margin: 0 10px; - } -} - -.background_image_uploader{ - width: 100%; - margin: auto; - display: flex; - flex-direction: row; - text-align: center; - - > div { - width: 100%; - margin: 0 10px; - } -} - -.background_image_preview{ - position: relative; - height: 50%; - border-radius: 8px; - - img{ - z-index: 9; - width: 100%; - border-radius: 8px; - } - - .text_wrapper{ - position: absolute; - z-index: 10; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - width: 100%; - - h1{ - font-size: 68px; - } - } -} \ No newline at end of file diff --git a/packages/comty/src/pages/settings/index.js b/packages/comty/src/pages/settings/index.js deleted file mode 100644 index 7e21ae50..00000000 --- a/packages/comty/src/pages/settings/index.js +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react' -import * as Icons from 'components/Icons' - -import { ListedMenu } from 'components' - -import NotificationView from './components/notification' -import SecurityView from './components/security' -import Base from './components/general' -import AppAbout from './components/about' -import Theme from './components/theme' -import ElectronApp from './components/electron' -import Keybinds from './components/keybinds' -import Plugins from './components/plugins' - -const Settings = { - base: , - about: , - keybinds: , - theme: , - plugins: , - security: , - notification: , - app: -} - -const menuList = [ - { - key: "base", - title: "General", - icon: , - }, - { - key: "app", - title: "Application", - icon: , - require: "embedded" - }, - { - key: "keybinds", - title: "Keybinds", - icon: - }, - { - key: "theme", - title: "Customization", - icon: , - }, - { - key: "plugins", - title: "Plugins", - icon: , - }, - { - key: "security", - title: "Security & Privacity", - icon: , - }, - { - key: "notification", - title: "Notification", - icon: , - }, - { - key: "help", - title: "Help", - icon: , - }, - { - key: "about", - title: "About", - icon: , - } -] - -class GeneralSettings extends React.Component { - render() { - return } title="Settings" childrens={Settings} menuArray={menuList} /> - } -} - -export default GeneralSettings diff --git a/packages/comty/src/pages/streams/index.js b/packages/comty/src/pages/streams/index.js deleted file mode 100644 index 34bfc768..00000000 --- a/packages/comty/src/pages/streams/index.js +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react' -import * as antd from 'antd' -import * as Icons from 'components/Icons' -import { connect } from 'umi' -import { verbosity } from '@nodecorejs/utils' - -import { goLive } from 'core/models/helpers' - -@connect(({ app }) => ({ app })) -export default class Streams extends React.Component { - - state = { - list: [] - } - - componentDidMount() { - try { - - } catch (error) { - verbosity.log(error) - } - } - - availableList = () => { - if (!Array.isArray(this.state.list)) { - return false - } - if (this.state.list.length == 0) { - return false - } - return true - } - - render() { - - if (!this.availableList()) { - return
- - {goLive()}} type="primary" > - Start Streaming - - -
- } - - return ( -
- -
- ) - } -} \ No newline at end of file diff --git a/packages/comty/src/theme/base/components/PostCard.less b/packages/comty/src/theme/base/components/PostCard.less deleted file mode 100644 index 207317f1..00000000 --- a/packages/comty/src/theme/base/components/PostCard.less +++ /dev/null @@ -1,17 +0,0 @@ -@post_card_general_border-rd: 7px; -@post_card_wrapper_shadow: 0 1px 3px rgba(0, 0, 0, 0.15); -@post_card_wrapper_actions_backgroud: rgb(235, 235, 235); -@post_card_wrapper_actions_icon_backgroud: #fff; - -@post_card_wrapper_tags_color_default: rgb(249, 179, 64); -@post_card_wrapper_tags_color_nsfw: #111; -@post_card_wrapper_tags_color_flag: #111; - -@post_card_wrapper_post_content_color: #555555; -@post_card_wrapper_post_content_weight: 400; -@post_card_wrapper_post_content_fontSize: 15px; -@post_card_wrapper_post_content_letterSpacing: -0.3px; - -@post_card_flaggedWarning_backgroud: #ffffff60; -@post_card_flaggedWarning_padding: 20px 15px 25px 15px; -@post_card_flaggedWarning_iconSize: 40px; \ No newline at end of file diff --git a/packages/comty/src/theme/base/fonts-import.css b/packages/comty/src/theme/base/fonts-import.css deleted file mode 100644 index 2bd44ba2..00000000 --- a/packages/comty/src/theme/base/fonts-import.css +++ /dev/null @@ -1,9 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Alata&display=swap'); -@import url('https://fonts.googleapis.com/css?family=Poppins:300,300i,500,500i,700'); -@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap'); -@import url('https://fonts.googleapis.com/css?family=Kulim+Park&display=swap'); -@import url('https://fonts.googleapis.com/css?family=Nunito&display=swap'); -@import url("https://fonts.googleapis.com/css?family=Manrope:300,400,500,600,700&display=swap&subset=latin-ext"); -@import url("https://api.ragestudio.net/fonts/netflix_sans/font.css"); -@import url("https://api.ragestudio.net/fonts/trueno/font.css"); - diff --git a/packages/comty/src/theme/base/index.less b/packages/comty/src/theme/base/index.less deleted file mode 100644 index ebd7030f..00000000 --- a/packages/comty/src/theme/base/index.less +++ /dev/null @@ -1,385 +0,0 @@ -@import './vars.less'; -@import './fonts-import.css'; - -@import './layout/Primary_Layout.less'; -@import './layout/LeftSider.less'; - -@import './components/PostCard.less'; - - -// Resolutions variables -@screen-sm: 48em; // 768px -@screen-md: 64em; // 1024px -@screen-lg: 85.375em; // 1366px -@screen-xl: 120em; // 1920px -@screen-xxl: 160em; // 2560px - -::-webkit-scrollbar { - position: absolute; - width: 14px; - height: 18px; - } - -::-webkit-scrollbar-thumb { - height: 6px; - border: 4px solid rgba(0, 0, 0, 0); - background-clip: padding-box; - margin: 5px 10px 5px 5px; - -webkit-border-radius: 7px; - background-color: rgba(0, 0, 0, 0.15); - -webkit-box-shadow: inset -1px -1px 0 rgba(0, 0, 0, 0.05), inset 1px 1px 0 rgba(0, 0, 0, 0.05); -} -::-webkit-scrollbar-button { - width: 0; - height: 0; - display: none; -} -::-webkit-scrollbar-corner { - background-color: transparent; -} - -.app{ - &.overlayActive { - .app_layout_container{ - filter: saturate(10%); - transform: translate(-150px, 0);// to do: get from overlay direction variable - } - } - - &.interfaced{ - .app_layout_container{ - height: 98%; - } - } - - &.mobile{ - .app_layout_container { - width: 100%; - padding: 0; - overflow-y: overlay; - overflow-x: hidden; - min-width: unset; - } - .app_layout_content{ - padding: 35px 15px 15px; - } - } - - &.dark_mode{ - :global{ - filter: invert(100%); - img, svg, video { - filter: invert(100%); - color: @__app_background; - } - } - } -} - -#app { - -webkit-app-region: no-drag; - overflow: hidden; - position: absolute; - bottom: 0; - - background-repeat: repeat-x; - background-size: cover; - background-position-y: center; - background-color: transparent; - margin: auto; - height: 100vh; - width: 100vw; - - transition: all 150ms linear; -} - - -body { - text-rendering: optimizeLegibility!important; - -webkit-app-region: no-drag; - - scroll-behavior: smooth; - height: 100vh; - - overflow: hidden; - - font-size: 1em; - - font-family: @__app_secondaryFont; - color: @__app_color!important; - background-color: @__app_background; - - &.dark{ - background-color: @__app_color; - } -} - -// Layout -.app_layout_container { - background-color: transparent; - transition: all 150ms ease-in-out; - backdrop-filter: blur(2px); - - overflow-x: hidden; - // overflow-y: overlay; - - width: auto; - height: 100vh; - padding: 15px 0; - align-self: baseline; - - position: relative; - bottom: 0; - display: flex; - align-self: center; - - max-width: 750px; - min-width: 570px; -} - -.app_layout_content { - vertical-align: middle; - width: 100%; - padding: @__app_layout_content_padding; - transition: all 150ms ease-in-out; -} - - -// Right Sidebar -@__app_overlay_padding: 30px 30px 30px 35px; -.app_right_sidebar_wrapper { - opacity: 1; - height: 100%; - width: 100%; - - max-width: @Overlay_wrapper_maxwidth; - min-width: 200px; - - display: flex; - z-index: 50; - - padding: @__app_overlay_padding; - - @media (max-width: @screen-md) { - padding: 30px 5px; - } - - transition: all @__app_SwapDuration ease-in-out; - - &.swapped { - opacity: 0; - transform: translate(100%, 0); - } -} - -.app_right_sidebar_content{ - height: 100%; - width: 100%; - > div { - margin-bottom: 35px; - } -} - -// Overlay -.app_overlay_wrapper { - user-select: none; - position: absolute; - right: 0; - top: 0; - z-index: 50; - - height: 100%; - width: 0; - backdrop-filter: blur(2px); - - &.half { - padding: @__app_overlay_padding; - background-color: #2d2d2d; - color: @Overlay_container1_active_color; - width: 26vw; - } - - &.full{ - padding: @__app_overlay_padding; - max-width: none; - background-color: transparent; - position: absolute; - width: 100vw; - height: 100vh; - } - - transition: all @__app_SwapDuration ease-in-out; - border-radius: @__Global_layout_border-rd; -} - -.app_overlay_content { - height: 100%; - width: 100%; - - max-width: @Overlay_wrapper_maxwidth; - min-width: 200px; - - display: flex; - z-index: 50; - - right: 0; - padding: @__app_overlay_padding; - - color: @Overlay_container1_def_color; - - transition: all @__app_SwapDuration ease-in-out; -} - -.app_overlay_content_body{ - height: 100%; - width: 100%; - word-break: break-all; - - > div { - margin-bottom: 35px; - } -} - -.app_overlay_backButton{ - margin: 0 0 15px; - background-color: #fff; - border-radius: 8px; - color: @Overlay_container_1_btn_color; - background-color: @Overlay_container_1_btn_backgroud; - border-color: transparent; - border-radius: 12px; -} - -.app_overlay_backButton:hover { - box-shadow: @Overlay_container_1_btn_shadow; - transition: all @__Global_Components_transitions_dur linear; -} - -// Streaming Drawer -.app_streamingPanel_wrapper { - h1 { - color: #fff; - } - -} - -.app_streamingPanel_content { - h1 { - color: #333; - } - - display: inline-block; - align-items: center; - margin: auto; - color: #333; - border-radius: 14px; - background-color: #fff; - width: 100%; - padding: 40px; -} - -.app_streamingPanel_onlivetag { - color: #9597A1; - background-color: #cecece; - padding: 5px; - border-radius: 5px; - text-align: center; - font-size: 14; - - transition: all 150ms ease-in-out; - - &.active { - color: #fff; - background-color: red; - } -} - - -.app_streamingPanel_connectionIndicator { - background-color: #cecece; - width: 1em; - height: 1em; - - border-radius: 24px; - transition: all 150ms ease-in-out; - margin-right: 12px; - - &.active { - background-color: #38b000; - } -} - -.app_streamingPanel_cardBody { - > div { - margin-bottom: 15px; - } -} - -.app_streamingPanel_hiddenkey { - text-align: center; - background-color: #cecece; - border-radius: 7px; - padding: 12px 0; - filter: blur(4px); - transition: all 150ms ease-in-out; - - user-select: all; - - -} - -.app_streamingPanel_hiddenkey:hover { - filter: none; -} - -// CardComponent (External Module) -.cardComponent_wrapper { - width: 100%; - height: 100%; - - background-color: #fff; - border-radius: 8px; - padding: 10px; - - - h1,h2,h3,h4{ - color: #9597A1; - font-family: Netflix Sans; - font-style: normal; - font-weight: 300; - font-size: 12px; - line-height: 15px; - } -} - - - -// Media queries -@media (min-width: @screen-sm){ - ::-webkit-scrollbar{ - display: none; - } -} - -@media (min-width: @screen-md) { - .app_layout_container{ - min-width: 750px; - } - .app_layout_content{ - padding: 0; - } -} - -@media (min-width: @screen-lg) { - .app_layout_container{ - min-width: 1112px; - } -} - -// @media (min-width: @screen-xl) { - -// } - -// @media (min-width: @screen-xxl) { - -// } diff --git a/packages/comty/src/theme/base/layout/LeftSider.less b/packages/comty/src/theme/base/layout/LeftSider.less deleted file mode 100644 index 59f59e70..00000000 --- a/packages/comty/src/theme/base/layout/LeftSider.less +++ /dev/null @@ -1,4 +0,0 @@ -@left_sider_color: @__app_color; -@left_sider_sizeIcons: 19px; -@left_sider_menu__onhover_backgroud: rgb(80, 80, 80); -@left_sider_menu__onhover_color: rgb(80, 80, 80); \ No newline at end of file diff --git a/packages/comty/src/theme/base/layout/Primary_Layout.less b/packages/comty/src/theme/base/layout/Primary_Layout.less deleted file mode 100644 index f20346da..00000000 --- a/packages/comty/src/theme/base/layout/Primary_Layout.less +++ /dev/null @@ -1,7 +0,0 @@ -@primary_layout_backgroud: #F8F6F8; // #2d2d2d; - -@primary_layout_container_backgroud: @__Global_layout_backgroud; -@primary_layout_container_border-rd: @__Global_layout_border-rd; - -@primary_layout_content_padding: 0 40px 20px 0; - diff --git a/packages/comty/src/theme/base/vars.less b/packages/comty/src/theme/base/vars.less deleted file mode 100644 index 01cf6ff6..00000000 --- a/packages/comty/src/theme/base/vars.less +++ /dev/null @@ -1,47 +0,0 @@ -@__app_background: rgb(249, 249, 249); -@__app_backgroundAccent: rgb(162, 162, 162); -@__app_color: rgb(51, 51, 51); -@__app_Accent:#2d2d2d; - -@__app_winavar_height: 25px; - -@__app_generalFont: "Poppins", sans-serif; -@__app_secondaryFont: "Manrope", sans-serif; - -@__app_SwapDuration: 170ms; - -@__app_layout_content_padding: 0 40px 20px 0; - - -@__Global_layout_backgroud: #F9F9F9; -@__Global_layout_color: #2d2d2d; -@__Global_layout_border-rd: 27px 0 0 0; -@__Global_layout_transitions-dur: 200ms; -@__Global_Components_transitions_dur: 150ms; - - -@transition-ease-in: all 0.3s ease-out; -@transition-ease-out: all 0.3s ease-out; -@transition-ease-inout: all 150ms ease-in-out; - - -@Overlay_wrapper_hidden_width: 22vw; -@Overlay_wrapper_showFull_width: 94.2%; -@Overlay_wrapper_showHalf_width: 35vw; - -@Overlay_container_1_btn_backgroud: #4c4c4c; -@Overlay_container_1_btn_color: #fff; -@Overlay_container_1_btn_shadow: 0px 0px 10px 0px rgba(255, 255, 255, 0.205); - - -@Overlay_wrapper_maxwidth: 23vw; - -@Overlay_container1_def_color: #201F23; -@Overlay_container1_active_color: #fff; - -@Overlay_container2_active_width: 35vw; -@Overlay_container2_color: #201F23; -@Overlay_container2_backgroud: #fff; - -@Overlay_container1_padding: 30px 70px 30px 75px; -@Overlay_container2_padding: 20px 15px 15px 15px; \ No newline at end of file diff --git a/packages/comty/src/theme/index.js b/packages/comty/src/theme/index.js deleted file mode 100644 index 227d19fd..00000000 --- a/packages/comty/src/theme/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const { resolve } = require('path'); -const lessToJs = require('less-vars-to-js'); -const fs = require('fs'); - -const convToVars = file => lessToJs(fs.readFileSync(resolve(__dirname, file), 'utf8')) - -module.exports = convToVars('./index.less') \ No newline at end of file diff --git a/packages/comty/src/theme/index.less b/packages/comty/src/theme/index.less deleted file mode 100644 index 0bdefb44..00000000 --- a/packages/comty/src/theme/index.less +++ /dev/null @@ -1 +0,0 @@ -@import './base/index.less'; diff --git a/packages/comty/typings.d.ts b/packages/comty/typings.d.ts deleted file mode 100644 index 06c8a5b8..00000000 --- a/packages/comty/typings.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module '*.css'; -declare module '*.less'; -declare module '*.png'; -declare module '*.svg' { - export function ReactComponent( - props: React.SVGProps, - ): React.ReactElement; - const url: string; - export default url; -} diff --git a/packages/comty-electron/electron-builder.yml b/packages/desktop/electron-builder.yml similarity index 62% rename from packages/comty-electron/electron-builder.yml rename to packages/desktop/electron-builder.yml index 6cac0d4d..abc30b12 100644 --- a/packages/comty-electron/electron-builder.yml +++ b/packages/desktop/electron-builder.yml @@ -1,6 +1,6 @@ -appId: com.example.bruh -productName: Bruh -copyright: Copyright © Bruh +appId: com.ragestudio.comty +productName: Comty +copyright: Copyright © RageStudio directories: output: dist buildResources: resources diff --git a/packages/comty-electron/main/configs/config.js b/packages/desktop/main/configs/config.js similarity index 100% rename from packages/comty-electron/main/configs/config.js rename to packages/desktop/main/configs/config.js diff --git a/packages/comty-electron/main/icon.png b/packages/desktop/main/icon.png similarity index 100% rename from packages/comty-electron/main/icon.png rename to packages/desktop/main/icon.png diff --git a/packages/desktop/main/index.js b/packages/desktop/main/index.js new file mode 100644 index 00000000..e331ca7f --- /dev/null +++ b/packages/desktop/main/index.js @@ -0,0 +1,234 @@ +const path = require("path") +const { + app, + BrowserWindow, + ipcMain, + Tray, + Menu, + MenuItem, + dialog, + shell, + screen, + BrowserView, + systemPreferences, + Notification, + globalShortcut +} = require("electron") +const log = require("electron-log") +const packagejson = require("../../../package.json") +const is = require("electron-is") +const waitOn = require("wait-on") + +console.log(is.dev()) + +let app_path = is.dev() ? "https://indev.comty.pw" : `file://${path.join(__dirname, "..", "renderer")}/index.html`; +let mainWindow; +let tray; +let watcher; + +// This gets rid of this: https://github.com/electron/electron/issues/13186 +process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true +// app.commandLine.appendSwitch("disable-web-security") +//app.commandLine.appendSwitch("disable-gpu-vsync=gpu") +app.commandLine.appendSwitch("disable-features", "OutOfBlinkCors") + +const gotTheLock = app.requestSingleInstanceLock() +const notifySupport = Notification.isSupported() + +// Prevent multiple instances +if (!gotTheLock) { + app.quit() +} + +function relaunchApp() { + mainWindow.close() + app.relaunch() +} + +function resumeApp() { + if (mainWindow) { + mainWindow.show() + mainWindow.focus() + } else { + createWindow() + } +} + +function notify(params) { + if (!notifySupport || !params) return false + let options = { + title: "", + body: "", + icon: null, + timeoutType: "default" + } + + const keys = Object.keys(params) + const values = Object.values(params) + + for (let i = 0; i < keys.length; i++) { + options[keys[i]] = values[i] + } + + new Notification(options).show() +} + +function createWindow() { + mainWindow = new BrowserWindow({ + title: packagejson.title, + icon: path.join(__dirname, "./icon.png"), + width: 1100, + height: 700, + minWidth: 1256, + minHeight: 755, + show: true, + frame: false, + transparent: false, + hasShadow: true, + //webgl: true, + visualEffectState: "followWindow", + backgroundColor: "#00ffffff", + webPreferences: { + //enableRemoteModule: true, + enableBlinkFeatures: true, + experimentalFeatures: true, + nodeIntegration: true, + // Disable in dev since I think hot reload is messing with it + webSecurity: !is.dev() + } + }) + + if (is.dev()) { + app.commandLine.appendSwitch("remote-debugging-port", "9222") + globalShortcut.register("CommandOrControl+R", () => { + mainWindow.reload() + }) + + globalShortcut.register("F5", () => { + mainWindow.reload() + }) + } + + mainWindow.webContents.session.webRequest.onHeadersReceived( + { + urls: ["http://*/*", "https://*/*"] + }, + (details, callback) => { + delete details.responseHeaders["Access-Control-Allow-Origin"] + delete details.responseHeaders["access-control-allow-origin"] + if (details.url.includes("www.google-analytics.com")) { + details.responseHeaders["Access-Control-Allow-Origin"] = [app_path] + } else { + details.responseHeaders["Access-Control-Allow-Origin"] = ["*"] + } + callback({ + cancel: false, + responseHeaders: details.responseHeaders + }) + } + ) + + mainWindow.loadURL(app_path) + mainWindow.focus() + + if (is.dev()) { + mainWindow.webContents.openDevTools() + } + + // const handleRedirect = (e, url) => { + // if (url !== mainWindow.webContents.getURL()) { + // e.preventDefault() + // shell.openExternal(url) + // } + // }; + + // mainWindow.webContents.on("will-navigate", handleRedirect) + // mainWindow.webContents.on("new-window", handleRedirect) +} + +app.on("ready", () => { + if (is.dev()) { + loadWindow = new BrowserWindow({ + width: 700, + height: 500, + frame: false, + resizable: false, + center: true, + transparent: true, + backgroundColor: "#00000000", + }); + + loadWindow.loadURL(`file://${__dirname}/statics/loading_dev.html`) + + notify({ title: "Starting development server..." }) + + // waitOn({ resources: [app_path] }, function (err) { + // if (err) { + // return log.log(err) + // } + // }) + + createWindow() + loadWindow.close() + } else { + createWindow() + } +}) + +app.on("window-all-closed", () => { + mainWindow = null; +}) + +app.on("before-quit", async () => { + mainWindow.removeAllListeners("close"); + mainWindow = null; +}) + +ipcMain.handle("update-progress-bar", (event, p) => { + mainWindow.setProgressBar(p); +}) + +ipcMain.handle("hide-window", () => { + if (mainWindow) { + mainWindow.hide(); + } +}) + +ipcMain.handle("show-window", () => { + if (mainWindow) { + mainWindow.show(); + mainWindow.focus(); + } +}) + +ipcMain.handle("min-max-window", () => { + if (mainWindow.isMaximized()) { + mainWindow.unmaximize(); + } else if (mainWindow.maximizable) { + mainWindow.maximize(); + } +}) + +ipcMain.handle("getSystemPreferences", () => { + return systemPreferences +}) + +ipcMain.handle("minimize-window", () => { + mainWindow.minimize(); +}) + +ipcMain.handle("quit-app", () => { + app.quit(); +}) + +ipcMain.handle("open-devtools", () => { + mainWindow.webContents.openDevTools({ mode: "undocked" }); +}) + +ipcMain.handle("appRelaunch", () => { + relaunchApp() +}) + +ipcMain.handle("inspectElement", (event, payload) => { + mainWindow.inspectElement(payload.x, payload.y) +}) \ No newline at end of file diff --git a/packages/comty-electron/main/statics/loading.css b/packages/desktop/main/statics/loading.css similarity index 100% rename from packages/comty-electron/main/statics/loading.css rename to packages/desktop/main/statics/loading.css diff --git a/packages/comty-electron/main/statics/loading.html b/packages/desktop/main/statics/loading.html similarity index 100% rename from packages/comty-electron/main/statics/loading.html rename to packages/desktop/main/statics/loading.html diff --git a/packages/comty-electron/main/statics/loading_dev.html b/packages/desktop/main/statics/loading_dev.html similarity index 100% rename from packages/comty-electron/main/statics/loading_dev.html rename to packages/desktop/main/statics/loading_dev.html diff --git a/packages/desktop/package.json b/packages/desktop/package.json new file mode 100644 index 00000000..19c7ca94 --- /dev/null +++ b/packages/desktop/package.json @@ -0,0 +1,15 @@ +{ + "name": "comty-desktop", + "version": "0.0.1", + "main": "main/index.js", + "license": "MIT", + "scripts": { + "start": "electron ." + }, + "dependencies": { + "electron": "17.1.2", + "electron-log": "^3.0.0", + "electron-is": "^1.0.0", + "wait-on": "^2.0.0" + } +} diff --git a/packages/server/.babelrc b/packages/server/.babelrc deleted file mode 100644 index 5bdf02fa..00000000 --- a/packages/server/.babelrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": 4 - } - } - ] - ], - "plugins": [ - "@babel/plugin-transform-runtime" - ] -} \ No newline at end of file diff --git a/packages/server/docker-compose.yml b/packages/server/docker-compose.yml new file mode 100644 index 00000000..15710489 --- /dev/null +++ b/packages/server/docker-compose.yml @@ -0,0 +1,9 @@ +version: "3" + +services: + db: + image: "mongo:5.0" + ports: + - "27017:27017" + volumes: + - "./d_data/db:/data/db" \ No newline at end of file diff --git a/packages/server/package.json b/packages/server/package.json index 79524d70..b703c5c9 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,30 +1,31 @@ { - "name": "@ragestudio/server", - "version": "0.12.8", + "name": "@comty/server", + "version": "0.15.0", "main": "dist/index.js", - "types": "dist/index.d.ts", - "publishConfig": { - "access": "public" - }, - "files": [ - "dist", - "src" - ], "scripts": { - "start": "nodemon --inspect --exec babel-node ./src" + "dev": "nodemon --ignore dist/ --exec corenode-node ./src/index.js" }, "license": "MIT", "dependencies": { - "@babel/node": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/runtime": "^7.12.5", - "@nodecorejs/cloudlink": "^0.15.1", - "babel-node": "^0.0.1-security", - "nodemon": "^2.0.7" + "@corenode/utils": "0.28.26", + "@nanoexpress/middleware-file-upload": "^1.0.6", + "axios": "0.25.0", + "bcrypt": "5.0.1", + "connect-mongo": "4.6.0", + "corenode": "0.28.26", + "dicebar_lib": "1.0.1", + "jsonwebtoken": "8.5.1", + "linebridge": "0.10.13", + "moment": "2.29.1", + "mongoose": "6.1.9", + "nanoid": "3.2.0", + "passport": "0.5.2", + "passport-jwt": "4.0.0", + "passport-local": "1.0.0", + "path-to-regexp": "6.2.0" + }, + "devDependencies": { + "cross-env": "^7.0.3", + "nodemon": "^2.0.15" } } diff --git a/packages/server/src/controllers/ConfigController/index.js b/packages/server/src/controllers/ConfigController/index.js new file mode 100644 index 00000000..7599d9f5 --- /dev/null +++ b/packages/server/src/controllers/ConfigController/index.js @@ -0,0 +1,12 @@ +import { ComplexController } from "linebridge/dist/classes" + +export default class ConfigController extends ComplexController { + static refName = "ConfigController" + static useMiddlewares = ["withAuthentication", "onlyAdmin"] + + post = { + "/update_config": async (req, res) => { + + }, + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/FilesController/index.js b/packages/server/src/controllers/FilesController/index.js new file mode 100644 index 00000000..5b9f5c21 --- /dev/null +++ b/packages/server/src/controllers/FilesController/index.js @@ -0,0 +1,65 @@ +import { ComplexController } from "linebridge/dist/classes" +import path from "path" +import fs from "fs" +import stream from "stream" + +function resolveToUrl(filepath) { + return `${global.globalPublicURI}/uploads/${filepath}` +} + +export default class FilesController extends ComplexController { + static refName = "FilesController" + + get = { + "/uploads/:id": (req, res) => { + const filePath = path.join(global.uploadPath, req.params?.id) + + const readStream = fs.createReadStream(filePath) + const passTrough = new stream.PassThrough() + + stream.pipeline(readStream, passTrough, (err) => { + if (err) { + return res.status(400) + } + }) + + return passTrough.pipe(res) + } + } + + post = { + "/upload": { + middlewares: ["withAuthentication", "fileUpload"], + fn: async (req, res) => { + const urls = [] + const failed = [] + + if (!fs.existsSync(global.uploadPath)) { + await fs.promises.mkdir(global.uploadPath, { recursive: true }) + } + + if (req.files) { + for await (let file of req.files) { + try { + const filename = `${req.decodedToken.user_id}-${new Date().getTime()}-${file.filename}` + + const diskPath = path.join(global.uploadPath, filename) + + await fs.promises.writeFile(diskPath, file.data) + + urls.push(resolveToUrl(filename)) + } catch (error) { + console.log(error) + failed.push(file.filename) + } + } + } + + return res.json({ + urls: urls, + failed: failed, + }) + } + } + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/PostsController/index.js b/packages/server/src/controllers/PostsController/index.js new file mode 100644 index 00000000..de26bbf1 --- /dev/null +++ b/packages/server/src/controllers/PostsController/index.js @@ -0,0 +1,171 @@ +import { ComplexController } from "linebridge/dist/classes" +import { Schematized } from "../../lib" +import { Post, User } from "../../models" + +export default class PostsController extends ComplexController { + static refName = "PostsController" + static useMiddlewares = ["withAuthentication"] + + methods = { + createPost: async (payload) => { + const { user_id, message } = payload + const userData = await User.findById(user_id) + + const post = new Post({ + user_id: typeof user_id === "object" ? user_id.toString() : user_id, + message: String(message).toString(), + created_at: new Date().getTime(), + }) + + await post.save() + + global.wsInterface.io.emit(`new.post`, { + ...post.toObject(), + user: userData.toObject(), + }) + global.wsInterface.io.emit(`new.post.${post.user_id}`, { + ...post.toObject(), + user: userData.toObject(), + }) + + return post + }, + likePost: async (payload) => { + const { user_id, post_id } = payload + const userData = await User.findById(user_id) + const postData = await Post.findById(post_id) + + if (postData.likes.includes(user_id)) { + postData.likes = postData.likes.filter(id => id !== user_id) + await postData.save() + + return false + } + + postData.likes.push(user_id) + await postData.save() + + global.wsInterface.io.emit(`like.post`, { + ...postData.toObject(), + user: userData.toObject(), + }) + global.wsInterface.io.emit(`like.post.${postData.user_id}`, { + ...postData.toObject(), + user: userData.toObject(), + }) + global.wsInterface.io.emit(`like.post.${post_id}`, { + ...postData.toObject(), + user: userData.toObject(), + }) + + return postData + }, + unlikePost: async (payload) => { + const { user_id, post_id } = payload + const userData = await User.findById(user_id) + const postData = await Post.findById(post_id) + + postData.likes = postData.likes.filter(id => id !== user_id) + await postData.save() + + global.wsInterface.io.emit(`unlike.post`, { + ...postData.toObject(), + user: userData.toObject(), + }) + global.wsInterface.io.emit(`unlike.post.${postData.user_id}`, { + ...postData.toObject(), + user: userData.toObject(), + }) + global.wsInterface.io.emit(`unlike.post.${post_id}`, { + ...postData.toObject(), + user: userData.toObject(), + }) + + return postData + }, + } + + get = { + "/feed": Schematized({ + select: ["user_id"] + }, async (req, res) => { + const feedLength = req.query?.feedLength ?? 25 + + // fetch posts from later of lenghtOffset with a maximum of feedLength + // make sort by date descending + let posts = await Post.find(req.selection) + .sort({ created_at: -1 }) + .limit(feedLength) + + // fetch and add user data to each post + posts = posts.map(async (post) => { + const user = await User.findById(post.user_id) + + return { + ...post.toObject(), + user: user.toObject(), + } + }) + + posts = await Promise.all(posts) + + return res.json(posts) + }), + } + + put = { + "/post": Schematized({ + required: ["message"], + select: ["message"], + }, async (req, res) => { + const post = await this.methods.createPost({ + user_id: req.user.id, + message: req.selection.message, + }) + + return res.json(post) + }), + "/like": Schematized({ + required: ["post_id"], + select: ["post_id"], + }, async (req, res) => { + const post = await this.methods.likePost({ + user_id: req.user._id.toString(), + post_id: req.selection.post_id, + }).catch((err) => { + return false + }) + + if (!post) { + return res.json({ + sucess: false, + }) + } + + return res.json({ + sucess: true, + }) + }), + "/unlike": Schematized({ + required: ["post_id"], + select: ["post_id"], + }, async (req, res) => { + const post = await this.methods.unlikePost({ + user_id: req.user._id.toString(), + post_id: req.selection.post_id, + }).catch((err) => { + return false + }) + + if (!post) { + return res.json({ + sucess: false, + }) + } + + return res.json({ + sucess: true, + }) + }), + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/PublicController/index.js b/packages/server/src/controllers/PublicController/index.js new file mode 100644 index 00000000..664e431c --- /dev/null +++ b/packages/server/src/controllers/PublicController/index.js @@ -0,0 +1,17 @@ +import { ComplexController } from "linebridge/dist/classes" + +export default class PublicController extends ComplexController { + static refName = "PublicController" + + post = { + "/only_managers_test": { + middlewares: ["withAuthentication", "permissions"], + fn: (req, res) => { + return res.json({ + message: "Congrats!, Only managers can access this route (or you are an admin)", + assertedPermissions: req.assertedPermissions + }) + }, + } + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/RolesController/index.js b/packages/server/src/controllers/RolesController/index.js new file mode 100644 index 00000000..d00dbed7 --- /dev/null +++ b/packages/server/src/controllers/RolesController/index.js @@ -0,0 +1,113 @@ +import { ComplexController } from "linebridge/dist/classes" +import { Role, User } from "../../models" +import { Schematized } from "../../lib" + +export default class RolesController extends ComplexController { + static refName = "RolesController" + static useMiddlewares = ["roles"] + + get = { + "/roles": Schematized({ + select: ["user_id", "username"], + }, async (req, res) => { + const roles = await Role.find() + + return res.json(roles) + }), + "/user_roles": { + middlewares: ["withAuthentication"], + fn: Schematized({ + select: ["username"], + }, async (req, res) => { + const user = await User.findOne(req.selection) + + if (!user) { + return res.status(404).json({ error: "No user founded" }) + } + + return res.json(user.roles) + }) + }, + } + + post = { + "/role": { + middlewares: ["withAuthentication"], + fn: Schematized({ + required: ["name"], + select: ["name", "description"], + }, async (req, res) => { + await Role.findOne(req.selection).then((data) => { + if (data) { + return res.status(409).json("This role is already created") + } + + let role = new Role({ + name: req.selection.name, + description: req.selection.description, + }) + + role.save() + + return res.json(role) + }) + }) + }, + "/update_user_roles": { + middlewares: ["withAuthentication"], + fn: Schematized({ + required: ["update"], + select: ["update"], + }, async (req, res) => { + // check if issuer user is admin + if (!req.isAdmin()) { + return res.status(403).send("You do not have administrator permission") + } + + if (!Array.isArray(req.selection.update)) { + return res.status(400).send("Invalid update request") + } + + req.selection.update.forEach(async (update) => { + const user = await User.findById(update._id).catch(err => { + return false + }) + + console.log(update.roles) + + if (user) { + user.roles = update.roles + + await user.save() + } + }) + + return res.send("done") + }), + }, + } + + delete = { + "/role": { + middlewares: ["withAuthentication"], + fn: Schematized({ + required: ["name"], + select: ["name"], + }, async (req, res) => { + if (req.selection.name === "admin") { + return res.status(409).json("You can't delete admin role") + } + + await Role.findOne(req.selection).then((data) => { + if (!data) { + return res.status(404).json("This role is not found") + } + + data.remove() + + return res.json(data) + }) + }) + }, + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/SessionController/index.js b/packages/server/src/controllers/SessionController/index.js new file mode 100644 index 00000000..7cfee5b0 --- /dev/null +++ b/packages/server/src/controllers/SessionController/index.js @@ -0,0 +1,110 @@ +import { ComplexController } from "linebridge/dist/classes" +import { Session } from "../../models" +import jwt from "jsonwebtoken" + +export default class SessionController extends ComplexController { + static refName = "SessionController" + + get = { + "/sessions": { + middlewares: ["withAuthentication"], + fn: async (req, res) => { + // get current session _id + const { _id } = req.user + const sessions = await Session.find({ user_id: _id }, { token: 0 }) + + return res.json(sessions) + }, + }, + "/current_session": { + middlewares: ["withAuthentication"], + fn: async (req, res) => { + return res.json(req.currentSession) + } + }, + } + + post = { + "/validate_session": { + middlewares: ["useJwtStrategy"], + fn: async (req, res) => { + const token = req.body.session + + let result = { + expired: false, + valid: true + } + + await jwt.verify(token, req.jwtStrategy.secretOrKey, async (err, decoded) => { + if (err) { + result.valid = false + result.error = err.message + + if (err.message === "jwt expired") { + result.expired = true + } + return + } + + result = { ...result, ...decoded } + + const sessions = await Session.find({ user_id: result.user_id }) + const sessionsTokens = sessions.map((session) => { + if (session.user_id === result.user_id) { + return session.token + } + }) + + if (!sessionsTokens.includes(token)) { + result.valid = false + result.error = "Session token not found" + } else { + result.valid = true + } + }) + + return res.json(result) + }, + }, + } + + delete = { + "/session": { + middlewares: ["withAuthentication"], + fn: async (req, res) => { + const { token, user_id } = req.body + + if (typeof user_id === "undefined") { + return res.status(400).send("No user_id provided") + } + if (typeof token === "undefined") { + return res.status(400).send("No token provided") + } + + const session = await Session.findOneAndDelete({ user_id, token }) + if (session) { + return res.send("done") + } + + return res.status(404).send("not found") + }, + }, + "/sessions": { + middlewares: ["withAuthentication"], + fn: async (req, res) => { + const { user_id } = req.body + + if (typeof user_id === "undefined") { + return res.status(400).send("No user_id provided") + } + + const allSessions = await Session.deleteMany({ user_id }) + if (allSessions) { + return res.send("done") + } + + return res.status(404).send("not found") + } + }, + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/UserController/index.js b/packages/server/src/controllers/UserController/index.js new file mode 100644 index 00000000..a5d975e9 --- /dev/null +++ b/packages/server/src/controllers/UserController/index.js @@ -0,0 +1,249 @@ +import { ComplexController } from "linebridge/dist/classes" +import passport from "passport" + +import { User } from "../../models" +import { Token, Schematized, createUser } from "../../lib" +import SessionController from "../SessionController" +import _ from "lodash" + +const AllowedUserUpdateKeys = [ + "avatar", + "username", + "email", + "fullName", + "verified", +] + +export default class UserController extends ComplexController { + static refName = "UserController" + + methods = { + createNew: async (payload) => { + const user = await createUser(payload) + + // maybe for the future can implement a event listener for this + + return user + }, + update: async (payload) => { + if (typeof payload.user_id === "undefined") { + throw new Error("No user_id provided") + } + if (typeof payload.update === "undefined") { + throw new Error("No update provided") + } + + let user = await User.findById(payload.user_id) + + if (!user) { + throw new Error("User not found") + } + + const updateKeys = Object.keys(payload.update) + + updateKeys.forEach((key) => { + if (!AllowedUserUpdateKeys.includes(key)) { + return false + } + + user[key] = payload.update[key] + }) + + await user.save() + + global.wsInterface.io.emit(`user.update`, { + ...user.toObject(), + }) + global.wsInterface.io.emit(`user.update.${payload.user_id}`, { + ...user.toObject(), + }) + + return user.toObject() + } + } + + get = { + "/self": { + middlewares: ["withAuthentication"], + fn: async (req, res) => { + return res.json(req.user) + }, + }, + "/user": { + middlewares: ["withAuthentication"], + fn: Schematized({ + select: ["_id", "username"], + }, async (req, res) => { + const user = await User.findOne(req.selection) + + if (!user) { + return res.status(404).json({ error: "User not exists" }) + } + + return res.json(user) + }), + }, + "/users": { + middlewares: ["withAuthentication"], + fn: Schematized({ + select: ["_id", "username"], + }, async (req, res) => { + let result = [] + let selectQueryKeys = [] + + if (Array.isArray(req.selection._id)) { + for await (let _id of req.selection._id) { + const user = await User.findById(_id).catch(err => { + return false + }) + if (user) { + result.push(user) + } + } + } else { + result = await User.find(req.selection, { username: 1, fullName: 1, _id: 1, roles: 1, avatar: 1 }) + } + + if (req.query?.select) { + try { + req.query.select = JSON.parse(req.query.select) + } catch (error) { + req.query.select = {} + } + + selectQueryKeys = Object.keys(req.query.select) + } + + if (selectQueryKeys.length > 0) { + result = result.filter(user => { + let pass = false + const selectFilter = req.query.select + + selectQueryKeys.forEach(key => { + if (Array.isArray(selectFilter[key]) && Array.isArray(user[key])) { + // check if arrays includes any of the values + pass = selectFilter[key].some(val => user[key].includes(val)) + } else if (typeof selectFilter[key] === "object" && typeof user[key] === "object") { + // check if objects includes any of the values + Object.keys(selectFilter[key]).forEach(objKey => { + pass = user[key][objKey] === selectFilter[key][objKey] + }) + } + + // check if strings includes any of the values + if (typeof selectFilter[key] === "string" && typeof user[key] === "string") { + pass = selectFilter[key].split(",").some(val => user[key].includes(val)) + } + }) + + return pass + }) + } + + if (!result) { + return res.status(404).json({ error: "Users not found" }) + } + + return res.json(result) + }) + }, + } + + post = { + "/login": async (req, res) => { + passport.authenticate("local", { session: false }, async (error, user, options) => { + if (error) { + return res.status(500).json(`Error validating user > ${error.message}`) + } + + if (!user) { + return res.status(401).json("Invalid credentials") + } + + const token = await Token.createNewAuthToken(user, options) + + return res.json({ token: token }) + })(req, res) + }, + "/logout": { + middlewares: ["withAuthentication"], + fn: async (req, res, next) => { + req.body = { + user_id: req.decodedToken.user_id, + token: req.jwtToken + } + + return SessionController.delete(req, res, next) + }, + }, + "/register": Schematized({ + required: ["username", "email", "password"], + select: ["username", "email", "password", "fullName"], + }, async (req, res) => { + const result = await this.methods.createNew(req.selection).catch((err) => { + return res.status(500).json(err.message) + }) + + return res.json(result) + }), + "/update_user": { + middlewares: ["withAuthentication", "roles"], + fn: Schematized({ + required: ["_id", "update"], + select: ["_id", "update"], + }, async (req, res) => { + if (!req.selection.user_id) { + req.selection.user_id = req.user._id.toString() + } + + if ((req.selection.user_id !== req.user._id.toString()) && (req.hasRole("admin") === false)) { + return res.status(403).json({ error: "You are not allowed to update this user" }) + } + + this.methods.update({ + user_id: req.selection.user_id, + update: req.selection.update, + }).then((user) => { + return res.json({ + ...user + }) + }) + .catch((err) => { + return res.send(500).json({ + error: err.message + }) + }) + }), + }, + "/unset_public_name": { + middlewares: ["withAuthentication"], + fn: Schematized({ + select: ["user_id", "roles"], + }, async (req, res) => { + if (!req.selection.user_id) { + req.selection.user_id = req.user._id.toString() + } + + if ((req.selection.user_id !== req.user._id.toString()) && (req.hasRole("admin") === false)) { + return res.status(403).json({ error: "You are not allowed to update this user" }) + } + + this.methods.update({ + user_id: req.selection.user_id, + update: { + fullName: undefined + } + }).then((user) => { + return res.json({ + ...user + }) + }) + .catch((err) => { + return res.send(500).json({ + error: err.message + }) + }) + }) + } + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/index.js b/packages/server/src/controllers/index.js new file mode 100644 index 00000000..a19b7f97 --- /dev/null +++ b/packages/server/src/controllers/index.js @@ -0,0 +1,17 @@ +import { default as ConfigController } from "./ConfigController" +import { default as RolesController } from "./RolesController" +import { default as SessionController } from "./SessionController" +import { default as UserController } from "./UserController" +import { default as FilesController } from "./FilesController" +import { default as PublicController } from "./PublicController" +import { default as PostsController } from "./PostsController" + +export default [ + PostsController, + ConfigController, + PublicController, + RolesController, + SessionController, + UserController, + FilesController, +] \ No newline at end of file diff --git a/packages/server/src/index.js b/packages/server/src/index.js index 4a7ebff1..047b704c 100644 --- a/packages/server/src/index.js +++ b/packages/server/src/index.js @@ -1,24 +1,298 @@ -import cloudlink from '@nodecorejs/cloudlink' - -let controllers = { - TestController: { - get: (req, res, next) => { - console.log("Testing controller, it works!") +Array.prototype.updateFromObjectKeys = function (obj) { + this.forEach((value, index) => { + if (obj[value] !== undefined) { + this[index] = obj[value] } + }) + + return this +} + +import path from "path" +import LinebridgeServer from "linebridge/dist/server" +import bcrypt from "bcrypt" +import mongoose from "mongoose" +import passport from "passport" +import { User, Session, Config } from "./models" +import jwt from "jsonwebtoken" + +const { Buffer } = require("buffer") +const b64Decode = global.b64Decode = (data) => { + return Buffer.from(data, "base64").toString("utf-8") +} +const b64Encode = global.b64Encode = (data) => { + return Buffer.from(data, "utf-8").toString("base64") +} + +const ExtractJwt = require("passport-jwt").ExtractJwt +const LocalStrategy = require("passport-local").Strategy + +function parseConnectionString(obj) { + const { db_user, db_driver, db_name, db_pwd, db_hostname, db_port } = obj + return `${db_driver ?? "mongodb"}://${db_user ? `${db_user}` : ""}${db_pwd ? `:${db_pwd}` : ""}${db_user ? "@" : ""}${db_hostname ?? "localhost"}:${db_port ?? ""}/${db_name ?? ""}` +} + +class Server { + constructor() { + this.env = process.env + this.listenPort = this.env.listenPort ?? 3000 + this.wsListenPort = this.env.wsListenPort ?? 3001 + + this.controllers = require("./controllers").default + this.middlewares = require("./middlewares") + + this.instance = new LinebridgeServer({ + port: this.listenPort, + wsPort: this.wsListenPort, + headers: { + "Access-Control-Expose-Headers": "regenerated_token", + }, + onWSClientConnection: this.onWSClientConnection, + onWSClientDisconnection: this.onWSClientDisconnection, + }, this.controllers, this.middlewares) + + this.server = this.instance.httpInterface + + this.options = { + jwtStrategy: { + sessionLocationSign: this.instance.id, + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + secretOrKey: this.instance.oskid, + algorithms: ["sha1", "RS256", "HS256"], + expiresIn: this.env.signLifetime ?? "1h", + } + } + + this.instance.wsInterface["clients"] = [] + this.instance.wsInterface["findUserIdFromClientID"] = (searchClientId) => { + return this.instance.wsInterface.clients.find(client => client.id === searchClientId)?.userId ?? false + } + this.instance.wsInterface["getClientSockets"] = (userId) => { + return this.instance.wsInterface.clients.filter(client => client.userId === userId).map((client) => { + return client?.socket + }) + } + this.instance.wsInterface["broadcast"] = async (channel, ...args) => { + for await (const client of this.instance.wsInterface.clients) { + client.socket.emit(channel, ...args) + } + } + + global.wsInterface = this.instance.wsInterface + global.httpListenPort = this.listenPort + global.globalPublicURI = this.env.globalPublicURI + global.uploadPath = this.env.uploadPath ?? path.resolve(process.cwd(), "uploads") + global.jwtStrategy = this.options.jwtStrategy + global.signLocation = this.env.signLocation + + this.initialize() + } + + async initialize() { + await this.connectToDB() + await this.initializeConfigDB() + await this.checkSetup() + await this.initPassport() + await this.initWebsockets() + + await this.instance.initialize() + } + + connectToDB = () => { + return new Promise((resolve, reject) => { + try { + console.log("🌐 Trying to connect to DB...") + const dbUri = parseConnectionString(this.env) + //console.log(dbUri) + mongoose.connect(dbUri, { + useNewUrlParser: true, + useUnifiedTopology: true + }) + .then((res) => { return resolve(true) }) + .catch((err) => { return reject(err) }) + } catch (err) { + return reject(err) + } + }).then(done => { + console.log(`✅ Connected to DB`) + }).catch((error) => { + console.log(`❌ Failed to connect to DB, retrying...\n`) + console.log(error) + setTimeout(() => { + this.connectToDB() + }, 1000) + }) + } + + initializeConfigDB = async () => { + let serverConfig = await Config.findOne({ key: "server" }).catch(() => { + return false + }) + + if (!serverConfig) { + serverConfig = new Config({ + key: "server", + value: { + setup: false, + }, + }) + + + await serverConfig.save() + } + } + + checkSetup = async () => { + return new Promise(async (resolve, reject) => { + let setupOk = (await Config.findOne({ key: "server" })).value?.setup ?? false + + if (!setupOk) { + console.log("⚠️ Server setup is not complete, running setup proccess.") + let setupScript = await import("./setup") + + setupScript = setupScript.default ?? setupScript + + try { + for await (let script of setupScript) { + await script() + } + + console.log("✅ Server setup complete.") + + await Config.updateOne({ key: "server" }, { value: { setup: true } }) + + return resolve() + } catch (error) { + console.log("❌ Server setup failed.") + console.error(error) + process.exit(1) + } + } + + return resolve() + }) + } + + initPassport() { + this.instance.middlewares["useJwtStrategy"] = (req, res, next) => { + req.jwtStrategy = this.options.jwtStrategy + next() + } + this.instance.middlewares["useWS"] = (req, res, next) => { + req.ws = global.wsInterface + next() + } + + passport.use(new LocalStrategy({ + usernameField: "username", + passwordField: "password", + session: false + }, (username, password, done) => { + User.findOne({ username: b64Decode(username) }).select("+password") + .then((data) => { + if (data === null) { + return done(null, false, this.options.jwtStrategy) + } else if (!bcrypt.compareSync(b64Decode(password), data.password)) { + return done(null, false, this.options.jwtStrategy) + } + + // create a token + return done(null, data, this.options.jwtStrategy, { username, password }) + }) + .catch(err => done(err, null, this.options.jwtStrategy)) + })) + + this.server.use(passport.initialize()) + } + + initWebsockets() { + const onAuthenticated = (socket, user_id) => { + this.attachClientSocket(socket, user_id) + socket.emit("authenticated") + } + + const onAuthenticatedFailed = (socket, error) => { + this.detachClientSocket(socket) + socket.emit("authenticateFailed", { + error, + }) + } + + this.instance.wsInterface.eventsChannels.push(["/main", "authenticate", async (socket, token) => { + const session = await Session.findOne({ token }).catch(err => { + return false + }) + + if (!session) { + return onAuthenticatedFailed(socket, "Session not found") + } + + this.verifyJwt(token, async (err, decoded) => { + if (err) { + return onAuthenticatedFailed(socket, err) + } else { + const user = await User.findById(decoded.user_id).catch(err => { + return false + }) + + if (!user) { + return onAuthenticatedFailed(socket, "User not found") + } + + return onAuthenticated(socket, user) + } + }) + }]) + } + + onWSClientConnection = async (socket) => { + console.log(`🌐 Client connected: ${socket.id}`) + } + + onWSClientDisconnection = async (socket) => { + console.log(`🌐 Client disconnected: ${socket.id}`) + this.detachClientSocket(socket) + } + + attachClientSocket = async (client, userData) => { + const socket = this.instance.wsInterface.clients.find(c => c.id === client.id) + + if (socket) { + socket.socket.disconnect() + } + + const clientObj = { + id: client.id, + socket: client, + userId: userData._id.toString(), + user: userData, + } + + this.instance.wsInterface.clients.push(clientObj) + + this.instance.wsInterface.io.emit("userConnected", userData) + } + + detachClientSocket = async (client) => { + const socket = this.instance.wsInterface.clients.find(c => c.id === client.id) + + if (socket) { + socket.socket.disconnect() + this.instance.wsInterface.clients = this.instance.wsInterface.clients.filter(c => c.id !== client.id) + } + + this.instance.wsInterface.io.emit("userDisconnect", client.id) + } + + verifyJwt = (token, callback) => { + jwt.verify(token, this.options.jwtStrategy.secretOrKey, async (err, decoded) => { + if (err) { + return callback(err) + } + + return callback(null, decoded) + }) } } -let endpoints = [ - { - "path": "test", - "controller": "TestController" - }, -] - -cloudlink.register({ - origin: "localhost", - originPort: 6050, - listenPort: 5050, - controllers, - endpoints -}) \ No newline at end of file +new Server() \ No newline at end of file diff --git a/packages/server/src/lib/additionsHandler/handlers/essc.js b/packages/server/src/lib/additionsHandler/handlers/essc.js new file mode 100644 index 00000000..5b850d86 --- /dev/null +++ b/packages/server/src/lib/additionsHandler/handlers/essc.js @@ -0,0 +1,11 @@ +import { genV1 } from "../../essc" + +export default (obj) => { + obj.essc = genV1({ + type: obj.vaultItemTypeSelector ?? obj.type, + serial: obj.vaultItemSerial ?? obj.serial, + manufacturer: obj.vaultItemManufacturer ?? obj.manufacturer, + }) + + return obj +} \ No newline at end of file diff --git a/packages/server/src/lib/additionsHandler/handlers/vaultItemFlatProperties.js b/packages/server/src/lib/additionsHandler/handlers/vaultItemFlatProperties.js new file mode 100644 index 00000000..5e5346c3 --- /dev/null +++ b/packages/server/src/lib/additionsHandler/handlers/vaultItemFlatProperties.js @@ -0,0 +1,6 @@ +export default (obj) => { + return { + ...obj, + ...obj.properties, + } +} \ No newline at end of file diff --git a/packages/server/src/lib/additionsHandler/handlers/vaultItemParser.js b/packages/server/src/lib/additionsHandler/handlers/vaultItemParser.js new file mode 100644 index 00000000..91f10393 --- /dev/null +++ b/packages/server/src/lib/additionsHandler/handlers/vaultItemParser.js @@ -0,0 +1,17 @@ +export default (obj) => { + const fixedKeys = { + vaultItemManufacturer: "manufacturer", + vaultItemSerial: "serial", + vaultItemTypeSelector: "type", + vaultItemManufacturedYear: "manufacturedYear", + } + + Object.keys(obj).forEach(key => { + if (fixedKeys[key]) { + obj[fixedKeys[key]] = obj[key] + delete obj[key] + } + }) + + return obj +} \ No newline at end of file diff --git a/packages/server/src/lib/additionsHandler/index.js b/packages/server/src/lib/additionsHandler/index.js new file mode 100644 index 00000000..b4867a50 --- /dev/null +++ b/packages/server/src/lib/additionsHandler/index.js @@ -0,0 +1,22 @@ +export default async (additions, obj) => { + let query = [] + + if (Array.isArray(additions)) { + query = additions + }else { + query.push(additions) + } + + for await(let addition of query) { + try { + let script = await import(`./handlers/${addition}.js`) + script = script.default || script + + obj = await script(obj) + } catch (error) { + + } + } + + return obj +} \ No newline at end of file diff --git a/packages/server/src/lib/createUser/index.js b/packages/server/src/lib/createUser/index.js new file mode 100644 index 00000000..ef39d312 --- /dev/null +++ b/packages/server/src/lib/createUser/index.js @@ -0,0 +1,28 @@ +import { User } from "../../models" +import Avatars from "dicebar_lib" +import bcrypt from "bcrypt" + +export default async function (payload) { + let { username, password, email, fullName, roles, avatar } = payload + + const existentUser = await User.findOne({ username: username }) + + if (existentUser) { + throw new Error("User already exists") + } + + const hash = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_ROUNDS ?? 3)) + + let user = new User({ + username: username, + password: hash, + email: email, + fullName: fullName, + avatar: avatar ?? Avatars.generate({ seed: username, type: "initials" }).uri, + roles: roles, + }) + + await user.save() + + return user +} \ No newline at end of file diff --git a/packages/server/src/lib/essc/index.js b/packages/server/src/lib/essc/index.js new file mode 100644 index 00000000..aaf41591 --- /dev/null +++ b/packages/server/src/lib/essc/index.js @@ -0,0 +1,70 @@ +// random 5 digits number +const random5 = () => Math.floor(Math.random() * 90000) + 10000 + +// secure random 5 digits number +const random5Secure = () => { + const random = random5() + return random.toString().padStart(5, '0') +} + +// aa-bbbbb-cccc +//* a: type (2 digits) +//* b: serial (5 digits) +//* c: manufacturer (4 digits) + +const typesNumber = { + "computers-desktop": [1], + "computers-laptop": [2], + "computers-tablet": [3], + "computers-smartphone": [4], + "networking": [5], + "peripherals-printer": [6], + "peripherals-monitor": [7], +} + +export function genV1(params) { + let { type, serial, manufacturer } = params // please in that order + type = type.toLowerCase() + + let str = [] + + // Type parsing + let typeBuf = [] + + if (typeof typesNumber[type] === "undefined") { + typeBuf[0] = 0 + typeBuf[1] = "X" + } else { + typeBuf[0] = typesNumber[type][0] + typeBuf[1] = typesNumber[type][1] ?? "X" + } + + str.push(typeBuf.join("")) + + // Serial parsing + // if serial is not defined, generate a random 4 digits number + if (typeof serial === "undefined") { + str.push(random5().toString()) + } else { + // push last 5 digits of serial, if serial is not 5 digits, pad with 0 + let serialBuf = [] + + serialBuf[0] = serial.slice(-5, -4) ?? "0" + serialBuf[1] = serial.slice(-4, -3) ?? "0" + serialBuf[2] = serial.slice(-3, -2) ?? "0" + serialBuf[3] = serial.slice(-2, -1) ?? "0" + serialBuf[4] = serial.slice(-1) ?? "0" + + str.push(serialBuf.join("")) + } + + // Manufacturer parsing + // abreviate manufacturer name to 4 letters + if (typeof manufacturer === "undefined") { + str.push("GENR") + } else { + str.push(manufacturer.slice(0, 4).toUpperCase()) + } + + return str.join("-") +} \ No newline at end of file diff --git a/packages/server/src/lib/index.js b/packages/server/src/lib/index.js new file mode 100644 index 00000000..7ca29d87 --- /dev/null +++ b/packages/server/src/lib/index.js @@ -0,0 +1,5 @@ +export { default as Schematized } from "./schematized" +export { default as additionsHandler } from "./additionsHandler" +export { default as createUser } from "./createUser" + +export * as Token from "./token" \ No newline at end of file diff --git a/packages/server/src/lib/schematized/index.js b/packages/server/src/lib/schematized/index.js new file mode 100644 index 00000000..c121c32d --- /dev/null +++ b/packages/server/src/lib/schematized/index.js @@ -0,0 +1,57 @@ +export default (schema = {}, fn) => { + return async (req, res, next) => { + if (typeof req.body === "undefined") { + req.body = {} + } + if (typeof req.query === "undefined") { + req.query = {} + } + + if (schema.required) { + if (Array.isArray(schema.required)) { + const missingKeys = [] + const requiredKeys = Array.isArray(schema.required) ? schema.required : [] + + for await (let key of requiredKeys) { + if (typeof req.body[key] === "undefined" && typeof req.query[key] === "undefined") { + req.selection[key] = req.body[key] + continue + } + } + + if (missingKeys.length > 0) { + return res.status(400).json({ error: `Missing ${missingKeys}` }) + } + } else { + console.warn("[INVALID SCHEMA] schema.required is defined but is not an array") + } + } + + if (schema.select) { + if (Array.isArray(schema.select)) { + if (typeof req.selection !== "object") { + req.selection = {} + } + + // assign objects along request body and query. + for await (let key of schema.select) { + if (req.body && typeof req.body[key] !== "undefined") { + req.selection[key] = req.body[key] + continue + } + + if (req.query && typeof req.query[key] !== "undefined") { + req.selection[key] = req.query[key] + continue + } + } + } else { + console.warn("[INVALID SCHEMA] schema.select is defined but is not an array") + } + } + + if (typeof fn === "function") { + return await fn(req, res, next) + } + } +} \ No newline at end of file diff --git a/packages/server/src/lib/token/index.js b/packages/server/src/lib/token/index.js new file mode 100644 index 00000000..91e7033f --- /dev/null +++ b/packages/server/src/lib/token/index.js @@ -0,0 +1,54 @@ +import jwt from "jsonwebtoken" +import { nanoid } from "nanoid" +import { Session, User } from "../../models" + +export async function createNewAuthToken(user, options = {}) { + const payload = { + user_id: user._id, + username: user.username, + email: user.email, + refreshToken: nanoid(), + signLocation: global.signLocation, + } + + await User.findByIdAndUpdate(user._id, { refreshToken: payload.refreshToken }) + + return await signNew(payload, options) +} + +export async function signNew(payload, options = {}) { + if (options.updateSession) { + const sessionData = await Session.findById(options.updateSession) + payload.session_uuid = sessionData.session_uuid + } else { + payload.session_uuid = nanoid() + } + + const token = jwt.sign(payload, options.secretOrKey, { + expiresIn: options.expiresIn ?? "1h", + algorithm: options.algorithm ?? "HS256" + }) + + const session = { + token: token, + session_uuid: payload.session_uuid, + username: payload.username, + user_id: payload.user_id, + date: new Date().getTime(), + location: payload.signLocation ?? "rs-auth", + } + + if (options.updateSession) { + await Session.findByIdAndUpdate(options.updateSession, { + token: session.token, + date: session.date, + location: session.location, + }) + } else { + let newSession = new Session(session) + + newSession.save() + } + + return token +} \ No newline at end of file diff --git a/packages/server/src/middlewares/errorHandler/index.js b/packages/server/src/middlewares/errorHandler/index.js new file mode 100644 index 00000000..d8e53df2 --- /dev/null +++ b/packages/server/src/middlewares/errorHandler/index.js @@ -0,0 +1,5 @@ +export const errorHandler = (error, req, res, next) => { + res.json({ error: error.message }) +} + +export default errorHandler \ No newline at end of file diff --git a/packages/server/src/middlewares/hasPermissions/index.js b/packages/server/src/middlewares/hasPermissions/index.js new file mode 100644 index 00000000..2cc254a8 --- /dev/null +++ b/packages/server/src/middlewares/hasPermissions/index.js @@ -0,0 +1,30 @@ +export const hasPermissions = (req, res, next) => { + if (typeof (req.userData) == "undefined") { + return res.status(403).json(`User data is not available, please ensure if you are authenticated`) + } + + const { _id, username, roles } = req.userData + const { permissions } = req.body + + req.userPermissions = roles + + let check = [] + + if (Array.isArray(permissions)) { + check = permissions + } else { + check.push(permissions) + } + + if (check.length > 0) { + check.forEach((role) => { + if (!roles.includes(role)) { + return res.status(403).json(`${username} not have permissions ${permissions}`) + } + }) + } + + next() +} + +export default hasPermissions diff --git a/packages/server/src/middlewares/index.js b/packages/server/src/middlewares/index.js new file mode 100644 index 00000000..f6bdcfcc --- /dev/null +++ b/packages/server/src/middlewares/index.js @@ -0,0 +1,10 @@ +const fileUpload = require("@nanoexpress/middleware-file-upload/cjs")() + +export { default as withAuthentication } from "./withAuthentication" +export { default as errorHandler } from "./errorHandler" +export { default as hasPermissions } from "./hasPermissions" +export { default as roles } from "./roles" +export { default as onlyAdmin } from "./onlyAdmin" +export { default as permissions } from "./permissions" + +export { fileUpload as fileUpload } \ No newline at end of file diff --git a/packages/server/src/middlewares/onlyAdmin/index.js b/packages/server/src/middlewares/onlyAdmin/index.js new file mode 100644 index 00000000..1bac1ead --- /dev/null +++ b/packages/server/src/middlewares/onlyAdmin/index.js @@ -0,0 +1,7 @@ +export default (req, res, next) => { + if (!req.user.roles.includes("admin")) { + return res.status(403).send({ error: "To make this request it is necessary to have administrator permissions" }) + } + + next() +} \ No newline at end of file diff --git a/packages/server/src/middlewares/permissions/index.js b/packages/server/src/middlewares/permissions/index.js new file mode 100644 index 00000000..bff9e765 --- /dev/null +++ b/packages/server/src/middlewares/permissions/index.js @@ -0,0 +1,39 @@ +import { Config } from "../../models" + +export default (req, res, next) => { + const requestedPath = `${req.method.toLowerCase()}${req.path.toLowerCase()}` + + Config.findOne({ key: "permissions" }, undefined, { + lean: true, + }).then(({ value }) => { + req.assertedPermissions = [] + + const pathRoles = value.pathRoles ?? {} + + if (typeof pathRoles[requestedPath] === "undefined") { + console.warn(`[Permissions] No permissions defined for path ${requestedPath}`) + return next() + } + + const requiredRoles = Array.isArray(pathRoles[requestedPath]) ? pathRoles[requestedPath] : [pathRoles[requestedPath]] + + requiredRoles.forEach((role) => { + if (req.user.roles.includes(role)) { + req.assertedPermissions.push(role) + } + }) + + if (req.user.roles.includes("admin")) { + req.assertedPermissions.push("admin") + } + + if (req.assertedPermissions.length === 0 && !req.user.roles.includes("admin")) { + return res.status(403).json({ + error: "forbidden", + message: "You don't have permission to access this resource", + }) + } + + next() + }) +} \ No newline at end of file diff --git a/packages/server/src/middlewares/roles/index.js b/packages/server/src/middlewares/roles/index.js new file mode 100644 index 00000000..16c9e3c3 --- /dev/null +++ b/packages/server/src/middlewares/roles/index.js @@ -0,0 +1,19 @@ +export default (req, res, next) => { + req.isAdmin = () => { + if (req.user.roles.includes("admin")) { + return true + } + + return false + } + + req.hasRole = (role) => { + if (req.user.roles.includes(role)) { + return true + } + + return false + } + + next() +} \ No newline at end of file diff --git a/packages/server/src/middlewares/withAuthentication/index.js b/packages/server/src/middlewares/withAuthentication/index.js new file mode 100644 index 00000000..71509706 --- /dev/null +++ b/packages/server/src/middlewares/withAuthentication/index.js @@ -0,0 +1,63 @@ +import { Session, User } from "../../models" +import { Token } from "../../lib" +import jwt from "jsonwebtoken" + +export default (req, res, next) => { + function reject(description) { + return res.status(401).send({ error: `${description ?? "Invalid session"}` }) + } + + const authHeader = req.headers?.authorization?.split(" ") + + if (authHeader && authHeader[0] === "Bearer") { + const token = authHeader[1] + let decoded = null + + try { + decoded = jwt.decode(token) + } catch (error) { + console.error(error) + } + + if (!decoded) { + return reject("Cannot decode token") + } + + jwt.verify(token, global.jwtStrategy.secretOrKey, async (err) => { + const sessions = await Session.find({ user_id: decoded.user_id }) + const currentSession = sessions.find((session) => session.token === token) + + if (!currentSession) { + return reject("Cannot find session") + } + + const userData = await User.findOne({ _id: currentSession.user_id }).select("+refreshToken") + + if (!userData) { + return res.status(404).send({ error: "No user data found" }) + } + + if (err) { + if (decoded.refreshToken === userData.refreshToken) { + const regeneratedToken = await Token.createNewAuthToken(userData, { + ...global.jwtStrategy, + updateSession: currentSession._id, + }) + + res.setHeader("regenerated_token", regeneratedToken) + } else { + return reject("Token expired, cannot refresh token either") + } + } + + req.user = userData + req.jwtToken = token + req.decodedToken = decoded + req.currentSession = currentSession + + return next() + }) + } else { + return reject("Missing token header") + } +} diff --git a/packages/server/src/models/index.js b/packages/server/src/models/index.js new file mode 100644 index 00000000..d01eaf02 --- /dev/null +++ b/packages/server/src/models/index.js @@ -0,0 +1,22 @@ +import mongoose, { Schema } from "mongoose" + +function getSchemas() { + const obj = Object() + + const _schemas = require("../schemas") + Object.keys(_schemas).forEach((key) => { + obj[key] = Schema(_schemas[key]) + }) + + return obj +} + +const schemas = getSchemas() + +export const Config = mongoose.model("Config", schemas.Config, "config") +export const User = mongoose.model("User", schemas.User, "accounts") +export const Session = mongoose.model("Session", schemas.Session, "sessions") +export const Role = mongoose.model("Role", schemas.Role, "roles") +export const Post = mongoose.model("Post", schemas.Post, "posts") +export const Comment = mongoose.model("Comment", schemas.Comment, "comments") +//export const Tag = mongoose.model("Tag", schemas.Tag, "tags") \ No newline at end of file diff --git a/packages/server/src/schemas/comment/index.js b/packages/server/src/schemas/comment/index.js new file mode 100644 index 00000000..5f7b92f3 --- /dev/null +++ b/packages/server/src/schemas/comment/index.js @@ -0,0 +1,6 @@ +export default { + user_id: { type: String, required: true }, + content: { type: String, required: true }, + created_at: { type: Date, default: Date.now }, + liked: { type: Array, default: [] }, +} \ No newline at end of file diff --git a/packages/server/src/schemas/config/index.js b/packages/server/src/schemas/config/index.js new file mode 100644 index 00000000..0b0604e5 --- /dev/null +++ b/packages/server/src/schemas/config/index.js @@ -0,0 +1,4 @@ +export default { + key: { type: String, required: true }, + value: { type: Object, required: true }, +} \ No newline at end of file diff --git a/packages/server/src/schemas/index.js b/packages/server/src/schemas/index.js new file mode 100644 index 00000000..d34c97e1 --- /dev/null +++ b/packages/server/src/schemas/index.js @@ -0,0 +1,6 @@ +export { default as User } from "./user" +export { default as Role } from "./role" +export { default as Session } from "./session" +export { default as Config } from "./config" +export { default as Post } from "./post" +export { default as Comment } from "./comment" \ No newline at end of file diff --git a/packages/server/src/schemas/post/index.js b/packages/server/src/schemas/post/index.js new file mode 100644 index 00000000..53d7b6cf --- /dev/null +++ b/packages/server/src/schemas/post/index.js @@ -0,0 +1,7 @@ +export default { + user_id: { type: String, required: true }, + created_at: { type: Number, required: true }, + message: { type: String, required: true }, + likes: { type: Array, default: [] }, + comments: { type: Array, default: [] }, +} \ No newline at end of file diff --git a/packages/server/src/schemas/role/index.js b/packages/server/src/schemas/role/index.js new file mode 100644 index 00000000..6992f3d0 --- /dev/null +++ b/packages/server/src/schemas/role/index.js @@ -0,0 +1,5 @@ +export default { + name: String, + description: String, + apply: Object +} \ No newline at end of file diff --git a/packages/server/src/schemas/session/index.js b/packages/server/src/schemas/session/index.js new file mode 100644 index 00000000..03b8d87b --- /dev/null +++ b/packages/server/src/schemas/session/index.js @@ -0,0 +1,8 @@ +export default { + session_uuid: { type: String, required: true }, + token: { type: String, required: true }, + username: { type: String, required: true }, + user_id: { type: String, required: true }, + date: { type: Number, default: 0 }, + location: { type: String, default: "Unknown" }, +} \ No newline at end of file diff --git a/packages/server/src/schemas/user/index.js b/packages/server/src/schemas/user/index.js new file mode 100644 index 00000000..d994ed92 --- /dev/null +++ b/packages/server/src/schemas/user/index.js @@ -0,0 +1,12 @@ +export default { + refreshToken: { type: String, select: false }, + username: { type: String, required: true }, + password: { type: String, required: true, select: false }, + fullName: String, + avatar: { type: String }, + email: String, + roles: { type: Array, default: [] }, + verified: { type: Boolean, default: false }, + createdAt: { type: Date }, + badges: { type: Array, default: [] }, +} \ No newline at end of file diff --git a/packages/server/src/setup/dbAdmin/index.js b/packages/server/src/setup/dbAdmin/index.js new file mode 100644 index 00000000..9c20d664 --- /dev/null +++ b/packages/server/src/setup/dbAdmin/index.js @@ -0,0 +1,24 @@ +import { User } from "../../models" +import { createUser } from "../../lib" + +export default async () => { + // check if any user with includes admin role exists + const adminUser = await User.find({ + $or: [ + { roles: { $in: ['admin'] } }, + ], + }) + + // if no user with admin role exists, create one + if (adminUser.length === 0) { + console.log('Creating admin user...') + + await createUser({ + username: 'admin', + password: 'admin', + roles: ['admin'], + }) + + console.log('Admin user created!') + } +} \ No newline at end of file diff --git a/packages/server/src/setup/index.js b/packages/server/src/setup/index.js new file mode 100644 index 00000000..e136e2f9 --- /dev/null +++ b/packages/server/src/setup/index.js @@ -0,0 +1,6 @@ +import { default as dbAdmin } from "./dbAdmin" + +// set here the setup functions +export default [ + dbAdmin, +] \ No newline at end of file diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json deleted file mode 100644 index 67e0ac98..00000000 --- a/packages/server/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ts-node": { - "transpileOnly": true - }, - "compilerOptions": { - "target": "esnext", - "module": "commonjs", - "sourceMap": true, - "moduleResolution": "node", - "pretty": true, - "declaration": true, - "alwaysStrict": true, - // "allowSyntheticDefaultImports": true, - "strictNullChecks": true, - "esModuleInterop": true, - "noImplicitThis": true, - "noImplicitAny": true, - "downlevelIteration": true, - "lib": [ - "dom", // for URLSearchParams - "esnext" - ], - "outDir": "dist" - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "node_modules", - "text" - ] -} \ No newline at end of file diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock deleted file mode 100644 index dc364465..00000000 --- a/packages/server/yarn.lock +++ /dev/null @@ -1,4113 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"7zip-bin@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" - integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" - integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== - -"@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.10", "@babel/core@^7.12.9": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" - integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.12.5": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" - integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== - dependencies: - "@babel/types" "^7.12.11" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" - integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-compilation-targets@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" - integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== - dependencies: - "@babel/compat-data" "^7.12.5" - "@babel/helper-validator-option" "^7.12.1" - browserslist "^4.14.5" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" - integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.12.1": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" - integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - regexpu-core "^4.7.1" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" - integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" - integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/types" "^7.12.11" - -"@babel/helper-get-function-arity@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" - integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" - integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== - dependencies: - "@babel/types" "^7.12.7" - -"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== - dependencies: - "@babel/types" "^7.12.5" - -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" - integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-remap-async-to-generator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" - integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/types" "^7.12.1" - -"@babel/helper-replace-supers@^7.12.1": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" - integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.7" - "@babel/helper-optimise-call-expression" "^7.12.10" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.11" - -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" - integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== - dependencies: - "@babel/types" "^7.12.11" - -"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" - integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" - integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/node@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.12.10.tgz#2a78e1a3a98f08e0d5e8adbaba783bed5efb09ae" - integrity sha512-lJT1sXp1bEfAZ7B2ChEOOiUxaGbIWkcAixqZDpbHnJWUqIjoofOGo5ON1bJ9HOmtMdF7rqKiOoM7zZSI87El3g== - dependencies: - "@babel/register" "^7.12.10" - commander "^4.0.1" - core-js "^3.2.1" - lodash "^4.17.19" - node-environment-flags "^1.0.5" - regenerator-runtime "^0.13.4" - v8flags "^3.1.1" - -"@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" - integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== - -"@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" - integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" - integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-do-expressions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.12.1.tgz#8d7f1bc532d8168147555c26e3db922cc0dfd2f8" - integrity sha512-bpJ6Bfrzvdzb0vG6zBSNh3HLgFKh+S2CBpNmaLRjg2u7cNkzRPIqBjVURCmpG6pvPfKyxkizwbrXwpYtW3a9cw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-do-expressions" "^7.12.1" - -"@babel/plugin-proposal-dynamic-import@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" - integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-default-from@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz#c6e62d668a8abcfe0d28b82f560395fecb611c5a" - integrity sha512-z5Q4Ke7j0AexQRfgUvnD+BdCSgpTEKnqQ3kskk2jWtOBulxICzd1X9BGt7kmWftxZ2W3++OZdt5gtmC8KLxdRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-export-default-from" "^7.12.1" - -"@babel/plugin-proposal-export-namespace-from@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" - integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" - integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" - integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" - integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" - integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" - -"@babel/plugin-proposal-optional-catch-binding@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" - integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" - integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-private-methods@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" - integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" - integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" - integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-do-expressions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.12.1.tgz#6b83dfab79540b66912b559860ce6d4be4f7d960" - integrity sha512-a9TknRXkzfetNjOWSWnPIG/Y7x+elzcmKng2Qpvh8QaqdPo0OABizTjco8YO8r5xZNQfE58YHq7lWR+PKwHyxg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.1.tgz#a9eb31881f4f9a1115a3d2c6d64ac3f6016b5a9d" - integrity sha512-dP5eGg6tHEkhnRD2/vRG/KJKRSg8gtxu2i+P/8/yFPJn/CfPU5G0/7Gks2i3M6IOVAPQekmsLN9LPsmXFFL4Uw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-typescript@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" - integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-arrow-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" - integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" - integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.12.1" - -"@babel/plugin-transform-block-scoped-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" - integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.12.11": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" - integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" - integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" - integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" - integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" - integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" - integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" - integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" - integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" - integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" - integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" - integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" - integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== - dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" - integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== - dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.12.1" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" - integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-identifier" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" - integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== - dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" - integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - -"@babel/plugin-transform-new-target@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" - integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" - integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" - -"@babel/plugin-transform-parameters@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" - integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-property-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" - integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" - integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" - integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-runtime@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" - integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== - dependencies: - "@babel/helper-module-imports" "^7.12.5" - "@babel/helper-plugin-utils" "^7.10.4" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" - integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" - integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" - integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" - integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" - integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typescript@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" - integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-typescript" "^7.12.1" - -"@babel/plugin-transform-unicode-escapes@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" - integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" - integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" - integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== - dependencies: - "@babel/compat-data" "^7.12.7" - "@babel/helper-compilation-targets" "^7.12.5" - "@babel/helper-module-imports" "^7.12.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.11" - "@babel/plugin-proposal-async-generator-functions" "^7.12.1" - "@babel/plugin-proposal-class-properties" "^7.12.1" - "@babel/plugin-proposal-dynamic-import" "^7.12.1" - "@babel/plugin-proposal-export-namespace-from" "^7.12.1" - "@babel/plugin-proposal-json-strings" "^7.12.1" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" - "@babel/plugin-proposal-numeric-separator" "^7.12.7" - "@babel/plugin-proposal-object-rest-spread" "^7.12.1" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.12.7" - "@babel/plugin-proposal-private-methods" "^7.12.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.12.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.12.1" - "@babel/plugin-transform-arrow-functions" "^7.12.1" - "@babel/plugin-transform-async-to-generator" "^7.12.1" - "@babel/plugin-transform-block-scoped-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.11" - "@babel/plugin-transform-classes" "^7.12.1" - "@babel/plugin-transform-computed-properties" "^7.12.1" - "@babel/plugin-transform-destructuring" "^7.12.1" - "@babel/plugin-transform-dotall-regex" "^7.12.1" - "@babel/plugin-transform-duplicate-keys" "^7.12.1" - "@babel/plugin-transform-exponentiation-operator" "^7.12.1" - "@babel/plugin-transform-for-of" "^7.12.1" - "@babel/plugin-transform-function-name" "^7.12.1" - "@babel/plugin-transform-literals" "^7.12.1" - "@babel/plugin-transform-member-expression-literals" "^7.12.1" - "@babel/plugin-transform-modules-amd" "^7.12.1" - "@babel/plugin-transform-modules-commonjs" "^7.12.1" - "@babel/plugin-transform-modules-systemjs" "^7.12.1" - "@babel/plugin-transform-modules-umd" "^7.12.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" - "@babel/plugin-transform-new-target" "^7.12.1" - "@babel/plugin-transform-object-super" "^7.12.1" - "@babel/plugin-transform-parameters" "^7.12.1" - "@babel/plugin-transform-property-literals" "^7.12.1" - "@babel/plugin-transform-regenerator" "^7.12.1" - "@babel/plugin-transform-reserved-words" "^7.12.1" - "@babel/plugin-transform-shorthand-properties" "^7.12.1" - "@babel/plugin-transform-spread" "^7.12.1" - "@babel/plugin-transform-sticky-regex" "^7.12.7" - "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.10" - "@babel/plugin-transform-unicode-escapes" "^7.12.1" - "@babel/plugin-transform-unicode-regex" "^7.12.1" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.11" - core-js-compat "^3.8.0" - semver "^5.5.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-typescript@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" - integrity sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.1" - "@babel/plugin-transform-typescript" "^7.12.1" - -"@babel/register@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.10.tgz#19b87143f17128af4dbe7af54c735663b3999f60" - integrity sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" - integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4", "@babel/template@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" - integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" - integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== - dependencies: - "@babel/code-frame" "^7.12.11" - "@babel/generator" "^7.12.11" - "@babel/helper-function-name" "^7.12.11" - "@babel/helper-split-export-declaration" "^7.12.11" - "@babel/parser" "^7.12.11" - "@babel/types" "^7.12.12" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" - integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@nodecorejs/builder@0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@nodecorejs/builder/-/builder-0.15.1.tgz#0ae30203a6d4feb0d53cdfa4fe86a7ace6b25f81" - integrity sha512-XGhjU082rimBucHVUYcRqD3SDFUQfnIQae65A/49ssVCE2vFxhtozkfV3Zu9tPq+DteqjGuopm1NlcDk5npzfw== - dependencies: - "@babel/core" "^7.12.10" - "@babel/plugin-proposal-class-properties" "^7.12.1" - "@babel/plugin-proposal-do-expressions" "^7.12.1" - "@babel/plugin-proposal-export-default-from" "^7.12.1" - "@babel/plugin-transform-runtime" "^7.12.10" - "@babel/preset-env" "^7.12.11" - "@babel/preset-typescript" "^7.12.7" - "@babel/runtime" "^7.12.5" - "@nodecorejs/utils" "0.15.1" - rimraf "^3.0.2" - slash2 "^2.0.0" - through2 "^4.0.2" - vinyl-fs "^3.0.3" - -"@nodecorejs/cli@0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@nodecorejs/cli/-/cli-0.15.1.tgz#1e1996a3b32d581cb92a30ed39dcbea182e9d119" - integrity sha512-jEpsvtHlsOvYO7cby7MMaxYt4V8Z4AIxjwVZ2yVKT5O/8aUqC/1aWXp6mOjZVEFt0g8oVqatolbjXsLVvS6WiA== - dependencies: - "7zip-bin" "^5.0.3" - "@nodecorejs/builder" "0.15.1" - "@nodecorejs/dot-runtime" "0.15.1" - "@nodecorejs/utils" "0.15.1" - axios "^0.21.0" - chalk "^4.1.0" - cli-spinners "^2.5.0" - escape-goat "^3.0.0" - execa "^4.1.0" - inquirer "^7.3.3" - listr "^0.14.3" - log4js "^6.3.0" - new-github-release-url "^1.0.0" - node-7z "^2.1.2" - node-fetch "^2.6.1" - open "^7.3.0" - ora "^5.1.0" - prompt "^1.0.0" - yargs "^16.2.0" - -"@nodecorejs/cloudlink@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@nodecorejs/cloudlink/-/cloudlink-0.15.1.tgz#b21a5b70dd29c55eac514b06f10a9bf6565b8961" - integrity sha512-I8C6wd05JjF2tcEGw053z4bcA5IgJkeur1Kxjzf9OgC2UhxggfJoQFUzFgBAuejWF0B0GhfQ9GS2sM2jqxeRJA== - dependencies: - "@nodecorejs/dot-runtime" "0.15.1" - "@nodecorejs/utils" "0.15.1" - async-mutex "^0.2.6" - axios "^0.21.1" - express "^4.17.1" - localforage "^1.9.0" - path-to-regexp "^6.2.0" - -"@nodecorejs/dot-runtime@0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@nodecorejs/dot-runtime/-/dot-runtime-0.15.1.tgz#aac534242b2382d97f0e3bb122511365312ef788" - integrity sha512-KdCM24ha3jG07eMqUvJYXBzt3D726agDapDN3GWPPxBXSGU15p75dcnpM7YDQPUi72F4kP5jORVInLkYAUqYnA== - dependencies: - "@nodecorejs/utils" "0.15.1" - -"@nodecorejs/utils@0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@nodecorejs/utils/-/utils-0.15.1.tgz#acc318299565534bf3d0c28534c146495faafbbb" - integrity sha512-mZeNA/jFQWJZk/M4zRM7m7JTZ6fTul33D1HS1X20gaPI9nGVungfnBcAR19L29AdIzKhJDsgg6le8Pc43JpzEg== - dependencies: - "@babel/core" "^7.12.9" - chalk "^4.1.0" - color "^3.1.3" - lodash "^4.17.15" - stack-trace "^0.0.10" - -"@ragestudio/nodecorejs@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@ragestudio/nodecorejs/-/nodecorejs-0.15.1.tgz#1d993051b834de07663e0292b60bc9998fd04cbc" - integrity sha512-xpvxEsZYTAI3DW3uacpiyihkJYXd+qqURv/t/Ysao4N6RNhPO+gVyNmzOb2Kvf9FT/1PWLMP1YTHpzw/4q6kWQ== - dependencies: - "@babel/core" "7.12.9" - "@babel/runtime" "^7.12.5" - "@nodecorejs/builder" "0.15.1" - "@nodecorejs/cli" "0.15.1" - "@nodecorejs/dot-runtime" "0.15.1" - "@nodecorejs/utils" "0.15.1" - resolve-cwd "^3.0.0" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -async-mutex@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" - integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== - dependencies: - tslib "^2.0.0" - -async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - -async@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" - integrity sha1-+PwEyjoTeErenhZBr5hXjPvWR6k= - -axios@^0.21.0, axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -babel-node@^0.0.1-security: - version "0.0.1-security" - resolved "https://registry.yarnpkg.com/babel-node/-/babel-node-0.0.1-security.tgz#cbff6d9e7a2acb4065c1839c234d5c57091d7217" - integrity sha512-zF3D9H2FA2xrP+B/X462G+38aHpmR+33jBF7NowfPuV4CiPEzAR1Typ1RC+qPfe0vCeWeV0FLG2pfVGb0vIfeg== - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -bl@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - 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" - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.14.5, browserslist@^4.16.0: - version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" - integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== - dependencies: - caniuse-lite "^1.0.30001173" - colorette "^1.2.1" - electron-to-chromium "^1.3.634" - escalade "^3.1.1" - node-releases "^1.1.69" - -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.1.tgz#29aca9151f8ddcfd5b9b786898f005f425e88567" - integrity sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001173: - version "1.0.30001173" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" - integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^3.2.2: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" - integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" - integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -colors@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.5.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -core-js-compat@^3.8.0: - version "3.8.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" - integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== - dependencies: - browserslist "^4.16.0" - semver "7.0.0" - -core-js@^3.2.1: - version "3.8.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.2.tgz#0a1fd6709246da9ca8eff5bb0cbd15fba9ac7044" - integrity sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -date-format@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== - -date-format@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" - integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -deep-equal@~0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d" - integrity sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.634: - version "1.3.635" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.635.tgz#8d1591eeca6b257d380061a2c04f0b3cc6c9e33b" - integrity sha512-RRriZOLs9CpW6KTLmgBqyUdnY0QNqqWs0HOtuQGGEMizOTNNn1P7sGRBxARnUeLejOsgwjDyRqT3E/CSst02ZQ== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-goat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-3.0.0.tgz#e8b5fb658553fe8a3c4959c316c6ebb8c842b19c" - integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - 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" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - 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@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flatted@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.10.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" - integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" - integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" - integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob@^7.1.1, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -i@0.3.x: - version "0.3.6" - resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" - integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - -is-negative-zero@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - -is-windows@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isstream@0.1.x: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= - dependencies: - immediate "~3.0.5" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -localforage@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" - integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g== - dependencies: - lie "3.1.1" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.defaultto@^4.14.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/lodash.defaultto/-/lodash.defaultto-4.14.0.tgz#38bd3d425acee733e0e2bbbd4e4b29711cc2ee11" - integrity sha1-OL09QlrO5zPg4ru9TkspcRzC7hE= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.isempty@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= - -lodash.negate@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.negate/-/lodash.negate-3.0.2.tgz#9c897b0bf610019e0b43b8ff3f0afef3d7b66f34" - integrity sha1-nIl7C/YQAZ4LQ7j/Pwr+89e2bzQ= - -lodash@^4.17.15, lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -log4js@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" - integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== - dependencies: - date-format "^3.0.0" - debug "^4.1.1" - flatted "^2.0.1" - rfdc "^1.1.4" - streamroller "^2.2.4" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@~2.1.24: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== - dependencies: - mime-db "1.45.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@0.x.x: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -ncp@1.0.x: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246" - integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -new-github-release-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-1.0.0.tgz#493847e6fecce39c247e9d89929be773d2e7f777" - integrity sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A== - dependencies: - type-fest "^0.4.1" - -node-7z@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/node-7z/-/node-7z-2.1.2.tgz#8c15d6cf7c1baae6b6774721507c8b56ec4e6dbb" - integrity sha512-mSmn90OIYKYIkuRwH1YRJl2sMwB9OlYhCQS4SPTOfxlzWwomoC1G9j4tsvAsv7vJPwvK7B76Z0a2dH5Mvwo91Q== - dependencies: - cross-spawn "^7.0.2" - debug "^4.1.1" - lodash.defaultsdeep "^4.6.1" - lodash.defaultto "^4.14.0" - lodash.flattendeep "^4.4.0" - lodash.isempty "^4.4.0" - lodash.negate "^3.0.2" - normalize-path "^3.0.0" - -node-environment-flags@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-releases@^1.1.69: - version "1.1.69" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" - integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== - -nodemon@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" - integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.3" - update-notifier "^4.1.0" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" - integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^7.3.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/open/-/open-7.3.1.tgz#111119cb919ca1acd988f49685c4fdd0f4755356" - integrity sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -ora@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.2.0.tgz#de10bfd2d15514384af45f3fa9d9b1aaf344fda1" - integrity sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ== - dependencies: - bl "^4.0.3" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - log-symbols "^4.0.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" - integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -prompt@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.1.0.tgz#7ae829c6d39bbc6f9b1927f9861e9ac074744167" - integrity sha512-ec1vUPXCplDBDUVD8uPa3XGA+OzLrO40Vxv3F1uxoiZGkZhdctlK2JotcHq5X6ExjocDOGwGdCSXloGNyU5L1Q== - dependencies: - colors "^1.1.2" - read "1.0.x" - revalidator "0.1.x" - utile "0.3.x" - winston "2.x" - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -pupa@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read@1.0.x: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - -resolve@^1.3.2: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -revalidator@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" - integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= - -rfdc@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" - integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== - -rimraf@2.x.x: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.3.3, rxjs@^6.6.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - 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" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash2/-/slash2-2.0.0.tgz#f4e0a11708b8545b912695981cf7096f52c63487" - integrity sha512-7ElvBydJPi3MHU/KEOblFSbO/skl4Z69jKkFCpYIYVOMSIZsKi4gYU43HGeZPmjxCXrHekoDAAewphPQNnsqtA== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -source-map-support@^0.5.16: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -stack-trace@0.0.x, stack-trace@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -streamroller@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" - integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== - dependencies: - date-format "^2.1.0" - debug "^4.1.1" - fs-extra "^8.1.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -undefsafe@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-notifier@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utile@0.3.x: - version "0.3.0" - resolved "https://registry.yarnpkg.com/utile/-/utile-0.3.0.tgz#1352c340eb820e4d8ddba039a4fbfaa32ed4ef3a" - integrity sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo= - dependencies: - async "~0.9.0" - deep-equal "~0.2.1" - i "0.3.x" - mkdirp "0.x.x" - ncp "1.0.x" - rimraf "2.x.x" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -v8flags@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vinyl-fs@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -winston@2.x: - version "2.4.5" - resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.5.tgz#f2e431d56154c4ea765545fc1003bd340c95b59a" - integrity sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A== - dependencies: - async "~1.0.0" - colors "1.0.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - stack-trace "0.0.x" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - -yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" diff --git a/packages/wrapper/package.json b/packages/wrapper/package.json index 8b301b3a..1f137c01 100644 --- a/packages/wrapper/package.json +++ b/packages/wrapper/package.json @@ -28,5 +28,6 @@ "styled-components": "^5.2.0", "umi": "^3.4.20", "yorkie": "^2.0.0" - } + }, + "version": "0.13.0" } diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100755 index 817e3b20..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "importHelpers": true, - "jsx": "react", - "esModuleInterop": true, - "sourceMap": true, - "baseUrl": "./", - "strict": true, - "paths": { - "@/*": ["src/*"], - "@@/*": ["src/.umi/*"] - }, - "allowSyntheticDefaultImports": true - }, - "include": [ - "src/**/*", - "packages/comty/config/**/*", - "packages/comty/.umirc.js", - "packages/comty/typings.d.ts" - ] -}